58 lines
2.1 KiB
HTML
58 lines
2.1 KiB
HTML
<!DOCTYPE html>
|
|
<title>Same-origin prerendering: sendBeacon</title>
|
|
<meta name="variant" content="?target_hint=_self">
|
|
<meta name="variant" content="?target_hint=_blank">
|
|
<meta name="timeout" content="long">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="/common/utils.js"></script>
|
|
<script src="/common/dispatcher/dispatcher.js"></script>
|
|
<script src="../resources/utils.js"></script>
|
|
<script src="resources/utils.js"></script>
|
|
<script>
|
|
setup(() => assertSpeculationRulesIsSupported());
|
|
|
|
promise_test(async t => {
|
|
const STORE_URL = '/speculation-rules/prerender/resources/key-value-store.py';
|
|
|
|
// Create a prerendered page.
|
|
const rule_extras = {'target_hint': getTargetHint()};
|
|
const {exec, activate} = await create_prerendered_page(
|
|
t, undefined, undefined, rule_extras);
|
|
|
|
// This test will send 3 beacons. Each beacon will be stored with these keys
|
|
// on the server.
|
|
const keys = [token(), token(), token()];
|
|
|
|
// Ask the prerendered page to send beacons during prerendering and
|
|
// prerenderingchange.
|
|
await exec(async (store_url, keys) => {
|
|
const url1 = `${store_url}?key=${keys[0]}&value=during-prerendering`;
|
|
navigator.sendBeacon(url1);
|
|
|
|
document.onprerenderingchange = _ => {
|
|
const url2 = `${store_url}?key=${keys[1]}&value=onprerenderingchange`;
|
|
navigator.sendBeacon(url2);
|
|
};
|
|
}, [STORE_URL, keys]);
|
|
|
|
// Wait for the beacon sent during prerendering.
|
|
assert_equals(await nextValueFromServer(keys[0]), 'during-prerendering');
|
|
|
|
await activate();
|
|
|
|
// Wait for the beacon sent during the prerenderingchange event.
|
|
assert_equals(await nextValueFromServer(keys[1]), 'onprerenderingchange');
|
|
|
|
// Ask the activated page to send a beacon.
|
|
await exec(async (store_url, keys) => {
|
|
const url3 = `${store_url}?key=${keys[2]}&value=after-activation`;
|
|
navigator.sendBeacon(url3);
|
|
}, [STORE_URL, keys]);
|
|
|
|
// Wait for the beacon sent after activation.
|
|
assert_equals(await nextValueFromServer(keys[2]), 'after-activation');
|
|
}, 'Prerendering page should be able to send beacons');
|
|
</script>
|
|
<body>
|
|
</body>
|