// META: script=/common/dispatcher/dispatcher.js // META: script=/common/get-host-info.sub.js // META: script=/common/utils.js // META: script=/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js // META: script=/html/browsers/browsing-the-web/back-forward-cache/resources/rc-helper.js // META: script=/pending-beacon/resources/pending_beacon-helper.js 'use strict'; parallelPromiseTest(async t => { const uuid = token(); const url = generateSetBeaconURL(uuid); // Loads an iframe that creates a fetchLater request w/ short timeout. const iframe = await loadScriptAsIframe(` fetchLater("${url}", {activateAfter: 1000}); // 1s `); // Deletes the iframe to trigger deferred request sending. document.body.removeChild(iframe); // The iframe should have sent all requests. await expectBeacon(uuid, {count: 1}); }, 'fetchLater() sends out based on activateAfter.'); parallelPromiseTest(async t => { const uuid = token(); const url = generateSetBeaconURL(uuid); // Sets no option to test the default behavior when a document enters BFCache. const helper = new RemoteContextHelper(); // Opens a window with noopener so that BFCache will work. const rc1 = await helper.addWindow( /*config=*/ null, /*options=*/ {features: 'noopener'}); // Creates a fetchLater request with short timeout. It should be sent out // even if the document is then put into BFCache. await rc1.executeScript(url => { fetchLater(url, {activateAfter: 1000}); // 1s. // Add a pageshow listener to stash the BFCache event. window.addEventListener('pageshow', e => { window.pageshowEvent = e; }); }, [url]); // Navigates away to let page enter BFCache. const rc2 = await rc1.navigateToNew(); // Navigate back. await rc2.historyBack(); // Verify that the page was BFCached. assert_true(await rc1.executeScript(() => { return window.pageshowEvent.persisted; })); await expectBeacon(uuid, {count: 1}); }, 'fetchLater() sends out based on activateAfter, even if document is in BFCache.');