summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/pending-beacon/pending_beacon-sendonhidden.tentative.https.window.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/pending-beacon/pending_beacon-sendonhidden.tentative.https.window.js')
-rw-r--r--testing/web-platform/tests/pending-beacon/pending_beacon-sendonhidden.tentative.https.window.js83
1 files changed, 83 insertions, 0 deletions
diff --git a/testing/web-platform/tests/pending-beacon/pending_beacon-sendonhidden.tentative.https.window.js b/testing/web-platform/tests/pending-beacon/pending_beacon-sendonhidden.tentative.https.window.js
new file mode 100644
index 0000000000..8d7ff24e3f
--- /dev/null
+++ b/testing/web-platform/tests/pending-beacon/pending_beacon-sendonhidden.tentative.https.window.js
@@ -0,0 +1,83 @@
+// META: script=/resources/testharness.js
+// META: script=/resources/testharnessreport.js
+// 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).`);
+}