custom_protocols_plzserviceworker.patch 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
  2. From: deepak1556 <[email protected]>
  3. Date: Fri, 20 May 2022 00:29:34 +0900
  4. Subject: custom_protocols_plzserviceworker.patch
  5. Allow registering custom protocols to handle service worker main script fetching with PlzServiceWorker.
  6. Refs https://bugs.chromium.org/p/chromium/issues/detail?id=996511
  7. diff --git a/content/browser/service_worker/service_worker_context_wrapper.cc b/content/browser/service_worker/service_worker_context_wrapper.cc
  8. index e879216a2f2cde45d9f4286e65400b0b60e1d04f..69e20bb1b257c3199774656c48b1d1a865523e5c 100644
  9. --- a/content/browser/service_worker/service_worker_context_wrapper.cc
  10. +++ b/content/browser/service_worker/service_worker_context_wrapper.cc
  11. @@ -2024,6 +2024,26 @@ ServiceWorkerContextWrapper::GetLoaderFactoryForBrowserInitiatedRequest(
  12. loader_factory_bundle_info =
  13. context()->loader_factory_bundle_for_update_check()->Clone();
  14. + // Give the embedder a chance to register custom schemes that can
  15. + // handle loading the service worker main script.
  16. + // Previous registration triggered by
  17. + // ServiceWorkerContextWrapper::CreateNonNetworkPendingURLLoaderFactoryBundleForUpdateCheck
  18. + // happens early on browser startup before the JS in the main process
  19. + // is run by the embedder.
  20. + auto& pending_scheme_specific_factories =
  21. + static_cast<blink::PendingURLLoaderFactoryBundle*>(
  22. + loader_factory_bundle_info.get())
  23. + ->pending_scheme_specific_factories();
  24. + ContentBrowserClient::NonNetworkURLLoaderFactoryMap non_network_factories;
  25. + GetContentClient()
  26. + ->browser()
  27. + ->RegisterNonNetworkServiceWorkerUpdateURLLoaderFactories(
  28. + storage_partition_->browser_context(), &non_network_factories);
  29. + for (auto& [scheme, factory_remote] : non_network_factories) {
  30. + pending_scheme_specific_factories.emplace(
  31. + scheme, std::move(factory_remote));
  32. + }
  33. +
  34. if (auto* config = content::WebUIConfigMap::GetInstance().GetConfig(
  35. browser_context(), scope)) {
  36. // If this is a Service Worker for a WebUI, the WebUI's URLDataSource
  37. @@ -2043,9 +2063,7 @@ ServiceWorkerContextWrapper::GetLoaderFactoryForBrowserInitiatedRequest(
  38. features::kEnableServiceWorkersForChromeScheme) &&
  39. scope.scheme_piece() == kChromeUIScheme) {
  40. config->RegisterURLDataSource(browser_context());
  41. - static_cast<blink::PendingURLLoaderFactoryBundle*>(
  42. - loader_factory_bundle_info.get())
  43. - ->pending_scheme_specific_factories()
  44. + pending_scheme_specific_factories
  45. .emplace(kChromeUIScheme, CreateWebUIServiceWorkerLoaderFactory(
  46. browser_context(), kChromeUIScheme,
  47. base::flat_set<std::string>()));
  48. @@ -2053,9 +2071,7 @@ ServiceWorkerContextWrapper::GetLoaderFactoryForBrowserInitiatedRequest(
  49. features::kEnableServiceWorkersForChromeUntrusted) &&
  50. scope.scheme_piece() == kChromeUIUntrustedScheme) {
  51. config->RegisterURLDataSource(browser_context());
  52. - static_cast<blink::PendingURLLoaderFactoryBundle*>(
  53. - loader_factory_bundle_info.get())
  54. - ->pending_scheme_specific_factories()
  55. + pending_scheme_specific_factories
  56. .emplace(kChromeUIUntrustedScheme,
  57. CreateWebUIServiceWorkerLoaderFactory(
  58. browser_context(), kChromeUIUntrustedScheme,