| Index: chrome/browser/extensions/service_worker_apitest.cc
|
| diff --git a/chrome/browser/extensions/service_worker_apitest.cc b/chrome/browser/extensions/service_worker_apitest.cc
|
| index 68c6e0a9789a47525be737054d08d074f4a80182..aff4ef385b35fe1bb8235c7bfeac4d741d3db148 100644
|
| --- a/chrome/browser/extensions/service_worker_apitest.cc
|
| +++ b/chrome/browser/extensions/service_worker_apitest.cc
|
| @@ -31,6 +31,7 @@
|
| #include "extensions/browser/process_manager.h"
|
| #include "extensions/test/background_page_watcher.h"
|
| #include "extensions/test/extension_test_message_listener.h"
|
| +#include "net/dns/mock_host_resolver.h"
|
| #include "net/test/embedded_test_server/embedded_test_server.h"
|
|
|
| namespace extensions {
|
| @@ -674,6 +675,64 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, WebAccessibleResourcesIframeSrc) {
|
| EXPECT_EQ("FROM_SW_RESOURCE", result);
|
| }
|
|
|
| +// Tests that service worker serves resources even if they are embedded in an
|
| +// insecure context.
|
| +IN_PROC_BROWSER_TEST_F(ServiceWorkerTest,
|
| + WebAccessibleResourcesInsecureIframe) {
|
| + const Extension* extension = LoadExtensionWithFlags(
|
| + test_data_dir_.AppendASCII(
|
| + "service_worker/web_accessible_resources/iframe_src"),
|
| + kFlagNone);
|
| + ASSERT_TRUE(extension);
|
| + ASSERT_TRUE(StartEmbeddedTestServer());
|
| + host_resolver()->AddRule("a.com", "127.0.0.1");
|
| + GURL page_url =
|
| + embedded_test_server()->GetURL("a.com",
|
| + "/extensions/api_test/service_worker/"
|
| + "web_accessible_resources/webpage.html");
|
| + GURL::Replacements replace_host_and_scheme;
|
| + replace_host_and_scheme.SetHostStr("a.com");
|
| + replace_host_and_scheme.SetSchemeStr("http");
|
| + page_url = page_url.ReplaceComponents(replace_host_and_scheme);
|
| +
|
| + content::WebContents* web_contents = AddTab(browser(), page_url);
|
| + std::string result;
|
| + // webpage.html will create an iframe pointing to a resource from |extension|.
|
| + // Expect the resource to be served by the extension.
|
| + EXPECT_TRUE(content::ExecuteScriptAndExtractString(
|
| + web_contents, base::StringPrintf("window.testIframe('%s', 'iframe.html')",
|
| + extension->id().c_str()),
|
| + &result));
|
| + EXPECT_EQ("FROM_EXTENSION_RESOURCE", result);
|
| +
|
| + ExtensionTestMessageListener service_worker_ready_listener("SW_READY", false);
|
| + EXPECT_TRUE(ExecuteScriptInBackgroundPageNoWait(
|
| + extension->id(), "window.registerServiceWorker()"));
|
| + EXPECT_TRUE(service_worker_ready_listener.WaitUntilSatisfied());
|
| +
|
| + result.clear();
|
| + // webpage.html will create another iframe pointing to a resource from
|
| + // |extension| as before. But this time, the resource should be be served
|
| + // from the Service Worker.
|
| + EXPECT_TRUE(content::ExecuteScriptAndExtractString(
|
| + web_contents, base::StringPrintf("window.testIframe('%s', 'iframe.html')",
|
| + extension->id().c_str()),
|
| + &result));
|
| + EXPECT_EQ("FROM_SW_RESOURCE", result);
|
| +
|
| + result.clear();
|
| + // webpage.html will create yet another iframe pointing to a resource that
|
| + // exists in the extension manifest's web_accessible_resources, but is not
|
| + // present in the extension directory. Expect the resources of the iframe to
|
| + // be served by the Service Worker.
|
| + EXPECT_TRUE(content::ExecuteScriptAndExtractString(
|
| + web_contents,
|
| + base::StringPrintf("window.testIframe('%s', 'iframe_non_existent.html')",
|
| + extension->id().c_str()),
|
| + &result));
|
| + EXPECT_EQ("FROM_SW_RESOURCE", result);
|
| +}
|
| +
|
| IN_PROC_BROWSER_TEST_F(ServiceWorkerBackgroundSyncTest, Sync) {
|
| const Extension* extension = LoadExtensionWithFlags(
|
| test_data_dir_.AppendASCII("service_worker/sync"), kFlagNone);
|
|
|