Browser Extension Update Support
The lifecycle of a browser extension doesn't end with publication. Browsers update engines, Manifest API changes, target websites change DOM structure — all this breaks extensions without maintenance. Scheduled updates, error monitoring and quick response to store reviews.
Update Release System
Chrome extensions update via Chrome Web Store automatically. Users receive updates within hours of publication.
Staged rollout in Chrome Web Store allows rolling out updates to 1%, 10%, 50% of users — a safe way to verify stability before full release.
// manifest.json: specify update URL for enterprise environments
{
"update_url": "https://clients2.google.com/service/update2/crx"
}
Error Monitoring from Extension
// background.js: centralized error handler
self.addEventListener('unhandledrejection', (event) => {
reportError({
type: 'unhandled_rejection',
message: event.reason?.message,
stack: event.reason?.stack,
url: 'background',
});
});
function reportError(error) {
// Send to Sentry or own endpoint
fetch('https://api.example.com/v1/extension/errors', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
...error,
extension_version: chrome.runtime.getManifest().version,
browser: navigator.userAgent,
timestamp: new Date().toISOString(),
}),
}).catch(() => {}); // silently ignore reporting errors
}
Manifest V2 → V3 Migration
Transition to Manifest V3 is mandatory from 2024 onwards for Chrome. Key changes:
| MV2 | MV3 | Solution |
|---|---|---|
background.page |
service_worker |
No DOM access, only events |
XMLHttpRequest in background |
fetch() |
Rewrite requests |
chrome.extension.getURL |
chrome.runtime.getURL |
Replace calls |
| Inline scripts in popup | Separate .js files | Extract scripts |
webRequestBlocking |
Declarative Net Request | Rework blocks |
Testing Before Update
# Automated extension testing via Playwright
const { chromium } = require('playwright');
const browser = await chromium.launchPersistentContext('.profile', {
headless: false,
args: [`--load-extension=${path.resolve('dist')}`],
});
const extensionId = await getExtensionId(browser);
const popup = await browser.newPage();
await popup.goto(`chrome-extension://${extensionId}/popup.html`);
// Authorization test
await popup.click('#login-button');
await popup.waitForSelector('#user-name', { timeout: 5000 });
Firefox and Edge Support
Chrome extensions work in Edge without changes. Firefox requires minor adaptations:
-
browser.*instead ofchrome.*(or polyfillwebextension-polyfill) - Separate publication in Firefox Add-ons (AMO)
- Signing via
web-ext sign
npm install -g web-ext
web-ext sign --api-key=... --api-secret=...
Support Timeframes
Scheduled update (fix + 1–2 new features): 3–5 business days. Urgent hotfix on breakage: 1–2 business days.







