summaryrefslogtreecommitdiffstats
path: root/devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.js')
-rw-r--r--devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.js76
1 files changed, 76 insertions, 0 deletions
diff --git a/devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.js b/devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.js
new file mode 100644
index 0000000000..152f64f835
--- /dev/null
+++ b/devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.js
@@ -0,0 +1,76 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Test that enabling Service Workers testing option enables the
+// mServiceWorkersTestingEnabled attribute added to nsPIDOMWindow.
+
+// We explicitly want to test that service worker testing allows to use service
+// workers on non-https, so we use mochi.test:8888 to avoid the automatic upgrade
+// to https when dom.security.https_first is true.
+const TEST_URI =
+ URL_ROOT_MOCHI_8888 +
+ "browser_toolbox_options_enable_serviceworkers_testing.html";
+const ELEMENT_ID = "devtools-enable-serviceWorkersTesting";
+
+add_task(async function () {
+ await pushPref("dom.serviceWorkers.exemptFromPerDomainMax", true);
+ await pushPref("dom.serviceWorkers.enabled", true);
+ await pushPref("dom.serviceWorkers.testing.enabled", false);
+ // Force the test to start without service worker testing enabled
+ await pushPref("devtools.serviceWorkers.testing.enabled", false);
+
+ const tab = await addTab(TEST_URI);
+ const toolbox = await openToolboxForTab(tab, "options");
+
+ let data = await register();
+ is(data.success, false, "Register should fail with security error");
+
+ const panel = toolbox.getCurrentPanel();
+ const cbx = panel.panelDoc.getElementById(ELEMENT_ID);
+ is(cbx.checked, false, "The checkbox shouldn't be checked");
+
+ info(`Checking checkbox to enable service workers testing`);
+ cbx.scrollIntoView();
+ cbx.click();
+
+ await reloadBrowser();
+
+ data = await register();
+ is(data.success, true, "Register should success");
+
+ await unregister();
+ data = await registerAndUnregisterInFrame();
+ is(data.success, true, "Register should success");
+
+ info("Workers should be turned back off when we closes the toolbox");
+ await toolbox.destroy();
+
+ await reloadBrowser();
+ data = await register();
+ is(data.success, false, "Register should fail with security error");
+});
+
+function sendMessage(name) {
+ return SpecialPowers.spawn(gBrowser.selectedBrowser, [name], nameChild => {
+ return new Promise(resolve => {
+ const channel = new content.MessageChannel();
+ content.postMessage(nameChild, "*", [channel.port2]);
+ channel.port1.onmessage = function (msg) {
+ resolve(msg.data);
+ channel.port1.close();
+ };
+ });
+ });
+}
+
+function register() {
+ return sendMessage("devtools:sw-test:register");
+}
+
+function unregister(swr) {
+ return sendMessage("devtools:sw-test:unregister");
+}
+
+function registerAndUnregisterInFrame() {
+ return sendMessage("devtools:sw-test:iframe:register-and-unregister");
+}