Bug 1476324 - Storage activation via window.open(URL) applies across top-level domains - part 2 - tests, r=ehsan

This commit is contained in:
Andrea Marchesini 2018-07-18 15:44:55 +02:00
parent e9d8f213e0
commit 7e0d9ec5c0
3 changed files with 138 additions and 0 deletions

View File

@ -20,3 +20,5 @@ support-files = server.sjs
support-files = image.sjs
[browser_subResources.js]
support-files = subResources.sjs
[browser_script.js]
support-files = tracker.js

View File

@ -0,0 +1,131 @@
ChromeUtils.import("resource://gre/modules/Services.jsm");
add_task(async function() {
info("Starting subResources test");
await SpecialPowers.flushPrefEnv();
await SpecialPowers.pushPrefEnv({"set": [
["privacy.restrict3rdpartystorage.enabled", true],
["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");
await ContentTask.spawn(browser, { scriptURL: TEST_DOMAIN + TEST_PATH + "tracker.js",
page: TEST_3RD_PARTY_PAGE,
}, async obj => {
info("Checking if permission is denied");
let callbackBlocked = async _ => {
try {
localStorage.foo = 42;
ok(false, "LocalStorage cannot be used!");
} catch (e) {
ok(true, "LocalStorage cannot be used!");
is(e.name, "SecurityError", "We want a security error message.");
}
};
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(callbackBlocked.toString(), "*");
};
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("Triggering a 3rd party script...");
let p = new content.Promise(resolve => {
let bc = new content.BroadcastChannel("a");
bc.onmessage = resolve;
});
let src = content.document.createElement("script");
content.document.body.appendChild(src);
src.src = obj.scriptURL;
await p;
info("Checking if permission is granted");
let callbackAllowed = async _ => {
localStorage.foo = 42;
ok(true, "LocalStorage can be used!");
};
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(callbackAllowed.toString(), "*");
};
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("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());
});
});

View File

@ -0,0 +1,5 @@
window.addEventListener("message", e => {
let bc = new BroadcastChannel("a");
bc.postMessage("ready!");
});
window.open("https://tracking.example.com/browser/toolkit/components/antitracking/test/browser/3rdPartyOpen.html");