forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			210 lines
		
	
	
	
		
			6.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			210 lines
		
	
	
	
		
			6.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* Any copyright is dedicated to the Public Domain.
 | 
						|
 * https://creativecommons.org/publicdomain/zero/1.0/ */
 | 
						|
 | 
						|
// This file tests the Privacy pane's Cookie Banner Handling UI.
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
const FEATURE_PREF = "cookiebanners.ui.desktop.enabled";
 | 
						|
const MODE_PREF = "cookiebanners.service.mode";
 | 
						|
const PBM_MODE_PREF = "cookiebanners.service.mode.privateBrowsing";
 | 
						|
const DETECT_ONLY_PREF = "cookiebanners.service.detectOnly";
 | 
						|
 | 
						|
const GROUPBOX_ID = "cookieBannerHandlingGroup";
 | 
						|
const CHECKBOX_ID = "handleCookieBanners";
 | 
						|
 | 
						|
// Test the section is hidden on page load if the feature pref is disabled.
 | 
						|
add_task(async function test_section_hidden_when_feature_flag_disabled() {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [
 | 
						|
      [FEATURE_PREF, false],
 | 
						|
      [MODE_PREF, Ci.nsICookieBannerService.MODE_DISABLED],
 | 
						|
    ],
 | 
						|
  });
 | 
						|
 | 
						|
  await BrowserTestUtils.withNewTab(
 | 
						|
    { gBrowser, url: "about:preferences#privacy" },
 | 
						|
    async function (browser) {
 | 
						|
      let groupbox = browser.contentDocument.getElementById(GROUPBOX_ID);
 | 
						|
      is_element_hidden(groupbox, "#cookieBannerHandlingGroup is hidden");
 | 
						|
    }
 | 
						|
  );
 | 
						|
 | 
						|
  await SpecialPowers.popPrefEnv();
 | 
						|
});
 | 
						|
 | 
						|
// Test the section is shown on page load if the feature pref is enabled.
 | 
						|
add_task(async function test_section_shown_when_feature_flag_enabled() {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [
 | 
						|
      [FEATURE_PREF, true],
 | 
						|
      [MODE_PREF, Ci.nsICookieBannerService.MODE_DISABLED],
 | 
						|
    ],
 | 
						|
  });
 | 
						|
 | 
						|
  await BrowserTestUtils.withNewTab(
 | 
						|
    { gBrowser, url: "about:preferences#privacy" },
 | 
						|
    async function (browser) {
 | 
						|
      let groupbox = browser.contentDocument.getElementById(GROUPBOX_ID);
 | 
						|
      is_element_visible(groupbox, "#cookieBannerHandlingGroup is visible");
 | 
						|
    }
 | 
						|
  );
 | 
						|
 | 
						|
  await SpecialPowers.popPrefEnv();
 | 
						|
});
 | 
						|
 | 
						|
// Test the checkbox is unchecked in DISABLED mode.
 | 
						|
add_task(async function test_checkbox_unchecked_disabled_mode() {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [
 | 
						|
      [FEATURE_PREF, true],
 | 
						|
      [MODE_PREF, Ci.nsICookieBannerService.MODE_DISABLED],
 | 
						|
    ],
 | 
						|
  });
 | 
						|
 | 
						|
  await BrowserTestUtils.withNewTab(
 | 
						|
    { gBrowser, url: "about:preferences#privacy" },
 | 
						|
    async function (browser) {
 | 
						|
      let checkbox = browser.contentDocument.getElementById(CHECKBOX_ID);
 | 
						|
      ok(!checkbox.checked, "checkbox is not checked in DISABLED mode");
 | 
						|
    }
 | 
						|
  );
 | 
						|
 | 
						|
  await SpecialPowers.popPrefEnv();
 | 
						|
});
 | 
						|
 | 
						|
// Test the checkbox is unchecked in detect-only mode.
 | 
						|
add_task(async function test_checkbox_unchecked_detect_only_mode() {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [
 | 
						|
      [FEATURE_PREF, true],
 | 
						|
      [MODE_PREF, Ci.nsICookieBannerService.MODE_REJECT],
 | 
						|
      [DETECT_ONLY_PREF, true],
 | 
						|
    ],
 | 
						|
  });
 | 
						|
 | 
						|
  await BrowserTestUtils.withNewTab(
 | 
						|
    { gBrowser, url: "about:preferences#privacy" },
 | 
						|
    async function (browser) {
 | 
						|
      let checkbox = browser.contentDocument.getElementById(CHECKBOX_ID);
 | 
						|
      ok(!checkbox.checked, "checkbox is not checked in detect-only mode");
 | 
						|
    }
 | 
						|
  );
 | 
						|
 | 
						|
  await SpecialPowers.popPrefEnv();
 | 
						|
});
 | 
						|
 | 
						|
// Test the checkbox is checked in REJECT_OR_ACCEPT mode.
 | 
						|
add_task(async function test_checkbox_checked_reject_or_accept_mode() {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [
 | 
						|
      [FEATURE_PREF, true],
 | 
						|
      [MODE_PREF, Ci.nsICookieBannerService.MODE_REJECT_OR_ACCEPT],
 | 
						|
    ],
 | 
						|
  });
 | 
						|
 | 
						|
  await BrowserTestUtils.withNewTab(
 | 
						|
    { gBrowser, url: "about:preferences#privacy" },
 | 
						|
    async function (browser) {
 | 
						|
      let checkbox = browser.contentDocument.getElementById(CHECKBOX_ID);
 | 
						|
      ok(checkbox.checked, "checkbox is checked in REJECT_OR_ACCEPT mode");
 | 
						|
    }
 | 
						|
  );
 | 
						|
 | 
						|
  await SpecialPowers.popPrefEnv();
 | 
						|
});
 | 
						|
 | 
						|
