summaryrefslogtreecommitdiffstats
path: root/toolkit/components/antitracking/bouncetrackingprotection/test/browser/browser_bouncetracking_purge.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/antitracking/bouncetrackingprotection/test/browser/browser_bouncetracking_purge.js')
-rw-r--r--toolkit/components/antitracking/bouncetrackingprotection/test/browser/browser_bouncetracking_purge.js121
1 files changed, 121 insertions, 0 deletions
diff --git a/toolkit/components/antitracking/bouncetrackingprotection/test/browser/browser_bouncetracking_purge.js b/toolkit/components/antitracking/bouncetrackingprotection/test/browser/browser_bouncetracking_purge.js
new file mode 100644
index 0000000000..a8e98b80f0
--- /dev/null
+++ b/toolkit/components/antitracking/bouncetrackingprotection/test/browser/browser_bouncetracking_purge.js
@@ -0,0 +1,121 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const BOUNCE_TRACKING_GRACE_PERIOD_SEC = 30;
+
+add_setup(async function () {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ [
+ "privacy.bounceTrackingProtection.bounceTrackingGracePeriodSec",
+ BOUNCE_TRACKING_GRACE_PERIOD_SEC,
+ ],
+ ["privacy.bounceTrackingProtection.requireStatefulBounces", false],
+ ],
+ });
+});
+
+/**
+ * The following tests ensure that sites that have open tabs are exempt from purging.
+ */
+
+function initBounceTrackerState() {
+ bounceTrackingProtection.clearAll();
+
+ // Bounce time of 1 is out of the grace period which means we should purge.
+ bounceTrackingProtection.testAddBounceTrackerCandidate({}, "example.com", 1);
+ bounceTrackingProtection.testAddBounceTrackerCandidate({}, "example.net", 1);
+
+ // Should not purge because within grace period.
+ let timestampWithinGracePeriod =
+ Date.now() - (BOUNCE_TRACKING_GRACE_PERIOD_SEC * 1000) / 2;
+ bounceTrackingProtection.testAddBounceTrackerCandidate(
+ {},
+ "example.org",
+ timestampWithinGracePeriod * 1000
+ );
+}
+
+add_task(async function test_purging_skip_open_foreground_tab() {
+ initBounceTrackerState();
+
+ // Foreground tab
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "https://example.com"
+ );
+ Assert.deepEqual(
+ await bounceTrackingProtection.testRunPurgeBounceTrackers(),
+ ["example.net"],
+ "Should only purge example.net. example.org is within the grace period, example.com has an open tab."
+ );
+
+ info("Close the tab for example.com and test that it gets purged now.");
+ initBounceTrackerState();
+
+ BrowserTestUtils.removeTab(tab);
+ Assert.deepEqual(
+ (await bounceTrackingProtection.testRunPurgeBounceTrackers()).sort(),
+ ["example.net", "example.com"].sort(),
+ "example.com should have been purged now that it no longer has an open tab."
+ );
+
+ bounceTrackingProtection.clearAll();
+});
+
+add_task(async function test_purging_skip_open_background_tab() {
+ initBounceTrackerState();
+
+ // Background tab
+ let tab = BrowserTestUtils.addTab(gBrowser, "https://example.com");
+ await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
+ Assert.deepEqual(
+ await bounceTrackingProtection.testRunPurgeBounceTrackers(),
+ ["example.net"],
+ "Should only purge example.net. example.org is within the grace period, example.com has an open tab."
+ );
+
+ info("Close the tab for example.com and test that it gets purged now.");
+ initBounceTrackerState();
+
+ BrowserTestUtils.removeTab(tab);
+ Assert.deepEqual(
+ (await bounceTrackingProtection.testRunPurgeBounceTrackers()).sort(),
+ ["example.net", "example.com"].sort(),
+ "example.com should have been purged now that it no longer has an open tab."
+ );
+
+ bounceTrackingProtection.clearAll();
+});
+
+add_task(async function test_purging_skip_open_tab_extra_window() {
+ initBounceTrackerState();
+
+ // Foreground tab in new window.
+ let win = await BrowserTestUtils.openNewBrowserWindow({});
+ await BrowserTestUtils.openNewForegroundTab(
+ win.gBrowser,
+ "https://example.com"
+ );
+ Assert.deepEqual(
+ await bounceTrackingProtection.testRunPurgeBounceTrackers(),
+ ["example.net"],
+ "Should only purge example.net. example.org is within the grace period, example.com has an open tab."
+ );
+
+ info(
+ "Close the window with the tab for example.com and test that it gets purged now."
+ );
+ initBounceTrackerState();
+
+ await BrowserTestUtils.closeWindow(win);
+ Assert.deepEqual(
+ (await bounceTrackingProtection.testRunPurgeBounceTrackers()).sort(),
+ ["example.net", "example.com"].sort(),
+ "example.com should have been purged now that it no longer has an open tab."
+ );
+
+ bounceTrackingProtection.clearAll();
+});