1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
- From: deepak1556 <[email protected]>
- 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 0d1a5e0874546d1ead5e84a3fa7b4cbac943d1b7..54a9ca8e45b2f935463f41b68617c959b88f1247 100644
- --- a/content/browser/service_worker/service_worker_context_wrapper.cc
- +++ b/content/browser/service_worker/service_worker_context_wrapper.cc
- @@ -1852,6 +1852,26 @@ ServiceWorkerContextWrapper::GetLoaderFactoryForBrowserInitiatedRequest(
- 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& pending_scheme_specific_factories =
- + static_cast<blink::PendingURLLoaderFactoryBundle*>(
- + loader_factory_bundle_info.get())
- + ->pending_scheme_specific_factories();
- + ContentBrowserClient::NonNetworkURLLoaderFactoryMap non_network_factories;
- + GetContentClient()
- + ->browser()
- + ->RegisterNonNetworkServiceWorkerUpdateURLLoaderFactories(
- + storage_partition_->browser_context(), &non_network_factories);
- + for (auto& [scheme, factory_remote] : non_network_factories) {
- + pending_scheme_specific_factories.emplace(
- + scheme, std::move(factory_remote));
- + }
- +
- if (auto* config = content::WebUIConfigMap::GetInstance().GetConfig(
- browser_context(), scope)) {
- // If this is a Service Worker for a WebUI, the WebUI's URLDataSource
- @@ -1871,9 +1891,7 @@ ServiceWorkerContextWrapper::GetLoaderFactoryForBrowserInitiatedRequest(
- features::kEnableServiceWorkersForChromeScheme) &&
- scope.scheme_piece() == kChromeUIScheme) {
- config->RegisterURLDataSource(browser_context());
- - static_cast<blink::PendingURLLoaderFactoryBundle*>(
- - loader_factory_bundle_info.get())
- - ->pending_scheme_specific_factories()
- + pending_scheme_specific_factories
- .emplace(kChromeUIScheme, CreateWebUIServiceWorkerLoaderFactory(
- browser_context(), kChromeUIScheme,
- base::flat_set<std::string>()));
- @@ -1881,9 +1899,7 @@ ServiceWorkerContextWrapper::GetLoaderFactoryForBrowserInitiatedRequest(
- features::kEnableServiceWorkersForChromeUntrusted) &&
- scope.scheme_piece() == kChromeUIUntrustedScheme) {
- config->RegisterURLDataSource(browser_context());
- - static_cast<blink::PendingURLLoaderFactoryBundle*>(
- - loader_factory_bundle_info.get())
- - ->pending_scheme_specific_factories()
- + pending_scheme_specific_factories
- .emplace(kChromeUIUntrustedScheme,
- CreateWebUIServiceWorkerLoaderFactory(
- browser_context(), kChromeUIUntrustedScheme,
|