Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1387)

Unified Diff: chrome/browser/extensions/service_worker_apitest.cc

Issue 2009453002: service worker: Don't control a subframe of an insecure context (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: selfreview Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..7e5632577bec844e3141a088d4b9cabce6446c31 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,63 @@ 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) {
alexmos 2016/06/02 23:54:47 Can you run this through the linux_site_isolation
falken 2016/06/03 08:22:05 That trybot is in the CQ_INCLUDE_TRYBOT so the CQ
+ const Extension* extension = LoadExtensionWithFlags(
+ test_data_dir_.AppendASCII(
+ "service_worker/web_accessible_resources/iframe_src"),
+ kFlagNone);
+ ASSERT_TRUE(extension);
+ ASSERT_TRUE(StartEmbeddedTestServer());
+ GURL page_url = embedded_test_server()->GetURL(
+ "/extensions/api_test/service_worker/web_accessible_resources/"
+ "webpage.html");
+ host_resolver()->AddRule("a.com", "127.0.0.1");
+ 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);
alexmos 2016/06/02 23:54:47 Why not just use embedded_test_server()->GetURL("a
falken 2016/06/03 08:22:05 Done. This is because I just copied jww's test in
+
+ 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);

Powered by Google App Engine
This is Rietveld 408576698