Skip to content

Commit

Permalink
fix: Chrome Extensions service worker host registration (#39312)
Browse files Browse the repository at this point in the history
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
  • Loading branch information
trop[bot] and codebytere committed Aug 1, 2023
1 parent c18e5ba commit 990fb72
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 1 deletion.
4 changes: 4 additions & 0 deletions shell/browser/electron_browser_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
#include "extensions/browser/process_manager.h"
#include "extensions/browser/process_map.h"
#include "extensions/browser/service_worker/service_worker_host.h"
#include "extensions/browser/url_loader_factory_manager.h"
#include "extensions/common/api/mime_handler.mojom.h"
#include "extensions/common/constants.h"
Expand Down Expand Up @@ -1546,6 +1547,9 @@ void ElectronBrowserClient::ExposeInterfacesToRenderer(
associated_registry->AddInterface<extensions::mojom::GuestView>(
base::BindRepeating(&extensions::ExtensionsGuestView::CreateForExtensions,
render_process_host->GetID()));
associated_registry->AddInterface<extensions::mojom::ServiceWorkerHost>(
base::BindRepeating(&extensions::ServiceWorkerHost::BindReceiver,
render_process_host->GetID()));
#endif
}

Expand Down
15 changes: 15 additions & 0 deletions spec/extensions-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -698,5 +698,20 @@ describe('chrome extensions', () => {
const scope = await registrationPromise;
expect(scope).equals(extension.url);
});

it('can run chrome extension APIs', async () => {
const customSession = session.fromPartition(`persist:${uuid.v4()}`);
const w = new BrowserWindow({ show: false, webPreferences: { session: customSession, nodeIntegration: true } });
await customSession.loadExtension(path.join(fixtures, 'extensions', 'mv3-service-worker'));

await w.loadURL(url);

w.webContents.executeJavaScript('window.postMessage(\'fetch-confirmation\', \'*\')');

const [, , responseString] = await once(w.webContents, 'console-message');
const { message } = JSON.parse(responseString);

expect(message).to.equal('Hello from background.js');
});
});
});
8 changes: 7 additions & 1 deletion spec/fixtures/extensions/mv3-service-worker/background.js
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
console.log('service worker installed');
/* global chrome */

chrome.runtime.onMessage.addListener((message, _sender, sendResponse) => {
if (message === 'fetch-confirmation') {
sendResponse({ message: 'Hello from background.js' });
}
});
13 changes: 13 additions & 0 deletions spec/fixtures/extensions/mv3-service-worker/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/* global chrome */

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
sendResponse(message);
});

window.addEventListener('message', (event) => {
if (event.data === 'fetch-confirmation') {
chrome.runtime.sendMessage('fetch-confirmation', response => {
console.log(JSON.stringify(response));
});
}
}, false);
11 changes: 11 additions & 0 deletions spec/fixtures/extensions/mv3-service-worker/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,17 @@
"description": "Test for extension service worker support.",
"version": "1.0",
"manifest_version": 3,
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": [
"main.js"
],
"run_at": "document_start"
}
],
"background": {
"service_worker": "background.js"
}
Expand Down

0 comments on commit 990fb72

Please sign in to comment.