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

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Jared Wein 2019-05-21 18:02:21 +00:00
Родитель 25e8d18679
Коммит 08b8f771db
6 изменённых файлов: 99 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,18 @@
"use strict";
module.exports = {
overrides: [
{
files: [
"file_module_loaded.js",
"file_module_loaded2.js",
],
parserOptions: {
sourceType: "module",
},
},
],
"extends": [
"plugin:mozilla/browser-test"
]
};

Просмотреть файл

@ -79,6 +79,11 @@ support-files =
[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_module_loaded2.js
[browser_xhr_sandbox.js]
[browser_noopener.js]
skip-if = (verify && debug && (os == 'linux'))

Просмотреть файл

@ -0,0 +1,59 @@
/* 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 kDefaultFlags = Ci.nsIAboutModule.ALLOW_SCRIPT |
Ci.nsIAboutModule.URI_MUST_LOAD_IN_CHILD |
Ci.nsIAboutModule.URI_CAN_LOAD_IN_PRIVILEGED_CHILD |
Ci.nsIAboutModule.URI_SAFE_FOR_UNTRUSTED_CONTENT;
const kAboutPagesRegistered = Promise.all([
BrowserTestUtils.registerAboutPage(
registerCleanupFunction, "test-linkable-page", kTestPage,
kDefaultFlags | Ci.nsIAboutModule.MAKE_LINKABLE),
BrowserTestUtils.registerAboutPage(
registerCleanupFunction, "test-unlinkable-page", kTestPage,
kDefaultFlags),
]);
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");
});

Просмотреть файл

@ -0,0 +1,8 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src chrome:"/>
<script type="module" src="chrome://mochitests/content/browser/dom/tests/browser/file_module_loaded.js"></script>
</head>
<body></body>
</html>

Просмотреть файл

@ -0,0 +1,6 @@
"use strict";
import setBodyText from "chrome://mochitests/content/browser/dom/tests/browser/file_module_loaded2.js";
document.addEventListener("DOMContentLoaded", () => {
setBodyText();
});

Просмотреть файл

@ -0,0 +1,3 @@
export default function setBodyText() {
document.body.textContent = "scriptLoaded";
}