Skip to content

Commit

Permalink
Bug 1795635 [wpt PR 36488] - Test that javascript: URL navigation doe…
Browse files Browse the repository at this point in the history
…s not fire beforeunload, a=testonly

Automatic update from web-platform-tests
Test that javascript: URL navigation does not fire beforeunload

The current spec fires beforeunload, but the rewrite in whatwg/html#6315 does not.

--

wpt-commits: e5144d4daa5979805e0e1360c2bc69abf6825bff
wpt-pr: 36488
  • Loading branch information
domenic authored and moz-wptsync-bot committed Nov 11, 2022
1 parent b6a08d6 commit 2d37439
Showing 1 changed file with 80 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
// META: script=../resources/helpers.js

for (const stringCompletion of [false, true]) {
const testNameSuffix = stringCompletion ? ": string completion" : ": undefined completion";

testNoBeforeunload(
{ testRunnerWindow: "top", stringCompletion },
async (t, urlToSet) => {
const iframe = await addIframe();
iframe.contentWindow.location.href = urlToSet;

return iframe.contentWindow;
},
`Navigating an iframe via location.href to a javascript: URL must not fire beforeunload${testNameSuffix}`
);

testNoBeforeunload(
{ testRunnerWindow: "top", stringCompletion },
async (t, urlToSet) => {
const iframe = await addIframe();
iframe.src = urlToSet;

return iframe.contentWindow;
},
`Navigating an iframe via src="" to a javascript: URL after insertion must not fire beforeunload${testNameSuffix}`
);

testNoBeforeunload(
{ testRunnerWindow: "opener", stringCompletion },
async (t, urlToSet) => {
const w = await openWindow("/common/blank.html", t);
w.location.href = urlToSet;

return w;
},
`Navigating an opened window via location.href to a javascript: URL must not fire beforeunload${testNameSuffix}`
);


testNoBeforeunload(
{ testRunnerWindow: "opener", stringCompletion },
async (t, urlToSet) => {
const w = await openWindow("../resources/has-iframe.html", t);
w.frames[0].onbeforeunload = t.unreached_func("beforeunload must not fire on the iframe");
w.location.href = urlToSet;

return w;
},
`Navigating an opened window with an iframe via location.href to a javascript: URL must not fire beforeunload on the iframe${testNameSuffix}`
);
}

function testNoBeforeunload({ testRunnerWindow, stringCompletion }, setupAndNavigateFunc, description) {
promise_test(async t => {
t.add_cleanup(() => {
delete window.resolveTestPromise;
});

const ranPromise = new Promise(resolve => {
window.resolveTestPromise = resolve;
});

const urlToSet = makeURL({ testRunnerWindow, stringCompletion });
const w = await setupAndNavigateFunc(t, urlToSet);
w.onbeforeunload = t.unreached_func("beforeunload must not fire");

await ranPromise;
if (stringCompletion) {
await waitForMessage(w);
}
}, description);
}

function makeURL({ testRunnerWindow, stringCompletion }) {
const completion = stringCompletion ?
`"a string<script>window.${testRunnerWindow}.postMessage('ready', '*');</script>";` :
`undefined;`;

return `javascript:window.${testRunnerWindow}.resolveTestPromise();${completion};`;
}

0 comments on commit 2d37439

Please sign in to comment.