fune/toolkit/components/antitracking/test/browser/browser_subResources.js
Ehsan Akhgari e3601d2177 Bug 1486092 - Part 3: Add tests to ensure that the reject tracker cookie behavior also depends on the browser.contentblocking.enabled pref; r=baku
The antitracking test mini-framework is extended to run the non-blocking
callback of the tests three times, each time with a unique combination
of the network.cookie.cookieBehavior and browser.contentblocking.enabled
prefs that would cause the reject tracker cookie behavior feature to get
disabled.  This works seamlessly for all test cases that do not make any
assumptions around how many times their callbacks are executed.

Note that browser_imageCache.js depends on the number of times its
non-blocking callback gets executed.  As a result of this, this test
is split into three tests to test the three possible combinations of
the pref for the non-blocking callback.
2018-08-27 09:22:01 -04:00

169 lines
6.2 KiB
JavaScript

ChromeUtils.import("resource://gre/modules/Services.jsm");
add_task(async function() {
info("Starting subResources test");
await SpecialPowers.flushPrefEnv();
await SpecialPowers.pushPrefEnv({"set": [
["browser.contentblocking.enabled", true],
["network.cookie.cookieBehavior", Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER],
["privacy.trackingprotection.enabled", false],
["privacy.trackingprotection.pbmode.enabled", false],
["privacy.trackingprotection.annotate_channels", true],
]});
await UrlClassifierTestUtils.addTestTrackers();
info("Creating a new tab");
let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE);
gBrowser.selectedTab = tab;
let browser = gBrowser.getBrowserForTab(tab);
await BrowserTestUtils.browserLoaded(browser);
info("Loading tracking scripts and tracking images");
await ContentTask.spawn(browser, null, async function() {
// Let's load the script twice here.
{
let src = content.document.createElement("script");
let p = new content.Promise(resolve => { src.onload = resolve; });
content.document.body.appendChild(src);
src.src = "https://tracking.example.org/browser/toolkit/components/antitracking/test/browser/subResources.sjs?what=script";
await p;
}
{
let src = content.document.createElement("script");
let p = new content.Promise(resolve => { src.onload = resolve; });
content.document.body.appendChild(src);
src.src = "https://tracking.example.org/browser/toolkit/components/antitracking/test/browser/subResources.sjs?what=script";
await p;
}
// Let's load an image twice here.
{
let img = content.document.createElement("img");
let p = new content.Promise(resolve => { img.onload = resolve; });
content.document.body.appendChild(img);
img.src = "https://tracking.example.org/browser/toolkit/components/antitracking/test/browser/subResources.sjs?what=image";
await p;
}
{
let img = content.document.createElement("img");
let p = new content.Promise(resolve => { img.onload = resolve; });
content.document.body.appendChild(img);
img.src = "https://tracking.example.org/browser/toolkit/components/antitracking/test/browser/subResources.sjs?what=image";
await p;
}
});
await fetch("https://tracking.example.org/browser/toolkit/components/antitracking/test/browser/subResources.sjs?result&what=image")
.then(r => r.text())
.then(text => {
is(text, 0, "Cookies received for images");
});
await fetch("https://tracking.example.org/browser/toolkit/components/antitracking/test/browser/subResources.sjs?result&what=script")
.then(r => r.text())
.then(text => {
is(text, 0, "Cookies received for scripts");
});
info("Creating a 3rd party content");
await ContentTask.spawn(browser,
{ page: TEST_3RD_PARTY_PAGE_WO,
blockingCallback: (async _ => {}).toString(),
nonBlockingCallback: (async _ => {}).toString(),
},
async function(obj) {
await new content.Promise(resolve => {
let ifr = content.document.createElement("iframe");
ifr.onload = function() {
info("Sending code to the 3rd party content");
ifr.contentWindow.postMessage(obj, "*");
};
content.addEventListener("message", function msg(event) {
if (event.data.type == "finish") {
content.removeEventListener("message", msg);
resolve();
return;
}
if (event.data.type == "ok") {
ok(event.data.what, event.data.msg);
return;
}
if (event.data.type == "info") {
info(event.data.msg);
return;
}
ok(false, "Unknown message");
});
content.document.body.appendChild(ifr);
ifr.src = obj.page;
});
});
info("Loading tracking scripts and tracking images again");
await ContentTask.spawn(browser, null, async function() {
// Let's load the script twice here.
{
let src = content.document.createElement("script");
let p = new content.Promise(resolve => { src.onload = resolve; });
content.document.body.appendChild(src);
src.src = "https://tracking.example.org/browser/toolkit/components/antitracking/test/browser/subResources.sjs?what=script";
await p;
}
{
let src = content.document.createElement("script");
let p = new content.Promise(resolve => { src.onload = resolve; });
content.document.body.appendChild(src);
src.src = "https://tracking.example.org/browser/toolkit/components/antitracking/test/browser/subResources.sjs?what=script";
await p;
}
// Let's load an image twice here.
{
let img = content.document.createElement("img");
let p = new content.Promise(resolve => { img.onload = resolve; });
content.document.body.appendChild(img);
img.src = "https://tracking.example.org/browser/toolkit/components/antitracking/test/browser/subResources.sjs?what=image";
await p;
}
{
let img = content.document.createElement("img");
let p = new content.Promise(resolve => { img.onload = resolve; });
content.document.body.appendChild(img);
img.src = "https://tracking.example.org/browser/toolkit/components/antitracking/test/browser/subResources.sjs?what=image";
await p;
}
});
await fetch("https://tracking.example.org/browser/toolkit/components/antitracking/test/browser/subResources.sjs?result&what=image")
.then(r => r.text())
.then(text => {
is(text, 1, "One cookie received for images.");
});
await fetch("https://tracking.example.org/browser/toolkit/components/antitracking/test/browser/subResources.sjs?result&what=script")
.then(r => r.text())
.then(text => {
is(text, 1, "One cookie received received for scripts.");
});
info("Removing the tab");
BrowserTestUtils.removeTab(tab);
UrlClassifierTestUtils.cleanupTestTrackers();
});
add_task(async function() {
info("Cleaning up.");
await new Promise(resolve => {
Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, value => resolve());
});
});