Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"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."
);
});