213 lines
5.9 KiB
JavaScript
213 lines
5.9 KiB
JavaScript
/* 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_enabled_pref() {
|
|
info("Disabling cookie banner service.");
|
|
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_DISABLED],
|
|
[
|
|
"cookiebanners.service.mode.privateBrowsing",
|
|
Ci.nsICookieBannerService.MODE_DISABLED,
|
|
],
|
|
],
|
|
});
|
|
|
|
ok(Services.cookieBanners, "Services.cookieBanners is defined.");
|
|
ok(
|
|
Services.cookieBanners instanceof Ci.nsICookieBannerService,
|
|
"Services.cookieBanners is nsICookieBannerService"
|
|
);
|
|
|
|
info(
|
|
"Testing that methods throw NS_ERROR_NOT_AVAILABLE if the service is disabled."
|
|
);
|
|
|
|
Assert.throws(
|
|
() => {
|
|
Services.cookieBanners.rules;
|
|
},
|
|
/NS_ERROR_NOT_AVAILABLE/,
|
|
"Should have thrown NS_ERROR_NOT_AVAILABLE for rules getter."
|
|
);
|
|
|
|
// Create a test rule to attempt to insert.
|
|
let rule = Cc["@mozilla.org/cookie-banner-rule;1"].createInstance(
|
|
Ci.nsICookieBannerRule
|
|
);
|
|
rule.id = genUUID();
|
|
rule.domains = ["example.com"];
|
|
|
|
Assert.throws(
|
|
() => {
|
|
Services.cookieBanners.insertRule(rule);
|
|
},
|
|
/NS_ERROR_NOT_AVAILABLE/,
|
|
"Should have thrown NS_ERROR_NOT_AVAILABLE for insertRule."
|
|
);
|
|
|
|
Assert.throws(
|
|
() => {
|
|
Services.cookieBanners.removeRule(rule);
|
|
},
|
|
/NS_ERROR_NOT_AVAILABLE/,
|
|
"Should have thrown NS_ERROR_NOT_AVAILABLE for removeRule."
|
|
);
|
|
|
|
Assert.throws(
|
|
() => {
|
|
Services.cookieBanners.getCookiesForURI(
|
|
Services.io.newURI("https://example.com"),
|
|
false
|
|
);
|
|
},
|
|
/NS_ERROR_NOT_AVAILABLE/,
|
|
"Should have thrown NS_ERROR_NOT_AVAILABLE for rules getCookiesForURI."
|
|
);
|
|
Assert.throws(
|
|
() => {
|
|
Services.cookieBanners.getClickRulesForDomain("example.com", true);
|
|
},
|
|
/NS_ERROR_NOT_AVAILABLE/,
|
|
"Should have thrown NS_ERROR_NOT_AVAILABLE for rules getClickRuleForDomain."
|
|
);
|
|
let uri = Services.io.newURI("https://example.com");
|
|
Assert.throws(
|
|
() => {
|
|
Services.cookieBanners.getDomainPref(uri, false);
|
|
},
|
|
/NS_ERROR_NOT_AVAILABLE/,
|
|
"Should have thrown NS_ERROR_NOT_AVAILABLE for getDomainPref."
|
|
);
|
|
Assert.throws(
|
|
() => {
|
|
Services.cookieBanners.setDomainPref(
|
|
uri,
|
|
Ci.nsICookieBannerService.MODE_REJECT,
|
|
false
|
|
);
|
|
},
|
|
/NS_ERROR_NOT_AVAILABLE/,
|
|
"Should have thrown NS_ERROR_NOT_AVAILABLE for setDomainPref."
|
|
);
|
|
Assert.throws(
|
|
() => {
|
|
Services.cookieBanners.setDomainPrefAndPersistInPrivateBrowsing(
|
|
uri,
|
|
Ci.nsICookieBannerService.MODE_REJECT
|
|
);
|
|
},
|
|
/NS_ERROR_NOT_AVAILABLE/,
|
|
"Should have thrown NS_ERROR_NOT_AVAILABLE for setDomainPrefAndPersistInPrivateBrowsing."
|
|
);
|
|
Assert.throws(
|
|
() => {
|
|
Services.cookieBanners.removeDomainPref(uri, false);
|
|
},
|
|
/NS_ERROR_NOT_AVAILABLE/,
|
|
"Should have thrown NS_ERROR_NOT_AVAILABLE for removeDomainPref."
|
|
);
|
|
Assert.throws(
|
|
() => {
|
|
Services.cookieBanners.removeAllDomainPrefs(false);
|
|
},
|
|
/NS_ERROR_NOT_AVAILABLE/,
|
|
"Should have thrown NS_ERROR_NOT_AVAILABLE for removeAllSitePref."
|
|
);
|
|
|
|
info("Enabling cookie banner service. MODE_REJECT");
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_REJECT],
|
|
],
|
|
});
|
|
|
|
let rules = Services.cookieBanners.rules;
|
|
ok(
|
|
Array.isArray(rules),
|
|
"Rules getter should not throw but return an array."
|
|
);
|
|
|
|
info("Enabling cookie banner service. MODE_REJECT_OR_ACCEPT");
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
[
|
|
"cookiebanners.service.mode",
|
|
Ci.nsICookieBannerService.MODE_REJECT_OR_ACCEPT,
|
|
],
|
|
],
|
|
});
|
|
|
|
rules = Services.cookieBanners.rules;
|
|
ok(
|
|
Array.isArray(rules),
|
|
"Rules getter should not throw but return an array."
|
|
);
|
|
});
|
|
|
|
/**
|
|
* Test both service mode pref combinations to ensure the cookie banner service
|
|
* is (un-)initialized correctly.
|
|
*/
|
|
add_task(async function test_enabled_pref_pbm_combinations() {
|
|
const MODES = [
|
|
Ci.nsICookieBannerService.MODE_DISABLED,
|
|
Ci.nsICookieBannerService.MODE_REJECT,
|
|
Ci.nsICookieBannerService.MODE_REJECT_OR_ACCEPT,
|
|
];
|
|
|
|
// Test all pref combinations
|
|
MODES.forEach(modeNormal => {
|
|
MODES.forEach(modePrivate => {
|
|
info(
|
|
`cookiebanners.service.mode=${modeNormal}; cookiebanners.service.mode.privateBrowsing=${modePrivate}`
|
|
);
|
|
Services.prefs.setIntPref("cookiebanners.service.mode", modeNormal);
|
|
Services.prefs.setIntPref(
|
|
"cookiebanners.service.mode.privateBrowsing",
|
|
modePrivate
|
|
);
|
|
|
|
if (
|
|
modeNormal == Ci.nsICookieBannerService.MODE_DISABLED &&
|
|
modePrivate == Ci.nsICookieBannerService.MODE_DISABLED
|
|
) {
|
|
Assert.throws(
|
|
() => {
|
|
Services.cookieBanners.rules;
|
|
},
|
|
/NS_ERROR_NOT_AVAILABLE/,
|
|
"Cookie banner service should be disabled. Should throw NS_ERROR_NOT_AVAILABLE for rules getter."
|
|
);
|
|
} else {
|
|
ok(
|
|
Services.cookieBanners.rules,
|
|
"Cookie banner service should be enabled, rules getter should not throw."
|
|
);
|
|
}
|
|
});
|
|
});
|
|
|
|
// Cleanup.
|
|
Services.prefs.clearUserPref("cookiebanners.service.mode");
|
|
Services.prefs.clearUserPref("cookiebanners.service.mode.privateBrowsing");
|
|
});
|