summaryrefslogtreecommitdiffstats
path: root/toolkit/components/cookiebanners/test/browser/browser_bannerClicking_stopExecuteAfterSeveralAttempt.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/cookiebanners/test/browser/browser_bannerClicking_stopExecuteAfterSeveralAttempt.js')
-rw-r--r--toolkit/components/cookiebanners/test/browser/browser_bannerClicking_stopExecuteAfterSeveralAttempt.js352
1 files changed, 352 insertions, 0 deletions
diff --git a/toolkit/components/cookiebanners/test/browser/browser_bannerClicking_stopExecuteAfterSeveralAttempt.js b/toolkit/components/cookiebanners/test/browser/browser_bannerClicking_stopExecuteAfterSeveralAttempt.js
new file mode 100644
index 0000000000..6e3a6f19fe
--- /dev/null
+++ b/toolkit/components/cookiebanners/test/browser/browser_bannerClicking_stopExecuteAfterSeveralAttempt.js
@@ -0,0 +1,352 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+let { ForgetAboutSite } = ChromeUtils.importESModule(
+ "resource://gre/modules/ForgetAboutSite.sys.mjs"
+);
+
+add_setup(async function () {
+ await clickTestSetup();
+
+ // Set the pref to enable stopping executing cookie banner handling after
+ // several tries.
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["cookiebanners.bannerClicking.maxTriesPerSiteAndSession", 1],
+ ["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_REJECT],
+ ],
+ });
+
+ // Clean the records.
+ Services.cookieBanners.removeAllExecutedRecords(false);
+ Services.cookieBanners.removeAllExecutedRecords(true);
+});
+
+// Ensure the banner clicking doesn't execute at the second load if the
+// stopExecuteAfterAttempt feature is enabled.
+add_task(async function testStopExecuteAfterOneAttempt() {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_REJECT],
+ [
+ "cookiebanners.service.mode.privateBrowsing",
+ Ci.nsICookieBannerService.MODE_REJECT,
+ ],
+ ["cookiebanners.bannerClicking.maxTriesPerSiteAndSession", 1],
+ ],
+ });
+
+ insertTestClickRules();
+
+ // Open the domain and ensure the banner is clicked.
+ await openPageAndVerify({
+ win: window,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: false,
+ expected: "OptOut",
+ });
+
+ // Open the domain again and the banner shouldn't be hidden nor the banner is
+ // clicked.
+ await openPageAndVerify({
+ win: window,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: true,
+ expected: "NoClick",
+ });
+
+ // Clear the record for the normal window.
+ Services.cookieBanners.removeAllExecutedRecords(false);
+
+ // Open the domain again after clearing the record and ensure the banner is
+ // clicked.
+ await openPageAndVerify({
+ win: window,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: false,
+ expected: "OptOut",
+ });
+
+ // Test in the private browsing mode.
+ let pbmWindow = await BrowserTestUtils.openNewBrowserWindow({
+ private: true,
+ });
+
+ // Open the domain in PBM and ensure the banner is clicked.
+ await openPageAndVerify({
+ win: pbmWindow,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: false,
+ expected: "OptOut",
+ });
+
+ // Open the domain in PBM again and the banner shouldn't be hidden nor the
+ // banner is clicked.
+ await openPageAndVerify({
+ win: pbmWindow,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: true,
+ expected: "NoClick",
+ });
+
+ // Clear the record for the private window.
+ Services.cookieBanners.removeAllExecutedRecords(true);
+
+ // Open the domain again in PBM after clearing the record, and ensure the
+ // banner is clicked.
+ await openPageAndVerify({
+ win: pbmWindow,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: false,
+ expected: "OptOut",
+ });
+
+ await BrowserTestUtils.closeWindow(pbmWindow);
+
+ // Clean the records.
+ Services.cookieBanners.removeAllExecutedRecords(false);
+ Services.cookieBanners.removeAllExecutedRecords(true);
+});
+
+// Ensure the banner clicking doesn't execute after several attempts if the
+// stopExecuteAfterAttempt feature is enabled.
+add_task(async function testStopExecuteAfterSeveralAttempts() {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_REJECT],
+ [
+ "cookiebanners.service.mode.privateBrowsing",
+ Ci.nsICookieBannerService.MODE_REJECT,
+ ],
+ ["cookiebanners.bannerClicking.maxTriesPerSiteAndSession", 2],
+ ],
+ });
+
+ insertTestClickRules();
+
+ // Open the domain and ensure the banner is clicked.
+ await openPageAndVerify({
+ win: window,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: false,
+ expected: "OptOut",
+ });
+
+ // Open the domain in the second time and the banner should be clicked,
+ await openPageAndVerify({
+ win: window,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: false,
+ expected: "OptOut",
+ });
+
+ // Open the domain in the third time, the the banner shouldn't be hidden nor
+ // the banner is clicked.
+ await openPageAndVerify({
+ win: window,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: true,
+ expected: "NoClick",
+ });
+
+ // Test in the private browsing mode.
+ let pbmWindow = await BrowserTestUtils.openNewBrowserWindow({
+ private: true,
+ });
+
+ // Open the domain in PBM and ensure the banner is clicked.
+ await openPageAndVerify({
+ win: pbmWindow,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: false,
+ expected: "OptOut",
+ });
+
+ // Open the domain in the second time and the banner should be clicked,
+ await openPageAndVerify({
+ win: pbmWindow,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: false,
+ expected: "OptOut",
+ });
+
+ // Open the domain in PBM third time and the banner shouldn't be hidden nor
+ // the banner is clicked.
+ await openPageAndVerify({
+ win: pbmWindow,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: true,
+ expected: "NoClick",
+ });
+
+ await BrowserTestUtils.closeWindow(pbmWindow);
+
+ // Clean the records.
+ Services.cookieBanners.removeAllExecutedRecords(false);
+ Services.cookieBanners.removeAllExecutedRecords(true);
+});
+
+// Ensure that ForgetAboutSite clears the handled record properly.
+add_task(async function testForgetAboutSiteWithStopExecuteAfterOneAttempt() {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_REJECT],
+ ["cookiebanners.bannerClicking.maxTriesPerSiteAndSession", 1],
+ ],
+ });
+
+ insertTestClickRules();
+
+ // Open the domain and ensure the banner is clicked.
+ await openPageAndVerify({
+ win: window,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: false,
+ expected: "OptOut",
+ });
+
+ // Open the domain again and the banner shouldn't be hidden nor the banner is
+ // clicked.
+ await openPageAndVerify({
+ win: window,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: true,
+ expected: "NoClick",
+ });
+
+ // Call ForgetAboutSite for the domain.
+ await ForgetAboutSite.removeDataFromDomain(TEST_DOMAIN_A);
+
+ // Open the domain again after ForgetAboutSite and the clicking should work
+ // again.
+ await openPageAndVerify({
+ win: window,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: false,
+ expected: "OptOut",
+ });
+
+ // Clean the records.
+ Services.cookieBanners.removeAllExecutedRecords(false);
+ Services.cookieBanners.removeAllExecutedRecords(true);
+});
+
+// Ensure the ClearDataService clears the handled record properly.
+add_task(async function testClearDataServiceWithStopExecuteAfterOneAttempt() {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_REJECT],
+ ["cookiebanners.bannerClicking.maxTriesPerSiteAndSession", 1],
+ ],
+ });
+
+ insertTestClickRules();
+
+ // Open the domain initially and ensure the banner is clicked.
+ await openPageAndVerify({
+ win: window,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: false,
+ expected: "OptOut",
+ });
+
+ // Invoke deleteDataFromBaseDomain.
+ await new Promise(aResolve => {
+ Services.clearData.deleteDataFromBaseDomain(
+ TEST_DOMAIN_A,
+ true /* user request */,
+ Ci.nsIClearDataService.CLEAR_COOKIE_BANNER_EXECUTED_RECORD,
+ aResolve
+ );
+ });
+
+ // Ensure the record is cleared. The banner clicking should work after clean.
+ await openPageAndVerify({
+ win: window,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: false,
+ expected: "OptOut",
+ });
+
+ // Invoke deleteDataFromHost.
+ await new Promise(aResolve => {
+ Services.clearData.deleteDataFromHost(
+ TEST_DOMAIN_A,
+ true /* user request */,
+ Ci.nsIClearDataService.CLEAR_COOKIE_BANNER_EXECUTED_RECORD,
+ aResolve
+ );
+ });
+
+ // Ensure the record is cleared. The banner clicking should work after clean.
+ await openPageAndVerify({
+ win: window,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: false,
+ expected: "OptOut",
+ });
+
+ // Invoke deleteDataFromPrincipal.
+ let principal =
+ Services.scriptSecurityManager.createContentPrincipalFromOrigin(
+ "https://" + TEST_DOMAIN_A
+ );
+ await new Promise(aResolve => {
+ Services.clearData.deleteDataFromPrincipal(
+ principal,
+ true /* user request */,
+ Ci.nsIClearDataService.CLEAR_COOKIE_BANNER_EXECUTED_RECORD,
+ aResolve
+ );
+ });
+
+ // Ensure the record is cleared. The banner clicking should work after clean.
+ await openPageAndVerify({
+ win: window,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: false,
+ expected: "OptOut",
+ });
+
+ // Invoke deleteData.
+ await new Promise(aResolve => {
+ Services.clearData.deleteData(
+ Ci.nsIClearDataService.CLEAR_COOKIE_BANNER_EXECUTED_RECORD,
+ aResolve
+ );
+ });
+
+ // Ensure the record is cleared. The banner clicking should work after clean.
+ await openPageAndVerify({
+ win: window,
+ domain: TEST_DOMAIN_A,
+ testURL: TEST_PAGE_A,
+ visible: false,
+ expected: "OptOut",
+ });
+
+ // Clean the records.
+ Services.cookieBanners.removeAllExecutedRecords(false);
+ Services.cookieBanners.removeAllExecutedRecords(true);
+});