Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Errors

/* Any copyright is dedicated to the Public Domain.
"use strict";
add_setup(clickTestSetup);
/**
* Test the banner clicking with global rules and MODE_REJECT.
*/
add_task(async function test_clicking_global_rules() {
await SpecialPowers.pushPrefEnv({
set: [
["cookiebanners.service.mode", Ci.nsICookieBannerService.MODE_REJECT],
["cookiebanners.service.enableGlobalRules", true],
],
});
// Clear the executed records before testing.
Services.cookieBanners.removeAllExecutedRecords(false);
info("Clearing existing rules");
Services.cookieBanners.resetRules(false);
info("Inserting global test rules.");
info(
"Add global ruleA which targets an existing banner (presence) with existing buttons. This rule should handle the banner."
);
let ruleA = Cc["@mozilla.org/cookie-banner-rule;1"].createInstance(
Ci.nsICookieBannerRule
);
ruleA.id = genUUID();
ruleA.domains = [];
ruleA.addClickRule(
"div#banner",
false,
Ci.nsIClickRule.RUN_TOP,
null,
"button#optOut",
"button#optIn"
);
Services.cookieBanners.insertRule(ruleA);
info(
"Add global ruleC which targets an existing banner (presence) but non-existing buttons."
);
let ruleC = Cc["@mozilla.org/cookie-banner-rule;1"].createInstance(
Ci.nsICookieBannerRule
);
ruleC.id = genUUID();
ruleC.domains = [];
ruleC.addClickRule(
"div#banner",
false,
Ci.nsIClickRule.RUN_TOP,
null,
"button#nonExistingOptOut",
"button#nonExistingOptIn"
);
Services.cookieBanners.insertRule(ruleC);
info("Add global ruleD which targets a non-existing banner (presence).");
let ruleD = Cc["@mozilla.org/cookie-banner-rule;1"].createInstance(
Ci.nsICookieBannerRule
);
ruleD.id = genUUID();
ruleD.domains = [];
ruleD.addClickRule(
"div#nonExistingBanner",
false,
Ci.nsIClickRule.RUN_TOP,
null,
null,
"button#optIn"
);
Services.cookieBanners.insertRule(ruleD);
await testCMPResultTelemetry({});
info("The global rule ruleA should handle both test pages with div#banner.");
await openPageAndVerify({
domain: TEST_DOMAIN_A,
testURL: TEST_PAGE_A,
visible: false,
expected: "OptOut",
});
await testCMPResultTelemetry(
{
success: 1,
success_dom_content_loaded: 1,
},
false
);
Services.cookieBanners.removeAllExecutedRecords(false);
await openPageAndVerify({
domain: TEST_DOMAIN_B,
testURL: TEST_PAGE_B,
visible: false,
expected: "OptOut",
});
await testCMPResultTelemetry(
{
success: 2,
success_dom_content_loaded: 2,
},
false
);
Services.cookieBanners.removeAllExecutedRecords(false);
info("No global rule should handle TEST_PAGE_C with div#bannerB.");
await openPageAndVerify({
domain: TEST_DOMAIN_C,
testURL: TEST_PAGE_C,
visible: true,
expected: "NoClick",
bannerId: "bannerB",
});
await testCMPResultTelemetry(
{
success: 2,
success_dom_content_loaded: 2,
fail: 1,
fail_banner_not_found: 1,
},
false
);
await SpecialPowers.pushPrefEnv({
set: [["cookiebanners.bannerClicking.timeoutAfterLoad", 10000]],
});
// Clear the executed records before testing.
Services.cookieBanners.removeAllExecutedRecords(false);
info("Test delayed banner handling with global rules.");
let TEST_PAGE =
TEST_ORIGIN_A + TEST_PATH + "file_delayed_banner.html?delay=100";
await openPageAndVerify({
domain: TEST_DOMAIN_A,
testURL: TEST_PAGE,
visible: false,
expected: "OptOut",
});
await SpecialPowers.popPrefEnv();
await testCMPResultTelemetry({
success: 3,
success_dom_content_loaded: 2,
fail: 1,
fail_banner_not_found: 1,
success_mutation_pre_load: 1,
});
});
/**
* Test that domain-specific rules take precedence over global rules.
*/
add_task(async function test_clicking_global_rules_precedence() {
await SpecialPowers.pushPrefEnv({
set: [
[
"cookiebanners.service.mode",
Ci.nsICookieBannerService.MODE_REJECT_OR_ACCEPT,
],
["cookiebanners.service.enableGlobalRules", true],
],
});
// Clear the executed records before testing.
Services.cookieBanners.removeAllExecutedRecords(false);
info("Clearing existing rules");
Services.cookieBanners.resetRules(false);
info("Inserting global test rules.");
info(
"Add global ruleA which targets an existing banner (presence) with existing buttons."
);
let ruleGlobal = Cc["@mozilla.org/cookie-banner-rule;1"].createInstance(
Ci.nsICookieBannerRule
);
ruleGlobal.id = genUUID();
ruleGlobal.domains = [];
ruleGlobal.addClickRule(
"div#banner",
false,
Ci.nsIClickRule.RUN_TOP,
null,
"button#optOut",
null
);
Services.cookieBanners.insertRule(ruleGlobal);
info("Add domain specific rule which also targets the existing banner.");
let ruleDomain = Cc["@mozilla.org/cookie-banner-rule;1"].createInstance(
Ci.nsICookieBannerRule
);
ruleDomain.id = genUUID();
ruleDomain.domains = [TEST_DOMAIN_A];
ruleDomain.addClickRule(
"div#banner",
false,
Ci.nsIClickRule.RUN_TOP,
null,
null,
"button#optIn"
);
Services.cookieBanners.insertRule(ruleDomain);
await testCMPResultTelemetry({});
info("Test that the domain-specific rule applies, not the global one.");
await openPageAndVerify({
domain: TEST_DOMAIN_A,
testURL: TEST_PAGE_A,
visible: false,
// Because of the way the rules are setup OptOut would mean the global rule
// applies, opt-in means the domain specific rule applies.
expected: "OptIn",
});
// Ensure we don't accidentally collect CMP result telemetry when
// domain-specific rule applies.
await testCMPResultTelemetry({});
});