diff options
author | annekao <annekao@google.com> | 2015-07-14 10:46:39 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-07-14 17:47:18 +0000 |
commit | 3868550081d275ef8f73933ffcec88da453215a2 (patch) | |
tree | 156161e993138905f5b62aba042545e1e0e77549 /chrome | |
parent | 7eb7b5d7b22886b30bf1e089ceb346914e5b6d24 (diff) | |
download | chromium_src-3868550081d275ef8f73933ffcec88da453215a2.zip chromium_src-3868550081d275ef8f73933ffcec88da453215a2.tar.gz chromium_src-3868550081d275ef8f73933ffcec88da453215a2.tar.bz2 |
[Service Worker Registration] Registered extension scheme to allow service workers
Service Workers require a secure origin, such as HTTPS. chrome-extension:// pages are not HTTP/HTTPS, but are secure so this change becomes a necessary step to allow extensions to register a Service Worker.
"chrome-extension" is added as a scheme allowing service workers.
BUG=501569
Review URL: https://codereview.chromium.org/1211243010
Cr-Commit-Position: refs/heads/master@{#338708}
Diffstat (limited to 'chrome')
5 files changed, 93 insertions, 1 deletions
diff --git a/chrome/browser/extensions/service_worker_apitest.cc b/chrome/browser/extensions/service_worker_apitest.cc new file mode 100644 index 0000000..1c4a1b6 --- /dev/null +++ b/chrome/browser/extensions/service_worker_apitest.cc @@ -0,0 +1,50 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/extensions/extension_apitest.h" +#include "extensions/test/extension_test_message_listener.h" + +namespace extensions { + +class ServiceWorkerTest : public ExtensionApiTest { + public: + // Set the channel to "trunk" since service workers are restricted to trunk. + ServiceWorkerTest() + : current_channel_(chrome::VersionInfo::CHANNEL_UNKNOWN) {} + + ~ServiceWorkerTest() override {} + + private: + ScopedCurrentChannel current_channel_; + DISALLOW_COPY_AND_ASSIGN(ServiceWorkerTest); +}; + +IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, RegisterServiceWorkersOnTrunk) { + ExtensionTestMessageListener listener(false); + // This should fail because there are changes to be made to + // successfully register a service worker. + ASSERT_FALSE(RunExtensionTest("service_worker/register")) << message_; + ASSERT_TRUE(listener.WaitUntilSatisfied()); + ASSERT_EQ( + "SecurityError: Failed to register a ServiceWorker: No URL is " + "associated with the caller's document.", + listener.message()); +} + +// This feature is restricted to trunk, so on dev it should have existing +// behavior - which is for it to fail. +IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, CannotRegisterServiceWorkersOnDev) { + ScopedCurrentChannel current_channel_override( + chrome::VersionInfo::CHANNEL_DEV); + ExtensionTestMessageListener listener(false); + ASSERT_FALSE(RunExtensionTest("service_worker/register")) << message_; + ASSERT_TRUE(listener.WaitUntilSatisfied()); + ASSERT_EQ( + "SecurityError: Failed to register a ServiceWorker: The URL " + "protocol of the current origin ('chrome-extension://" + + GetSingleLoadedExtension()->id() + "') is not supported.", + listener.message()); +} + +} // namespace extensions diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index d2d424b..4dcb056 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -36,7 +36,7 @@ '../extensions/browser/guest_view/extension_options/extension_options_apitest.cc', '../extensions/browser/guest_view/mime_handler_view/mime_handler_view_browsertest.cc', '../extensions/renderer/console_apitest.cc', - '../extensions/renderer/script_context_browsertest.cc', + '../extensions/renderer/script_context_browsertest.cc' ], 'chrome_browser_tests_sources': [ # The list of sources which is only used by chrome browser tests. @@ -273,6 +273,7 @@ 'browser/extensions/process_manager_browsertest.cc', 'browser/extensions/requirements_checker_browsertest.cc', 'browser/extensions/sandboxed_pages_apitest.cc', + 'browser/extensions/service_worker_apitest.cc', 'browser/extensions/shared_module_apitest.cc', 'browser/extensions/signin/gaia_auth_extension_loader_browsertest.cc', 'browser/extensions/startup_helper_browsertest.cc', diff --git a/chrome/test/data/extensions/api_test/service_worker/register/manifest.json b/chrome/test/data/extensions/api_test/service_worker/register/manifest.json new file mode 100644 index 0000000..209ea15 --- /dev/null +++ b/chrome/test/data/extensions/api_test/service_worker/register/manifest.json @@ -0,0 +1,9 @@ +{ + "name": "Register Service Worker", + "version": "0.1", + "manifest_version": 2, + "description": "Test for registering a service worker", + "background": { + "scripts": ["test.js"] + } +} diff --git a/chrome/test/data/extensions/api_test/service_worker/register/sw.js b/chrome/test/data/extensions/api_test/service_worker/register/sw.js new file mode 100644 index 0000000..78cf16c --- /dev/null +++ b/chrome/test/data/extensions/api_test/service_worker/register/sw.js @@ -0,0 +1,5 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +console.log("Hello from the service worker");
\ No newline at end of file diff --git a/chrome/test/data/extensions/api_test/service_worker/register/test.js b/chrome/test/data/extensions/api_test/service_worker/register/test.js new file mode 100644 index 0000000..0e3e96e --- /dev/null +++ b/chrome/test/data/extensions/api_test/service_worker/register/test.js @@ -0,0 +1,27 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var logForDebugging = false; +function log(message) { + if (logForDebugging) + console.log(message); +} + +chrome.test.runTests([ + function registerServiceWorker() { + navigator.serviceWorker.register('/sw.js').then(function(registration) { + // Registration was successful + log('ServiceWorker registration successful with scope: ', + registration.scope); + chrome.test.sendMessage("success"); + chrome.test.succeed(); + }).catch(function(err) { + // registration failed :( + var errorMsg = err.name + ': ' + err.message; + log('ServiceWorker registration failed: ' + errorMsg); + chrome.test.sendMessage(errorMsg); + chrome.test.fail(); + }); + } +]); |