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 e43459379906a8e0ebc2660dc7aba86da1b74f6a..2c9e0eef1de88058f76a29a436a5670cb472c838 100644 |
--- a/chrome/browser/extensions/service_worker_apitest.cc |
+++ b/chrome/browser/extensions/service_worker_apitest.cc |
@@ -25,6 +25,7 @@ |
#include "content/public/browser/permission_type.h" |
#include "content/public/browser/web_contents.h" |
#include "content/public/common/content_switches.h" |
+#include "content/public/common/origin_util.h" |
#include "content/public/common/page_type.h" |
#include "content/public/test/background_sync_test_util.h" |
#include "content/public/test/browser_test_utils.h" |
@@ -33,6 +34,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 { |
@@ -634,9 +636,24 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, WebAccessibleResourcesIframeSrc) { |
kFlagNone); |
ASSERT_TRUE(extension); |
ASSERT_TRUE(StartEmbeddedTestServer()); |
- GURL page_url = embedded_test_server()->GetURL( |
- "/extensions/api_test/service_worker/web_accessible_resources/" |
- "webpage.html"); |
+ |
+ // Service workers can only control secure contexts |
+ // (https://w3c.github.io/webappsec-secure-contexts/). For documents, this |
+ // typically means the document must have a secure origin AND all its ancestor |
+ // frames must have documents with secure origins. However, extension pages |
+ // are considered secure, even if they have an ancestor document that is an |
+ // insecure context (see GetSchemesBypassingSecureContextCheckWhitelist). So |
+ // extension service workers must be able to control an extension page |
+ // embedded in an insecure context. To test this, set up an insecure |
+ // (non-localhost, non-https) URL for the web page. This page will create |
+ // iframes that load extension pages that must be controllable by service |
+ // worker. |
+ 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"); |
+ EXPECT_FALSE(content::IsOriginSecure(page_url)); |
content::WebContents* web_contents = AddTab(browser(), page_url); |
std::string result; |