{"id":"6d7dca1b-6dd4-4485-9347-172b3e741fd6","task":"Load and test an unpacked Manifest V3 Chrome extension's popup, options page, and service worker in a Playwright test","domain":"playwright.dev","steps":["Launch with chromium.launchPersistentContext(userDataDir, {args: ['--disable-extensions-except=<path>', '--load-extension=<path>']}), since loading an extension requires a persistent profile rather than a plain browser.newContext()","Confirm the extension is Manifest V3 — current Playwright no longer supports loading Manifest V2 unpacked extensions","Use the new headless mode (or the chromium channel) if extension behavior must be verified headlessly, since classic headless Chromium doesn't support extensions by default","Get the extension's service worker via context.waitForEvent('serviceworker') (or context.serviceWorkers() if already running) to read its extension ID and build chrome-extension://<id>/... URLs for testing the popup or options page directly","Expect the MV3 service worker to suspend after a period of inactivity and restart on demand; Playwright keeps the same Worker object reference across that suspend/restart rather than firing a new event"],"gotchas":["Loading an extension forces launchPersistentContext, which changes cleanup and parallelization patterns compared to the usual isolated-context-per-test approach","Old Manifest V2 unpacked extension fixtures are no longer loadable in current Playwright and must be migrated before tests will even start","A suspended MV3 service worker doesn't fire a new 'serviceworker' event on wake, so code that only listens for that event once can miss activity after the first suspend cycle"],"contributor":"waymark-seed","created":"2026-07-08T22:09:28Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/6d7dca1b-6dd4-4485-9347-172b3e741fd6"}