1
0
Fork 0
firefox/testing/web-platform/tests/fetch/fetch-later/new-window.tentative.https.window.js
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

93 lines
3 KiB
JavaScript

// META: script=/common/utils.js
// META: script=/common/get-host-info.sub.js
// META: script=/fetch/fetch-later/resources/fetch-later-helper.js
'use strict';
const {
HTTPS_ORIGIN,
HTTPS_NOTSAMESITE_ORIGIN,
} = get_host_info();
function fetchLaterPopupUrl(host, targetUrl) {
return `${host}/fetch/fetch-later/resources/fetch-later.html?url=${
encodeURIComponent(targetUrl)}&activateAfter=0`;
}
async function receiveMessageFromPopup(url) {
const expect =
new FetchLaterIframeExpectation(FetchLaterExpectationType.DONE);
const messageType = await new Promise((resolve, reject) => {
window.addEventListener('message', function handler(e) {
try {
if (expect.run(e, url)) {
window.removeEventListener('message', handler);
resolve(e.data.type);
}
} catch (err) {
reject(err);
}
});
});
assert_equals(messageType, FetchLaterIframeMessageType.DONE);
}
for (const target of ['', '_blank']) {
// NOTE: noopener popup window cannot communicate back. It will be too
// unreliable to only use `expectBeacon()` to test such window.
for (const features of ['', 'popup']) {
parallelPromiseTest(
async t => {
const uuid = token();
const url =
generateSetBeaconURL(uuid, {host: HTTPS_NOTSAMESITE_ORIGIN});
// Opens a blank popup window that fires a fetchLater request.
const w = window.open(
`javascript: fetchLater("${url}", {activateAfter: 0})`, target,
features);
await new Promise(resolve => w.addEventListener('load', resolve));
// The popup should have sent the request.
await expectBeacon(uuid, {count: 1});
w.close();
},
`A blank window[target='${target}'][features='${
features}'] can trigger fetchLater.`);
parallelPromiseTest(
async t => {
const uuid = token();
const popupUrl =
fetchLaterPopupUrl(HTTPS_ORIGIN, generateSetBeaconURL(uuid));
// Opens a same-origin popup that fires a fetchLater request.
const w = window.open(popupUrl, target, features);
await receiveMessageFromPopup(popupUrl);
// The popup should have sent the request.
await expectBeacon(uuid, {count: 1});
w.close();
},
`A same-origin window[target='${target}'][features='${
features}'] can trigger fetchLater.`);
parallelPromiseTest(
async t => {
const uuid = token();
const popupUrl = fetchLaterPopupUrl(
HTTPS_NOTSAMESITE_ORIGIN, generateSetBeaconURL(uuid));
// Opens a cross-origin popup that fires a fetchLater request.
const w = window.open(popupUrl, target, features);
await receiveMessageFromPopup(popupUrl);
// The popup should have sent the request.
await expectBeacon(uuid, {count: 1});
w.close();
},
`A cross-origin window[target='${target}'][features='${
features}'] can trigger fetchLater.`);
}
}