Skip to content

Commit

Permalink
fix: service worker registration with custom protocols (#34291)
Browse files Browse the repository at this point in the history
Refs #32664
  • Loading branch information
deepak1556 committed May 23, 2022
1 parent fbc398f commit 74b85af
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 4 deletions.
1 change: 1 addition & 0 deletions patches/chromium/.patches
Expand Up @@ -119,3 +119,4 @@ cherry-pick-cf64617c1cc5.patch
cherry-pick-e2b8856012e0.patch
cherry-pick-6b66a45021a0.patch
fix_xkb_keysym_reverse_look_up_for_lacros.patch
custom_protocols_plzserviceworker.patch
43 changes: 43 additions & 0 deletions patches/chromium/custom_protocols_plzserviceworker.patch
@@ -0,0 +1,43 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: deepak1556 <hop2deep@gmail.com>
Date: Fri, 20 May 2022 00:29:34 +0900
Subject: custom_protocols_plzserviceworker.patch

Allow registering custom protocols to handle service worker main script fetching with PlzServiceWorker.

Refs https://bugs.chromium.org/p/chromium/issues/detail?id=996511

diff --git a/content/browser/service_worker/service_worker_context_wrapper.cc b/content/browser/service_worker/service_worker_context_wrapper.cc
index 4ce769314c6dddae41d915c7f05916f77f26a86e..d8f6882f2dee93fc127e7617abbcc7b71a65775d 100644
--- a/content/browser/service_worker/service_worker_context_wrapper.cc
+++ b/content/browser/service_worker/service_worker_context_wrapper.cc
@@ -1600,6 +1600,29 @@ ServiceWorkerContextWrapper::GetLoaderFactoryForBrowserInitiatedRequest(
std::unique_ptr<network::PendingSharedURLLoaderFactory>
loader_factory_bundle_info =
context()->loader_factory_bundle_for_update_check()->Clone();
+
+ // Give the embedder a chance to register custom schemes that can
+ // handle loading the service worker main script.
+ // Previous registration triggered by
+ // ServiceWorkerContextWrapper::CreateNonNetworkPendingURLLoaderFactoryBundleForUpdateCheck
+ // happens early on browser startup before the JS in the main process
+ // is run by the embedder.
+ auto* factory_bundle = static_cast<blink::PendingURLLoaderFactoryBundle*>(
+ loader_factory_bundle_info.get());
+ ContentBrowserClient::NonNetworkURLLoaderFactoryMap non_network_factories;
+ GetContentClient()
+ ->browser()
+ ->RegisterNonNetworkServiceWorkerUpdateURLLoaderFactories(
+ storage_partition_->browser_context(), &non_network_factories);
+ for (auto& pair : non_network_factories) {
+ const std::string& scheme = pair.first;
+ mojo::PendingRemote<network::mojom::URLLoaderFactory>& factory_remote =
+ pair.second;
+
+ factory_bundle->pending_scheme_specific_factories().emplace(
+ scheme, std::move(factory_remote));
+ }
+
static_cast<blink::PendingURLLoaderFactoryBundle*>(
loader_factory_bundle_info.get())
->pending_default_factory() = std::move(remote);
5 changes: 5 additions & 0 deletions shell/browser/electron_browser_client.cc
Expand Up @@ -1311,6 +1311,11 @@ void ElectronBrowserClient::
DCHECK(browser_context);
DCHECK(factories);

auto* protocol_registry =
ProtocolRegistry::FromBrowserContext(browser_context);
protocol_registry->RegisterURLLoaderFactories(factories,
false /* allow_file_access */);

#if BUILDFLAG(ENABLE_EXTENSIONS)
factories->emplace(
extensions::kExtensionScheme,
Expand Down
5 changes: 1 addition & 4 deletions spec-main/api-protocol-spec.ts
Expand Up @@ -764,10 +764,7 @@ describe('protocol module', () => {
await expect(contents.executeJavaScript(`navigator.serviceWorker.register('${v4()}.notjs', {scope: './'})`)).to.be.rejected();
});

// TODO(nornagon): I'm not sure why this isn't working, but I'm choosing to
// disable this test for now to land the roll. See
// https://github.com/electron/electron/issues/32664.
it.skip('should be able to register service worker for custom scheme', async () => {
it('should be able to register service worker for custom scheme', async () => {
await contents.loadURL(`${serviceWorkerScheme}://${v4()}.com`);
await contents.executeJavaScript(`navigator.serviceWorker.register('${v4()}.js', {scope: './'})`);
});
Expand Down

0 comments on commit 74b85af

Please sign in to comment.