summaryrefslogtreecommitdiffstats
path: root/toolkit/components/cookiebanners/test/browser/browser_cookiebannerservice_domainPrefs.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/cookiebanners/test/browser/browser_cookiebannerservice_domainPrefs.js')
-rw-r--r--toolkit/components/cookiebanners/test/browser/browser_cookiebannerservice_domainPrefs.js403
1 files changed, 403 insertions, 0 deletions
diff --git a/toolkit/components/cookiebanners/test/browser/browser_cookiebannerservice_domainPrefs.js b/toolkit/components/cookiebanners/test/browser/browser_cookiebannerservice_domainPrefs.js
new file mode 100644
index 0000000000..58610c6419
--- /dev/null
+++ b/toolkit/components/cookiebanners/test/browser/browser_cookiebannerservice_domainPrefs.js
@@ -0,0 +1,403 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+add_setup(async function() {
+ registerCleanupFunction(() => {
+ Services.prefs.clearUserPref("cookiebanners.service.mode");
+ Services.prefs.clearUserPref("cookiebanners.service.mode.privateBrowsing");
+ if (
+ Services.prefs.getIntPref("cookiebanners.service.mode") !=
+ Ci.nsICookieBannerService.MODE_DISABLED ||
+ Services.prefs.getIntPref("cookiebanners.service.mode.privateBrowsing") !=
+ Ci.nsICookieBannerService.MODE_DISABLED
+ ) {
+ // Restore original rules.
+ Services.cookieBanners.resetRules(true);
+ }
+ });
+});
+
+add_task(async function test_domain_preference() {
+ info("Enabling cookie banner service with MODE_REJECT");
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_REJECT],
+ ],
+ });
+
+ // eslint-disable-next-line @microsoft/sdl/no-insecure-url
+ let uri = Services.io.newURI("http://example.com");
+
+ // Check no site preference at the beginning
+ is(
+ Services.cookieBanners.getDomainPref(uri, false),
+ Ci.nsICookieBannerService.MODE_UNSET,
+ "There should be no per site preference at the beginning."
+ );
+
+ // Check setting and getting a site preference.
+ Services.cookieBanners.setDomainPref(
+ uri,
+ Ci.nsICookieBannerService.MODE_REJECT,
+ false
+ );
+
+ is(
+ Services.cookieBanners.getDomainPref(uri, false),
+ Ci.nsICookieBannerService.MODE_REJECT,
+ "Can get site preference for example.com with the correct value."
+ );
+
+ // Check site preference is shared between http and https.
+ let uriHttps = Services.io.newURI("https://example.com");
+ is(
+ Services.cookieBanners.getDomainPref(uriHttps, false),
+ Ci.nsICookieBannerService.MODE_REJECT,
+ "Can get site preference for example.com in secure context."
+ );
+
+ // Check site preference in the other domain, example.org.
+ let uriOther = Services.io.newURI("https://example.org");
+ is(
+ Services.cookieBanners.getDomainPref(uriOther, false),
+ Ci.nsICookieBannerService.MODE_UNSET,
+ "There should be no domain preference for example.org."
+ );
+
+ // Check setting site preference won't affect the other domain.
+ Services.cookieBanners.setDomainPref(
+ uriOther,
+ Ci.nsICookieBannerService.MODE_REJECT_OR_ACCEPT,
+ false
+ );
+
+ is(
+ Services.cookieBanners.getDomainPref(uriOther, false),
+ Ci.nsICookieBannerService.MODE_REJECT_OR_ACCEPT,
+ "Can get domain preference for example.org with the correct value."
+ );
+ is(
+ Services.cookieBanners.getDomainPref(uri, false),
+ Ci.nsICookieBannerService.MODE_REJECT,
+ "Can get site preference for example.com"
+ );
+
+ // Check nsICookieBannerService.setDomainPrefAndPersistInPrivateBrowsing().
+ Services.cookieBanners.setDomainPrefAndPersistInPrivateBrowsing(
+ uri,
+ Ci.nsICookieBannerService.MODE_REJECT_OR_ACCEPT
+ );
+ is(
+ Services.cookieBanners.getDomainPref(uri, true),
+ Ci.nsICookieBannerService.MODE_REJECT_OR_ACCEPT,
+ "Can get site preference for example.com"
+ );
+
+ // Check removing the site preference.
+ Services.cookieBanners.removeDomainPref(uri, false);
+ is(
+ Services.cookieBanners.getDomainPref(uri, false),
+ Ci.nsICookieBannerService.MODE_UNSET,
+ "There should be no site preference for example.com."
+ );
+
+ // Check remove all site preferences.
+ Services.cookieBanners.removeAllDomainPrefs(false);
+ is(
+ Services.cookieBanners.getDomainPref(uri, false),
+ Ci.nsICookieBannerService.MODE_UNSET,
+ "There should be no site preference for example.com."
+ );
+ is(
+ Services.cookieBanners.getDomainPref(uriOther, false),
+ Ci.nsICookieBannerService.MODE_UNSET,
+ "There should be no site preference for example.org."
+ );
+});
+
+add_task(async function test_domain_preference_dont_override_disable_pref() {
+ info("Enabling cookie banner service with MODE_REJECT");
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_REJECT],
+ ],
+ });
+
+ info("Adding a domain preference for example.com");
+ let uri = Services.io.newURI("https://example.com");
+
+ // Set a domain preference.
+ Services.cookieBanners.setDomainPref(
+ uri,
+ Ci.nsICookieBannerService.MODE_REJECT,
+ false
+ );
+
+ info("Disabling the cookie banner service.");
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_DISABLED],
+ [
+ "cookiebanners.service.mode.privateBrowsing",
+ Ci.nsICookieBannerService.MODE_DISABLED,
+ ],
+ ],
+ });
+
+ info("Verifying if the cookie banner service is disabled.");
+ Assert.throws(
+ () => {
+ Services.cookieBanners.getDomainPref(uri, false);
+ },
+ /NS_ERROR_NOT_AVAILABLE/,
+ "Should have thrown NS_ERROR_NOT_AVAILABLE for getDomainPref."
+ );
+
+ info("Enable the service again in order to clear the domain prefs.");
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_REJECT],
+ ],
+ });
+ Services.cookieBanners.removeAllDomainPrefs(false);
+});
+
+/**
+ * Test that domain preference is properly cleared when private browsing session
+ * ends.
+ */
+add_task(async function test_domain_preference_cleared_PBM_ends() {
+ info("Enabling cookie banner service with MODE_REJECT");
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_REJECT],
+ ],
+ });
+
+ info("Adding a domain preference for example.com in PBM");
+ let uri = Services.io.newURI("https://example.com");
+
+ info("Open a private browsing window.");
+ let PBMWin = await BrowserTestUtils.openNewBrowserWindow({
+ private: true,
+ });
+
+ // Set a domain preference for PBM.
+ Services.cookieBanners.setDomainPref(
+ uri,
+ Ci.nsICookieBannerService.MODE_DISABLED,
+ true
+ );
+
+ info("Verifying if the cookie banner domain pref is set for PBM.");
+ is(
+ Services.cookieBanners.getDomainPref(uri, true),
+ Ci.nsICookieBannerService.MODE_DISABLED,
+ "The domain pref is properly set for PBM."
+ );
+
+ info("Trigger an ending of a private browsing window session");
+ let PBMSessionEndsObserved = TestUtils.topicObserved(
+ "last-pb-context-exited"
+ );
+
+ // Close the PBM window and wait until it finishes.
+ await BrowserTestUtils.closeWindow(PBMWin);
+ await PBMSessionEndsObserved;
+
+ info("Verify if the private domain pref is cleared.");
+ is(
+ Services.cookieBanners.getDomainPref(uri, true),
+ Ci.nsICookieBannerService.MODE_UNSET,
+ "The domain pref is properly set for PBM."
+ );
+});
+
+/**
+ * Test that the persistent domain preference won't be cleared when private
+ * browsing session ends.
+ */
+add_task(async function test_persistent_domain_preference_remain_PBM_ends() {
+ info("Enabling cookie banner service with MODE_REJECT");
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_REJECT],
+ ],
+ });
+
+ info("Adding a domain preference for example.com in PBM");
+ let uri = Services.io.newURI("https://example.com");
+
+ info("Open a private browsing window.");
+ let PBMWin = await BrowserTestUtils.openNewBrowserWindow({
+ private: true,
+ });
+
+ // Set a domain preference for PBM.
+ Services.cookieBanners.setDomainPref(
+ uri,
+ Ci.nsICookieBannerService.MODE_DISABLED,
+ true
+ );
+
+ info("Verifying if the cookie banner domain pref is set for PBM.");
+ is(
+ Services.cookieBanners.getDomainPref(uri, true),
+ Ci.nsICookieBannerService.MODE_DISABLED,
+ "The domain pref is properly set for PBM."
+ );
+
+ info("Adding a persistent domain preference for example.org in PBM");
+ let uriPersistent = Services.io.newURI("https://example.org");
+
+ // Set a persistent domain preference for PBM.
+ Services.cookieBanners.setDomainPrefAndPersistInPrivateBrowsing(
+ uriPersistent,
+ Ci.nsICookieBannerService.MODE_DISABLED
+ );
+
+ info("Trigger an ending of a private browsing window session");
+ let PBMSessionEndsObserved = TestUtils.topicObserved(
+ "last-pb-context-exited"
+ );
+
+ // Close the PBM window and wait until it finishes.
+ await BrowserTestUtils.closeWindow(PBMWin);
+ await PBMSessionEndsObserved;
+
+ info("Verify if the private domain pref is cleared.");
+ is(
+ Services.cookieBanners.getDomainPref(uri, true),
+ Ci.nsICookieBannerService.MODE_UNSET,
+ "The domain pref is properly set for PBM."
+ );
+
+ info("Verify if the persistent private domain pref remains.");
+ is(
+ Services.cookieBanners.getDomainPref(uriPersistent, true),
+ Ci.nsICookieBannerService.MODE_DISABLED,
+ "The persistent domain pref remains for PBM after private session ends."
+ );
+});
+
+add_task(async function test_remove_persistent_domain_pref_in_PBM() {
+ info("Enabling cookie banner service with MODE_REJECT");
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_REJECT],
+ ],
+ });
+
+ info("Adding a domain preference for example.com in PBM");
+ let uri = Services.io.newURI("https://example.com");
+
+ info("Open a private browsing window.");
+ let PBMWin = await BrowserTestUtils.openNewBrowserWindow({
+ private: true,
+ });
+
+ // Set a persistent domain preference for PBM.
+ Services.cookieBanners.setDomainPrefAndPersistInPrivateBrowsing(
+ uri,
+ Ci.nsICookieBannerService.MODE_DISABLED
+ );
+
+ info("Verifying if the cookie banner domain pref is set for PBM.");
+ is(
+ Services.cookieBanners.getDomainPref(uri, true),
+ Ci.nsICookieBannerService.MODE_DISABLED,
+ "The domain pref is properly set for PBM."
+ );
+
+ info("Remove the persistent domain pref.");
+ Services.cookieBanners.removeDomainPref(uri, true);
+
+ info("Trigger an ending of a private browsing window session");
+ let PBMSessionEndsObserved = TestUtils.topicObserved(
+ "last-pb-context-exited"
+ );
+
+ // Close the PBM window and wait until it finishes.
+ await BrowserTestUtils.closeWindow(PBMWin);
+ await PBMSessionEndsObserved;
+
+ info(
+ "Verify if the private domain pref is no longer persistent and cleared."
+ );
+ is(
+ Services.cookieBanners.getDomainPref(uri, true),
+ Ci.nsICookieBannerService.MODE_UNSET,
+ "The domain pref is properly set for PBM."
+ );
+});
+
+/**
+ * Test that the persistent state of a domain pref in PMB can be override by new
+ * call without persistent state.
+ */
+add_task(async function test_override_persistent_state_in_PBM() {
+ info("Enabling cookie banner service with MODE_REJECT");
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_REJECT],
+ ],
+ });
+
+ info("Adding a domain preference for example.com in PBM");
+ let uri = Services.io.newURI("https://example.com");
+
+ info("Open a private browsing window.");
+ let PBMWin = await BrowserTestUtils.openNewBrowserWindow({
+ private: true,
+ });
+
+ // Set a persistent domain preference for PBM.
+ Services.cookieBanners.setDomainPrefAndPersistInPrivateBrowsing(
+ uri,
+ Ci.nsICookieBannerService.MODE_DISABLED
+ );
+
+ info("Trigger an ending of a private browsing window session");
+ let PBMSessionEndsObserved = TestUtils.topicObserved(
+ "last-pb-context-exited"
+ );
+
+ // Close the PBM window and wait until it finishes.
+ await BrowserTestUtils.closeWindow(PBMWin);
+ await PBMSessionEndsObserved;
+
+ info("Verify if the persistent private domain pref remains.");
+ is(
+ Services.cookieBanners.getDomainPref(uri, true),
+ Ci.nsICookieBannerService.MODE_DISABLED,
+ "The persistent domain pref remains for PBM after private session ends."
+ );
+
+ info("Open a private browsing window again.");
+ PBMWin = await BrowserTestUtils.openNewBrowserWindow({
+ private: true,
+ });
+
+ info("Override the persistent domain pref with non-persistent domain pref.");
+ Services.cookieBanners.setDomainPref(
+ uri,
+ Ci.nsICookieBannerService.MODE_DISABLED,
+ true
+ );
+
+ info("Trigger an ending of a private browsing window session again");
+ PBMSessionEndsObserved = TestUtils.topicObserved("last-pb-context-exited");
+
+ // Close the PBM window and wait until it finishes.
+ await BrowserTestUtils.closeWindow(PBMWin);
+ await PBMSessionEndsObserved;
+
+ info("Verify if the private domain pref is cleared.");
+ is(
+ Services.cookieBanners.getDomainPref(uri, true),
+ Ci.nsICookieBannerService.MODE_UNSET,
+ "The domain pref is properly set for PBM."
+ );
+});