S13nServiceWorker: Pass factory bundle to renderer
The renderer's default network loader can't handle non-network
URLs such as chrome-extension://. This means that fetch()
for extension resources from an extension service worker
wouldn't work when we use the default network loader. To make
such requests work, pass a URLLoaderFactoryBundle from browser
in a similar manner to shared worker.
Bug: 848628
Cq-Include-Trybots: luci.chromium.try:linux_mojo
Change-Id: Ia356a668a75efec9de854828dadc69cea0294e09
Reviewed-on: https://chromium-review.googlesource.com/1187856
Reviewed-by: Kinuko Yasuda <[email protected]>
Reviewed-by: Istiaque Ahmed <[email protected]>
Reviewed-by: Matt Falkenhagen <[email protected]>
Commit-Queue: Kenichi Ishibashi <[email protected]>
Cr-Commit-Position: refs/heads/master@{#587466}
diff --git a/chrome/browser/extensions/service_worker_apitest.cc b/chrome/browser/extensions/service_worker_apitest.cc
index 2f40965..c517c0f 100644
--- a/chrome/browser/extensions/service_worker_apitest.cc
+++ b/chrome/browser/extensions/service_worker_apitest.cc
@@ -671,6 +671,25 @@
NavigateAndExtractInnerText(extension->GetResourceURL("")));
}
+IN_PROC_BROWSER_TEST_P(ServiceWorkerTest,
+ FetchExtensionResourceFromServiceWorker) {
+ const Extension* extension =
+ StartTestFromBackgroundPage("fetch_from_sw.js", kExpectSuccess);
+ ASSERT_TRUE(extension);
+
+ // The service worker in this test tries to load 'hello.txt' via fetch()
+ // and sends back the content of the file, which should be 'hello'.
+ const char* kScript = R"(
+ let channel = new MessageChannel();
+ test.waitForMessage(channel.port1).then(message => {
+ window.domAutomationController.send(message);
+ });
+ test.registeredServiceWorker.postMessage(
+ {port: channel.port2}, [channel.port2]);
+ )";
+ EXPECT_EQ("hello", ExecuteScriptInBackgroundPage(extension->id(), kScript));
+}
+
IN_PROC_BROWSER_TEST_P(ServiceWorkerTest, SWServedBackgroundPageReceivesEvent) {
const Extension* extension =
StartTestFromBackgroundPage("replace_background.js", kExpectSuccess);