// 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=./resources/pending_beacon-helper.js 'use strict'; for (const beaconType of BeaconTypes) { const beaconName = beaconType.name; parallelPromiseTest(async t => { const uuid = token(); const url = generateSetBeaconURL(uuid); // backgroundTimeout = 0s means `beacon should be sent out right on // entering `hidden` state after navigating away. const options = {backgroundTimeout: 0}; 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 PendingBeacon in remote which should only be sent on navigating // away. await rc1.executeScript((beaconName, url, options) => { const beacon = beaconName == 'PendingGetBeacon' ? new PendingGetBeacon(url, options) : new PendingPostBeacon(url, options); }, [beaconName, url, options]); await expectBeacon(uuid, {count: 0}); }, `${beaconName}: does not send without page navigation.`); parallelPromiseTest(async t => { const uuid = token(); const url = generateSetBeaconURL(uuid); // backgroundTimeout = 0s means `beacon should be sent out right on // entering `hidden` state after navigating away. const options = {backgroundTimeout: 0}; 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 PendingBeacon in remote which should only be sent on navigating // away. await rc1.executeScript((beaconName, url, options) => { const beacon = beaconName == 'PendingGetBeacon' ? new PendingGetBeacon(url, options) : new PendingPostBeacon(url, options); }, [beaconName, url, options]); // Navigates away to trigger beacon sending. rc1.navigateToNew(); await expectBeacon(uuid, {count: 1}); }, `${beaconName}: sends on page entering hidden state (w/ BFCache).`); parallelPromiseTest(async t => { const uuid = token(); const url = generateSetBeaconURL(uuid); // backgroundTimeout = 0s means `beacon should be sent out right on // entering `hidden` state after navigating away. const options = {backgroundTimeout: 0}; const helper = new RemoteContextHelper(); // Opens a window without BFCache. const rc1 = await helper.addWindow(); // Creates a PendingBeacon in remote which should only be sent on navigating // away. await rc1.executeScript((beaconName, url, options) => { const beacon = beaconName == 'PendingGetBeacon' ? new PendingGetBeacon(url, options) : new PendingPostBeacon(url, options); }, [beaconName, url, options]); // Navigates away to trigger beacon sending. rc1.navigateToNew(); await expectBeacon(uuid, {count: 1}); }, `${beaconName}: sends on page entering hidden state (w/o BFCache).`); }