summaryrefslogtreecommitdiffstats
path: root/docshell/test
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--docshell/test/browser/browser.toml6
-rw-r--r--docshell/test/browser/browser_bug1673702.js2
-rw-r--r--docshell/test/browser/browser_bug1769189.js2
-rw-r--r--docshell/test/browser/browser_onbeforeunload_nested_with_delay.js58
-rw-r--r--docshell/test/browser/file_onbeforeunload_nested_inner.html3
-rw-r--r--docshell/test/browser/file_onbeforeunload_nested_outer.html3
-rw-r--r--docshell/test/iframesandbox/file_marquee_event_handlers.html17
-rw-r--r--docshell/test/iframesandbox/mochitest.toml4
-rw-r--r--docshell/test/iframesandbox/test_marquee_event_handlers.html95
9 files changed, 72 insertions, 118 deletions
diff --git a/docshell/test/browser/browser.toml b/docshell/test/browser/browser.toml
index bcda46fd2e..ddea8bcc01 100644
--- a/docshell/test/browser/browser.toml
+++ b/docshell/test/browser/browser.toml
@@ -286,6 +286,12 @@ support-files = ["head_browser_onbeforeunload.js"]
["browser_onbeforeunload_navigation.js"]
skip-if = ["os == 'win' && !debug"] # bug 1300351
+["browser_onbeforeunload_nested_with_delay.js"]
+support-files = [
+ "file_onbeforeunload_nested_inner.html",
+ "file_onbeforeunload_nested_outer.html",
+]
+
["browser_onbeforeunload_parent.js"]
support-files = ["head_browser_onbeforeunload.js"]
diff --git a/docshell/test/browser/browser_bug1673702.js b/docshell/test/browser/browser_bug1673702.js
index c32c38fe45..f87a671900 100644
--- a/docshell/test/browser/browser_bug1673702.js
+++ b/docshell/test/browser/browser_bug1673702.js
@@ -18,7 +18,7 @@ add_task(async function test_backAndReload() {
await BrowserTestUtils.browserStopped(browser);
info("Reload.");
- BrowserReload();
+ BrowserCommands.reload();
await BrowserTestUtils.waitForLocationChange(gBrowser);
is(browser.documentURI.spec, DUMMY);
diff --git a/docshell/test/browser/browser_bug1769189.js b/docshell/test/browser/browser_bug1769189.js
index 08cb4f9002..823f76c678 100644
--- a/docshell/test/browser/browser_bug1769189.js
+++ b/docshell/test/browser/browser_bug1769189.js
@@ -20,7 +20,7 @@ add_task(async function test_beforeUnload_and_replaceState() {
browser,
"pageshow"
);
- BrowserReload();
+ BrowserCommands.reload();
await awaitPageShow;
let updatedState = await SpecialPowers.spawn(browser, [], () => {
diff --git a/docshell/test/browser/browser_onbeforeunload_nested_with_delay.js b/docshell/test/browser/browser_onbeforeunload_nested_with_delay.js
new file mode 100644
index 0000000000..409c73d0b7
--- /dev/null
+++ b/docshell/test/browser/browser_onbeforeunload_nested_with_delay.js
@@ -0,0 +1,58 @@
+"use strict";
+
+add_task(async function () {
+ const outer =
+ "http://mochi.test:8888/browser/docshell/test/browser/file_onbeforeunload_nested_outer.html";
+ await BrowserTestUtils.withNewTab(outer, async browser => {
+ let inner = browser.browsingContext.children[0];
+
+ // Install a beforeunload event handler that resolves a promise.
+ await SpecialPowers.spawn(inner, [], () => {
+ let { promise, resolve } = Promise.withResolvers();
+ content.addEventListener(
+ "beforeunload",
+ e => {
+ e.preventDefault();
+ resolve();
+ },
+ {
+ once: true,
+ }
+ );
+ content.beforeunloadPromise = promise;
+ });
+
+ // Get the promise for the beforeunload handler so we can wait for it.
+ let beforeunloadFired = SpecialPowers.spawn(
+ browser.browsingContext.children[0],
+ [],
+ () => {
+ return content.beforeunloadPromise;
+ }
+ );
+
+ // Register whether a load has started.
+ let loaded = BrowserTestUtils.browserLoaded(browser).then(() => "loaded");
+
+ // This is rather fragile, but we need to make sure we don't start a
+ // speculative load in the parent so let's give it the time to be done.
+ let timeout = new Promise(resolve =>
+ // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
+ setTimeout(() => resolve("timeout"), 3000)
+ );
+
+ // Need to add some user interaction for beforeunload.
+ await BrowserTestUtils.synthesizeMouse("body", 0, 0, {}, inner, true);
+
+ // Try to start a speculative load in the parent.
+ BrowserTestUtils.startLoadingURIString(browser, "https://example.com/");
+
+ await beforeunloadFired;
+
+ is(
+ await Promise.race([loaded, timeout]),
+ "timeout",
+ "Timed out because the load was blocked by beforeunload."
+ );
+ });
+});
diff --git a/docshell/test/browser/file_onbeforeunload_nested_inner.html b/docshell/test/browser/file_onbeforeunload_nested_inner.html
new file mode 100644
index 0000000000..d9568d142b
--- /dev/null
+++ b/docshell/test/browser/file_onbeforeunload_nested_inner.html
@@ -0,0 +1,3 @@
+<body>
+ <div>inner</div>
+</body>
diff --git a/docshell/test/browser/file_onbeforeunload_nested_outer.html b/docshell/test/browser/file_onbeforeunload_nested_outer.html
new file mode 100644
index 0000000000..7689281eca
--- /dev/null
+++ b/docshell/test/browser/file_onbeforeunload_nested_outer.html
@@ -0,0 +1,3 @@
+<body>
+<iframe src="http://example.org/browser/docshell/test/browser/file_onbeforeunload_nested_inner.html"></iframe>
+</body>
diff --git a/docshell/test/iframesandbox/file_marquee_event_handlers.html b/docshell/test/iframesandbox/file_marquee_event_handlers.html
deleted file mode 100644
index 13ee31ddb7..0000000000
--- a/docshell/test/iframesandbox/file_marquee_event_handlers.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
-<meta charset="utf-8">
-<title>Test marquee attribute event handlers in iframe sandbox</title>
-</head>
-<body>
- <!-- Note that the width here is slightly longer than the contents, to make
- sure we bounce and finish very quickly. -->
- <marquee loop="2" width="145" behavior="alternate" truespeed scrolldelay="1"
- onstart="parent.postMessage(window.name + ' marquee onstart', '*');"
- onbounce="parent.postMessage(window.name + ' marquee onbounce', '*');"
- onfinish="parent.postMessage(window.name + ' marquee onfinish', '*');">
- Will bounce and finish
- </marquee>
-</body>
-</html>
diff --git a/docshell/test/iframesandbox/mochitest.toml b/docshell/test/iframesandbox/mochitest.toml
index a8bf4b1d72..97e6f76170 100644
--- a/docshell/test/iframesandbox/mochitest.toml
+++ b/docshell/test/iframesandbox/mochitest.toml
@@ -1,7 +1,6 @@
[DEFAULT]
support-files = [
"file_child_navigation_by_location.html",
- "file_marquee_event_handlers.html",
"file_other_auxiliary_navigation_by_location.html",
"file_our_auxiliary_navigation_by_location.html",
"file_parent_navigation_by_location.html",
@@ -12,9 +11,6 @@ support-files = [
["test_child_navigation_by_location.html"]
-["test_marquee_event_handlers.html"]
-skip-if = ["true"] # Bug 1455996
-
["test_other_auxiliary_navigation_by_location.html"]
tags = "openwindow"
diff --git a/docshell/test/iframesandbox/test_marquee_event_handlers.html b/docshell/test/iframesandbox/test_marquee_event_handlers.html
deleted file mode 100644
index 80added8ab..0000000000
--- a/docshell/test/iframesandbox/test_marquee_event_handlers.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=1277475
-html5 sandboxed iframe should not run marquee attribute event handlers without allow-scripts
--->
-<head>
-<meta charset="utf-8">
-<title>Test for Bug 1277475 - html5 sandboxed iframe should not run marquee attribute event handlers without allow-scripts</title>
-<script src="/tests/SimpleTest/SimpleTest.js"></script>
-<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1277475">Mozilla Bug 1277475</a>
-<p id="display"></p>
-<div id="content">Tests for Bug 1277475</div>
-
-<iframe id="if1" name="if1" src="file_marquee_event_handlers.html"
- sandbox="allow-same-origin allow-forms allow-top-navigation allow-pointer-lock allow-orientation-lock allow-popups allow-modals allow-popups-to-escape-sandbox">
-</iframe>
-
-<iframe id="if2" name="if2" src="file_marquee_event_handlers.html"
- sandbox="allow-scripts"></iframe>
-
-<script>
- SimpleTest.waitForExplicitFinish();
-
- var expectedMessages = new Set();
- var numberOfMessagesExpected = 4;
- var unexpectedMessages = new Set();
-
- window.onmessage = function(event) {
- info(event.data + " message received");
- if (event.data.startsWith("if2") || event.data == "if1 chaser") {
- expectedMessages.add(event.data);
- if (expectedMessages.size == numberOfMessagesExpected) {
- checkRecievedMessages();
- }
- } else {
- unexpectedMessages.add(event.data);
- }
- };
-
- function checkRecievedMessages() {
- // Check the expected messages explicitly as a cross-check.
- ok(expectedMessages.has("if1 chaser"),
- "if1 chaser message should have been received");
- ok(expectedMessages.has("if2 marquee onstart"),
- "if2 marquee onstart should have run in iframe sandbox with allow-scripts");
- ok(expectedMessages.has("if2 marquee onbounce"),
- "if2 marquee onbounce should have run in iframe sandbox with allow-scripts");
- ok(expectedMessages.has("if2 marquee onfinish"),
- "if2 marquee onfinish should have run in iframe sandbox with allow-scripts");
-
- unexpectedMessages.forEach(
- (v) => {
- ok(false, v + " should NOT have run in iframe sandbox without allow-scripts");
- }
- );
-
- SimpleTest.finish();
- }
-
- // If things are working properly the attribute event handlers won't run on
- // the marquee in if1, so add our own capturing listeners on its window, so we
- // know when they have fired. (These will run as we are not sandboxed.)
- var if1FiredEvents = new Set();
- var if1NumberOfEventsExpected = 3;
- var if1Win = document.getElementById("if1").contentWindow;
- if1Win.addEventListener("start", () => { checkMarqueeEvent("start"); }, true);
- if1Win.addEventListener("bounce", () => { checkMarqueeEvent("bounce"); }, true);
- if1Win.addEventListener("finish", () => { checkMarqueeEvent("finish"); }, true);
-
- function checkMarqueeEvent(eventType) {
- info("if1 event " + eventType + " fired");
- if1FiredEvents.add(eventType);
- if (if1FiredEvents.size == if1NumberOfEventsExpected) {
- // Only send the chasing message after a tick of the event loop to allow
- // event handlers on the marquee to process.
- SimpleTest.executeSoon(sendChasingMessage);
- }
- }
-
- function sendChasingMessage() {
- // Add our own message listener to if1's window and echo back a chasing
- // message to make sure that any messages from incorrectly run marquee
- // attribute event handlers should have arrived before it.
- if1Win.addEventListener("message",
- (e) => { if1Win.parent.postMessage(e.data, "*"); });
- if1Win.postMessage("if1 chaser", "*");
- info("if1 chaser message sent");
- }
-</script>
-</body>
-</html>