298 lines
9.3 KiB
JavaScript
298 lines
9.3 KiB
JavaScript
"use strict";
|
|
|
|
add_task(async function test_blocking() {
|
|
let listsLoaded = TestUtils.topicObserved(LISTS_LOADED_TOPIC);
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["privacy.trackingprotection.content.testing", true],
|
|
["privacy.trackingprotection.content.protection.enabled", true],
|
|
[
|
|
"privacy.trackingprotection.content.protection.test_list_urls",
|
|
BLOCK_LIST_URL,
|
|
],
|
|
["privacy.trackingprotection.content.annotation.enabled", false],
|
|
["privacy.trackingprotection.content.annotation.test_list_urls", ""],
|
|
],
|
|
});
|
|
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(
|
|
gBrowser,
|
|
TEST_TOP_PAGE
|
|
);
|
|
let browser = tab.linkedBrowser;
|
|
await listsLoaded;
|
|
|
|
let imageURL =
|
|
TEST_BLOCKED_3RD_PARTY_DOMAIN +
|
|
"browser/toolkit/components/antitracking/test/browser/raptor.jpg?" +
|
|
Math.random();
|
|
|
|
let loaded = await SpecialPowers.spawn(browser, [imageURL], async url => {
|
|
let img = new content.Image();
|
|
img.src = url;
|
|
return new content.Promise(resolve => {
|
|
img.onload = () => resolve(true);
|
|
img.onerror = () => resolve(false);
|
|
});
|
|
});
|
|
ok(!loaded, "Third-party image from example.org should be blocked");
|
|
|
|
let log = JSON.parse(await browser.getContentBlockingLog());
|
|
let origin = TEST_BLOCKED_3RD_PARTY_DOMAIN.replace(/\/$/, "");
|
|
ok(log[origin], "Content blocking log has entry for " + origin);
|
|
if (log[origin]) {
|
|
is(
|
|
log[origin][0][0],
|
|
Ci.nsIWebProgressListener.STATE_BLOCKED_TRACKING_CONTENT,
|
|
"Entry has the STATE_BLOCKED_TRACKING_CONTENT flag"
|
|
);
|
|
is(log[origin][0][1], true, "Entry is marked as blocked");
|
|
}
|
|
|
|
BrowserTestUtils.removeTab(tab);
|
|
});
|
|
|
|
add_task(async function test_replace() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["privacy.trackingprotection.content.testing", true],
|
|
["privacy.trackingprotection.content.protection.enabled", true],
|
|
[
|
|
"privacy.trackingprotection.content.protection.test_list_urls",
|
|
BLOCK_LIST_URL,
|
|
],
|
|
["privacy.trackingprotection.content.annotation.enabled", false],
|
|
["privacy.trackingprotection.content.annotation.test_list_urls", ""],
|
|
],
|
|
});
|
|
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(
|
|
gBrowser,
|
|
TEST_TOP_PAGE
|
|
);
|
|
let browser = tab.linkedBrowser;
|
|
|
|
let imageURL =
|
|
TEST_BLOCKED_3RD_PARTY_DOMAIN +
|
|
"browser/toolkit/components/antitracking/test/browser/raptor.jpg?" +
|
|
Math.random();
|
|
|
|
let replacePromise = UrlClassifierTestUtils.handleBeforeBlockChannel({
|
|
filterOrigin: TEST_BLOCKED_3RD_PARTY_DOMAIN.replace(/\/$/, ""),
|
|
action: "replace",
|
|
});
|
|
|
|
let loaded = await SpecialPowers.spawn(browser, [imageURL], async url => {
|
|
let img = new content.Image();
|
|
img.src = url;
|
|
return new content.Promise(resolve => {
|
|
img.onload = () => resolve(true);
|
|
img.onerror = () => resolve(false);
|
|
});
|
|
});
|
|
ok(loaded, "Third-party image should not be cancelled when replaced");
|
|
|
|
await replacePromise;
|
|
|
|
let log = JSON.parse(await browser.getContentBlockingLog());
|
|
let origin = TEST_BLOCKED_3RD_PARTY_DOMAIN.replace(/\/$/, "");
|
|
ok(log[origin], "Content blocking log has entry for " + origin);
|
|
if (log[origin]) {
|
|
let replacedEntry = log[origin].find(
|
|
entry =>
|
|
entry[0] == Ci.nsIWebProgressListener.STATE_REPLACED_TRACKING_CONTENT
|
|
);
|
|
ok(replacedEntry, "Entry has the STATE_REPLACED_TRACKING_CONTENT flag");
|
|
if (replacedEntry) {
|
|
is(replacedEntry[1], true, "Entry is marked as blocked (replaced)");
|
|
}
|
|
}
|
|
|
|
BrowserTestUtils.removeTab(tab);
|
|
});
|
|
|
|
add_task(async function test_allow() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["privacy.trackingprotection.content.testing", true],
|
|
["privacy.trackingprotection.content.protection.enabled", true],
|
|
[
|
|
"privacy.trackingprotection.content.protection.test_list_urls",
|
|
BLOCK_LIST_URL,
|
|
],
|
|
["privacy.trackingprotection.content.annotation.enabled", false],
|
|
["privacy.trackingprotection.content.annotation.test_list_urls", ""],
|
|
],
|
|
});
|
|
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(
|
|
gBrowser,
|
|
TEST_TOP_PAGE
|
|
);
|
|
let browser = tab.linkedBrowser;
|
|
|
|
let imageURL =
|
|
TEST_BLOCKED_3RD_PARTY_DOMAIN +
|
|
"browser/toolkit/components/antitracking/test/browser/raptor.jpg?" +
|
|
Math.random();
|
|
|
|
let allowPromise = UrlClassifierTestUtils.handleBeforeBlockChannel({
|
|
filterOrigin: TEST_BLOCKED_3RD_PARTY_DOMAIN.replace(/\/$/, ""),
|
|
action: "allow",
|
|
});
|
|
|
|
let loaded = await SpecialPowers.spawn(browser, [imageURL], async url => {
|
|
let img = new content.Image();
|
|
img.src = url;
|
|
return new content.Promise(resolve => {
|
|
img.onload = () => resolve(true);
|
|
img.onerror = () => resolve(false);
|
|
});
|
|
});
|
|
ok(loaded, "Third-party image should not be cancelled when allowed");
|
|
|
|
await allowPromise;
|
|
|
|
let log = JSON.parse(await browser.getContentBlockingLog());
|
|
let origin = TEST_BLOCKED_3RD_PARTY_DOMAIN.replace(/\/$/, "");
|
|
ok(log[origin], "Content blocking log has entry for " + origin);
|
|
if (log[origin]) {
|
|
let allowedEntry = log[origin].find(
|
|
entry =>
|
|
entry[0] == Ci.nsIWebProgressListener.STATE_ALLOWED_TRACKING_CONTENT
|
|
);
|
|
ok(allowedEntry, "Entry has the STATE_ALLOWED_TRACKING_CONTENT flag");
|
|
if (allowedEntry) {
|
|
is(allowedEntry[1], false, "Entry is not marked as blocked (allowed)");
|
|
}
|
|
}
|
|
|
|
BrowserTestUtils.removeTab(tab);
|
|
});
|
|
|
|
add_task(async function test_allowlist_skips_blocking() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["privacy.trackingprotection.content.testing", true],
|
|
["privacy.trackingprotection.content.protection.enabled", true],
|
|
[
|
|
"privacy.trackingprotection.content.protection.test_list_urls",
|
|
BLOCK_LIST_URL,
|
|
],
|
|
["privacy.trackingprotection.content.annotation.enabled", false],
|
|
["privacy.trackingprotection.content.annotation.test_list_urls", ""],
|
|
],
|
|
});
|
|
|
|
// Put the top-level page's site on the content blocking allow list. The
|
|
// resulting cookieJarSettings is inherited by all subresource channels, so
|
|
// IsAllowListed returns true for the third-party image below.
|
|
let topLevelOrigin = TEST_DOMAIN.replace(/\/$/, "");
|
|
await SpecialPowers.addPermission(
|
|
"trackingprotection",
|
|
Services.perms.ALLOW_ACTION,
|
|
{ url: topLevelOrigin }
|
|
);
|
|
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(
|
|
gBrowser,
|
|
TEST_TOP_PAGE
|
|
);
|
|
let browser = tab.linkedBrowser;
|
|
|
|
let imageURL =
|
|
TEST_BLOCKED_3RD_PARTY_DOMAIN +
|
|
"browser/toolkit/components/antitracking/test/browser/raptor.jpg?" +
|
|
Math.random();
|
|
|
|
info("Loading image from " + imageURL);
|
|
let loaded = await SpecialPowers.spawn(browser, [imageURL], async url => {
|
|
let img = new content.Image();
|
|
img.src = url;
|
|
return new content.Promise(resolve => {
|
|
img.onload = () => resolve(true);
|
|
img.onerror = () => resolve(false);
|
|
});
|
|
});
|
|
ok(
|
|
loaded,
|
|
"Third-party image should load when the top-level page is on the " +
|
|
"content blocking allow list"
|
|
);
|
|
|
|
let log = JSON.parse(await browser.getContentBlockingLog());
|
|
let origin = TEST_BLOCKED_3RD_PARTY_DOMAIN.replace(/\/$/, "");
|
|
if (log[origin]) {
|
|
let blockedEntry = log[origin].find(
|
|
entry =>
|
|
entry[0] == Ci.nsIWebProgressListener.STATE_BLOCKED_TRACKING_CONTENT
|
|
);
|
|
ok(
|
|
!blockedEntry,
|
|
"No STATE_BLOCKED_TRACKING_CONTENT entry should be logged for " +
|
|
"allowlisted channels"
|
|
);
|
|
}
|
|
|
|
BrowserTestUtils.removeTab(tab);
|
|
await SpecialPowers.removePermission("trackingprotection", {
|
|
url: topLevelOrigin,
|
|
});
|
|
});
|
|
|
|
add_task(async function test_annotation() {
|
|
let listsLoaded = TestUtils.topicObserved(LISTS_LOADED_TOPIC);
|
|
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["privacy.trackingprotection.content.testing", true],
|
|
["privacy.trackingprotection.content.protection.enabled", false],
|
|
["privacy.trackingprotection.content.protection.test_list_urls", ""],
|
|
["privacy.trackingprotection.content.annotation.enabled", true],
|
|
[
|
|
"privacy.trackingprotection.content.annotation.test_list_urls",
|
|
ANNOTATE_LIST_URL,
|
|
],
|
|
],
|
|
});
|
|
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(
|
|
gBrowser,
|
|
TEST_TOP_PAGE
|
|
);
|
|
let browser = tab.linkedBrowser;
|
|
|
|
await listsLoaded;
|
|
BrowserTestUtils.startLoadingURIString(browser, TEST_TOP_PAGE);
|
|
await BrowserTestUtils.browserLoaded(browser);
|
|
|
|
let imageURL =
|
|
TEST_ANNOTATED_3RD_PARTY_DOMAIN +
|
|
"browser/toolkit/components/antitracking/test/browser/raptor.jpg?" +
|
|
Math.random();
|
|
|
|
let loaded = await SpecialPowers.spawn(browser, [imageURL], async url => {
|
|
let img = new content.Image();
|
|
img.src = url;
|
|
return new content.Promise(resolve => {
|
|
img.onload = () => resolve(true);
|
|
img.onerror = () => resolve(false);
|
|
});
|
|
});
|
|
ok(loaded, "Third-party image from example.org should NOT be blocked");
|
|
|
|
let log = JSON.parse(await browser.getContentBlockingLog());
|
|
let origin = TEST_ANNOTATED_3RD_PARTY_DOMAIN.replace(/\/$/, "");
|
|
ok(log[origin], "Content blocking log has annotation entry for " + origin);
|
|
if (log[origin]) {
|
|
is(
|
|
log[origin][0][0],
|
|
Ci.nsIWebProgressListener.STATE_LOADED_LEVEL_2_TRACKING_CONTENT,
|
|
"Entry has the STATE_LOADED_LEVEL_2_TRACKING_CONTENT flag"
|
|
);
|
|
is(log[origin][0][1], true, "Entry is marked as loaded");
|
|
}
|
|
|
|
BrowserTestUtils.removeTab(tab);
|
|
});
|