summaryrefslogtreecommitdiffstats
path: root/devtools/client/jsonview/test/browser_jsonview_serviceworker.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/jsonview/test/browser_jsonview_serviceworker.js')
-rw-r--r--devtools/client/jsonview/test/browser_jsonview_serviceworker.js89
1 files changed, 89 insertions, 0 deletions
diff --git a/devtools/client/jsonview/test/browser_jsonview_serviceworker.js b/devtools/client/jsonview/test/browser_jsonview_serviceworker.js
new file mode 100644
index 0000000000..37c407ecd4
--- /dev/null
+++ b/devtools/client/jsonview/test/browser_jsonview_serviceworker.js
@@ -0,0 +1,89 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const TEST_JSON_URL = URL_ROOT_SSL + "valid_json.json";
+const EMPTY_PAGE = URL_ROOT_SSL + "empty.html";
+const SW = URL_ROOT_SSL + "passthrough-sw.js";
+
+add_task(async function () {
+ info("Test valid JSON with service worker started");
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["dom.serviceWorkers.exemptFromPerDomainMax", true],
+ ["dom.serviceWorkers.enabled", true],
+ ["dom.serviceWorkers.testing.enabled", true],
+ ],
+ });
+
+ const swTab = BrowserTestUtils.addTab(gBrowser, EMPTY_PAGE);
+ const browser = gBrowser.getBrowserForTab(swTab);
+ await BrowserTestUtils.browserLoaded(browser);
+ await SpecialPowers.spawn(
+ browser,
+ [{ script: SW, scope: TEST_JSON_URL }],
+ async opts => {
+ const reg = await content.navigator.serviceWorker.register(opts.script, {
+ scope: opts.scope,
+ });
+ return new content.window.Promise(resolve => {
+ const worker = reg.installing;
+ if (worker.state === "activated") {
+ resolve();
+ return;
+ }
+ worker.addEventListener("statechange", evt => {
+ if (worker.state === "activated") {
+ resolve();
+ }
+ });
+ });
+ }
+ );
+
+ const tab = await addJsonViewTab(TEST_JSON_URL);
+
+ ok(
+ tab.linkedBrowser.contentPrincipal.isNullPrincipal,
+ "Should have null principal"
+ );
+
+ is(await countRows(), 3, "There must be three rows");
+
+ const objectCellCount = await getElementCount(
+ ".jsonPanelBox .treeTable .objectCell"
+ );
+ is(objectCellCount, 1, "There must be one object cell");
+
+ const objectCellText = await getElementText(
+ ".jsonPanelBox .treeTable .objectCell"
+ );
+ is(objectCellText, "", "The summary is hidden when object is expanded");
+
+ // Clicking the value does not collapse it (so that it can be selected and copied).
+ await clickJsonNode(".jsonPanelBox .treeTable .treeValueCell");
+ is(await countRows(), 3, "There must still be three rows");
+
+ // Clicking the label collapses the auto-expanded node.
+ await clickJsonNode(".jsonPanelBox .treeTable .treeLabel");
+ is(await countRows(), 1, "There must be one row");
+
+ await SpecialPowers.spawn(
+ browser,
+ [{ script: SW, scope: TEST_JSON_URL }],
+ async opts => {
+ const reg = await content.navigator.serviceWorker.getRegistration(
+ opts.scope
+ );
+ await reg.unregister();
+ }
+ );
+
+ BrowserTestUtils.removeTab(swTab);
+});
+
+function countRows() {
+ return getElementCount(".jsonPanelBox .treeTable .treeRow");
+}