// Test the checkbox is checked in REJECT mode.
 | 
						|
add_task(async function test_checkbox_checked_reject_mode() {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [
 | 
						|
      [FEATURE_PREF, true],
 | 
						|
      [MODE_PREF, Ci.nsICookieBannerService.MODE_REJECT],
 | 
						|
    ],
 | 
						|
  });
 | 
						|
 | 
						|
  await BrowserTestUtils.withNewTab(
 | 
						|
    { gBrowser, url: "about:preferences#privacy" },
 | 
						|
    async function (browser) {
 | 
						|
      let checkbox = browser.contentDocument.getElementById(CHECKBOX_ID);
 | 
						|
      ok(checkbox.checked, "checkbox is checked in REJECT mode");
 | 
						|
    }
 | 
						|
  );
 | 
						|
 | 
						|
  await SpecialPowers.popPrefEnv();
 | 
						|
});
 | 
						|
 | 
						|
// Test that toggling the checkbox toggles the mode pref value as expected,
 | 
						|
// and also disables detect only mode, as expected.
 | 
						|
add_task(async function test_checkbox_modifies_prefs() {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [
 | 
						|
      [FEATURE_PREF, true],
 | 
						|
      [MODE_PREF, Ci.nsICookieBannerService.MODE_UNSET],
 | 
						|
      [PBM_MODE_PREF, Ci.nsICookieBannerService.MODE_UNSET],
 | 
						|
      [DETECT_ONLY_PREF, true],
 | 
						|
    ],
 | 
						|
  });
 | 
						|
 | 
						|
  await BrowserTestUtils.withNewTab(
 | 
						|
    { gBrowser, url: "about:preferences#privacy" },
 | 
						|
    async function (browser) {
 | 
						|
      let checkboxSelector = "#" + CHECKBOX_ID;
 | 
						|
      let checkbox = browser.contentDocument.querySelector(checkboxSelector);
 | 
						|
      let section = browser.contentDocument.getElementById(GROUPBOX_ID);
 | 
						|
 | 
						|
      section.scrollIntoView();
 | 
						|
 | 
						|
      Assert.ok(
 | 
						|
        !checkbox.checked,
 | 
						|
        "initially, the checkbox should be unchecked"
 | 
						|
      );
 | 
						|
 | 
						|
      await BrowserTestUtils.synthesizeMouseAtCenter(
 | 
						|
        checkboxSelector,
 | 
						|
        {},
 | 
						|
        browser
 | 
						|
      );
 | 
						|
      Assert.ok(checkbox.checked, "checkbox should be checked");
 | 
						|
      Assert.equal(
 | 
						|
        Ci.nsICookieBannerService.MODE_REJECT,
 | 
						|
        Services.prefs.getIntPref(MODE_PREF),
 | 
						|
        "cookie banner handling mode should be set to REJECT mode after checking the checkbox"
 | 
						|
      );
 | 
						|
      Assert.equal(
 | 
						|
        Ci.nsICookieBannerService.MODE_REJECT,
 | 
						|
        Services.prefs.getIntPref(PBM_MODE_PREF),
 | 
						|
        "cookie banner handling mode for PBM should be set to REJECT mode after checking the checkbox"
 | 
						|
      );
 | 
						|
      Assert.equal(
 | 
						|
        false,
 | 
						|
        Services.prefs.getBoolPref(DETECT_ONLY_PREF),
 | 
						|
        "cookie banner handling detect-only mode should be disabled after checking the checkbox"
 | 
						|
      );
 | 
						|
 | 
						|
      await BrowserTestUtils.synthesizeMouseAtCenter(
 | 
						|
        checkboxSelector,
 | 
						|
        {},
 | 
						|
        browser
 | 
						|
      );
 | 
						|
      Assert.ok(!checkbox.checked, "checkbox should be unchecked");
 | 
						|
      Assert.equal(
 | 
						|
        Ci.nsICookieBannerService.MODE_DISABLED,
 | 
						|
        Services.prefs.getIntPref(MODE_PREF),
 | 
						|
        "cookie banner handling mode should be set to DISABLED mode after unchecking the checkbox"
 | 
						|
      );
 | 
						|
      Assert.equal(
 | 
						|
        Ci.nsICookieBannerService.MODE_DISABLED,
 | 
						|
        Services.prefs.getIntPref(PBM_MODE_PREF),
 | 
						|
        "cookie banner handling mode for PBM should be set to DISABLED mode after unchecking the checkbox"
 | 
						|
      );
 | 
						|
      Assert.equal(
 | 
						|
        false,
 | 
						|
        Services.prefs.getBoolPref(DETECT_ONLY_PREF),
 | 
						|
        "cookie banner handling detect-only mode should still be disabled after unchecking the checkbox"
 | 
						|
      );
 | 
						|
    }
 | 
						|
  );
 | 
						|
 | 
						|
  await SpecialPowers.popPrefEnv();
 | 
						|
});
 |