Bug 1552441 - Test to verify that only unlinkable about pages can load script[type=module]. r=smaug,ckerschb
☠☠ backed out by eb1763edca85 ☠ ☠
authorJared Wein <jwein@mozilla.com>
Mon, 20 May 2019 15:59:28 +0000
changeset 474548 158eb97dfd5e6b18f6a13cbf4e648b361deb1a41
parent 474547 768599bb59656539a33ade81980a49601adb5c0f
child 474549 63a8fe448f092dcf0f5a70d72b27909a8aec6280
push id36042
push userdvarga@mozilla.com
push dateTue, 21 May 2019 04:19:40 +0000
treeherdermozilla-central@ca560ff55451 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerssmaug, ckerschb
bugs1552441
milestone69.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1552441 - Test to verify that only unlinkable about pages can load script[type=module]. r=smaug,ckerschb Differential Revision: https://phabricator.services.mozilla.com/D31678
dom/tests/browser/.eslintrc.js
dom/tests/browser/browser.ini
dom/tests/browser/browser_unlinkable_about_page_can_load_module_scripts.js
dom/tests/browser/file_load_module_script.html
dom/tests/browser/file_module_loaded.js
dom/tests/browser/file_script_loaded.js
new file mode 100644
--- /dev/null
+++ b/dom/tests/browser/.eslintrc.js
@@ -0,0 +1,17 @@
+"use strict";
+
+module.exports = {
+  overrides: [
+    {
+      files: [
+        "file_module_loaded.js",
+      ],
+      parserOptions: {
+        sourceType: "module",
+      },
+    },
+  ],
+  "extends": [
+    "plugin:mozilla/browser-test"
+  ]
+};
--- a/dom/tests/browser/browser.ini
+++ b/dom/tests/browser/browser.ini
@@ -74,16 +74,21 @@ support-files =
 [browser_test_new_window_from_content.js]
 tags = openwindow
 skip-if = toolkit == 'android'  || (os == "linux" && debug) # see bug 1261495 for Linux debug time outs
 support-files =
   test_new_window_from_content_child.html
 [browser_test_toolbars_visibility.js]
 support-files =
   test_new_window_from_content_child.html
+[browser_unlinkable_about_page_can_load_module_scripts.js]
+support-files =
+  file_load_module_script.html
+  file_module_loaded.js
+  file_script_loaded.js
 [browser_xhr_sandbox.js]
 [browser_noopener.js]
 skip-if = (verify && debug && (os == 'linux'))
 support-files =
   test_noopener_source.html
   test_noopener_target.html
 [browser_noopener_null_uri.js]
 [browser_wakelock.js]
new file mode 100644
--- /dev/null
+++ b/dom/tests/browser/browser_unlinkable_about_page_can_load_module_scripts.js
@@ -0,0 +1,54 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+"use strict";
+
+const kTestPage = getRootDirectory(gTestPath) + "file_load_module_script.html";
+
+const kAboutPagesRegistered = Promise.all([
+  BrowserTestUtils.registerAboutPage(
+    registerCleanupFunction, "test-linkable-page", kTestPage,
+    Ci.nsIAboutModule.URI_SAFE_FOR_UNTRUSTED_CONTENT | Ci.nsIAboutModule.MAKE_LINKABLE),
+  BrowserTestUtils.registerAboutPage(
+    registerCleanupFunction, "test-unlinkable-page", kTestPage,
+    Ci.nsIAboutModule.ALLOW_SCRIPT),
+]);
+
+add_task(async function() {
+  await kAboutPagesRegistered;
+
+  let consoleListener = {
+    observe() {
+      errorCount++;
+      if (shouldHaveJSError) {
+        ok(true, "JS error is expected and received");
+      } else {
+        ok(false, "Unexpected JS error was received");
+      }
+    },
+  };
+  Services.console.registerListener(consoleListener);
+  registerCleanupFunction(() => Services.console.unregisterListener(consoleListener));
+
+  let shouldHaveJSError = true;
+  let errorCount = 0;
+  await BrowserTestUtils.withNewTab({gBrowser, url: "about:test-linkable-page"}, async (browser) => {
+    await ContentTask.spawn(browser, null, () => {
+      isnot(content.document.body.textContent, "scriptLoaded",
+        "The page content shouldn't be changed on the linkable page");
+    });
+  });
+  ok(errorCount > 0, "Should have an error when loading test-linkable-page, got " + errorCount);
+
+  shouldHaveJSError = false;
+  errorCount = 0;
+  await BrowserTestUtils.withNewTab({gBrowser, url: "about:test-unlinkable-page"}, async (browser) => {
+    await ContentTask.spawn(browser, null, () => {
+      is(content.document.body.textContent, "scriptLoaded",
+        "The page content should be changed on the unlinkable page");
+    });
+  });
+  is(errorCount, 0, "Should have no errors when loading test-unlinkable-page");
+});
new file mode 100644
--- /dev/null
+++ b/dom/tests/browser/file_load_module_script.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta http-equiv="Content-Security-Policy" content="default-src *"/>
+  <script type="module" src="chrome://mochitests/content/browser/dom/tests/browser/file_script_loaded.js"></script>
+</head>
+<body></body>
+</html>
new file mode 100644
--- /dev/null
+++ b/dom/tests/browser/file_module_loaded.js
@@ -0,0 +1,3 @@
+"use strict";
+
+import "file_script_loaded";
new file mode 100644
--- /dev/null
+++ b/dom/tests/browser/file_script_loaded.js
@@ -0,0 +1,5 @@
+"use strict";
+
+document.addEventListener("DOMContentLoaded", () => {
+  document.body.textContent = "scriptLoaded";
+});