Skip to content

Commit

Permalink
fix: handle service workers in extensions (#8807)
Browse files Browse the repository at this point in the history
Closes #8800
  • Loading branch information
OrKoN committed Aug 17, 2022
1 parent 51b2f05 commit 2a0eefb
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 6 deletions.
9 changes: 5 additions & 4 deletions src/common/ChromeTargetManager.ts
Expand Up @@ -317,11 +317,12 @@ export class ChromeTargetManager extends EventEmitter implements TargetManager {
) {
this.#finishInitializationIfReady(targetInfo.targetId);
await silentDetach();
if (parentSession instanceof CDPSession) {
const target = this.#targetFactory(targetInfo);
this.#attachedTargetsByTargetId.set(targetInfo.targetId, target);
this.emit(TargetManagerEmittedEvents.TargetAvailable, target);
if (this.#attachedTargetsByTargetId.has(targetInfo.targetId)) {
return;
}
const target = this.#targetFactory(targetInfo);
this.#attachedTargetsByTargetId.set(targetInfo.targetId, target);
this.emit(TargetManagerEmittedEvents.TargetAvailable, target);
return;
}

Expand Down
1 change: 1 addition & 0 deletions test/assets/serviceworkers/extension/background.js
@@ -0,0 +1 @@
// empty
9 changes: 9 additions & 0 deletions test/assets/serviceworkers/extension/manifest.json
@@ -0,0 +1,9 @@
{
"name": "Simple extension",
"version": "0.1",
"background": {
"service_worker": "background.js"
},
"permissions": ["background", "activeTab"],
"manifest_version": 3
}
31 changes: 29 additions & 2 deletions test/src/headful.spec.ts
Expand Up @@ -36,6 +36,13 @@ const mkdtempAsync = promisify(fs.mkdtemp);
const TMP_FOLDER = path.join(os.tmpdir(), 'pptr_tmp_folder-');

const extensionPath = path.join(__dirname, '../assets', 'simple-extension');
const serviceWorkerExtensionPath = path.join(
__dirname,
'..',
'assets',
'serviceworkers',
'extension'
);

describeChromeOnly('headful tests', function () {
/* These tests fire up an actual browser so let's
Expand Down Expand Up @@ -120,22 +127,42 @@ describeChromeOnly('headful tests', function () {
);
const page = await browserWithExtension.newPage();
const backgroundPageTarget = await browserWithExtension.waitForTarget(
(target: {type: () => string}) => {
target => {
return target.type() === 'background_page';
}
);
await page.close();
await browserWithExtension.close();
expect(backgroundPageTarget).toBeTruthy();
});
it('service_worker target type should be available', async () => {
const {puppeteer, defaultBrowserOptions} = getTestState();
const browserWithExtension = await launchBrowser(puppeteer, {
...defaultBrowserOptions,
headless: false,
args: [
`--disable-extensions-except=${serviceWorkerExtensionPath}`,
`--load-extension=${serviceWorkerExtensionPath}`,
],
});
const page = await browserWithExtension.newPage();
const serviceWorkerTarget = await browserWithExtension.waitForTarget(
target => {
return target.type() === 'service_worker';
}
);
await page.close();
await browserWithExtension.close();
expect(serviceWorkerTarget).toBeTruthy();
});
it('target.page() should return a background_page', async function () {
const {puppeteer} = getTestState();
const browserWithExtension = await launchBrowser(
puppeteer,
extensionOptions
);
const backgroundPageTarget = await browserWithExtension.waitForTarget(
(target: {type: () => string}) => {
target => {
return target.type() === 'background_page';
}
);
Expand Down

0 comments on commit 2a0eefb

Please sign in to comment.