summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorannekao <annekao@google.com>2015-07-14 10:46:39 -0700
committerCommit bot <commit-bot@chromium.org>2015-07-14 17:47:18 +0000
commit3868550081d275ef8f73933ffcec88da453215a2 (patch)
tree156161e993138905f5b62aba042545e1e0e77549 /chrome
parent7eb7b5d7b22886b30bf1e089ceb346914e5b6d24 (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/extensions/service_worker_apitest.cc50
-rw-r--r--chrome/chrome_tests.gypi3
-rw-r--r--chrome/test/data/extensions/api_test/service_worker/register/manifest.json9
-rw-r--r--chrome/test/data/extensions/api_test/service_worker/register/sw.js5
-rw-r--r--chrome/test/data/extensions/api_test/service_worker/register/test.js27
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();
+ });
+ }
+]);