Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- Manifest: dom/serviceworkers/test/browser-dFPI.toml includes dom/serviceworkers/test/browser-common.toml
- Manifest: dom/serviceworkers/test/browser.toml includes dom/serviceworkers/test/browser-common.toml
const BEHAVIOR_REJECT_TRACKER = Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER;
const TOP_TEST_ROOT = getRootDirectory(gTestPath).replace(
TOP_DOMAIN
);
const SW_TEST_ROOT = getRootDirectory(gTestPath).replace(
SW_DOMAIN
);
const TOP_EMPTY_PAGE = `${TOP_TEST_ROOT}empty_with_utils.html`;
const SW_REGISTER_PAGE = `${SW_TEST_ROOT}empty_with_utils.html`;
const SW_IFRAME_PAGE = `${SW_TEST_ROOT}page_post_controlled.html`;
const SW_REL_SW_SCRIPT = "empty.js";
/**
* Set up a ServiceWorker on a domain that will be used as 3rd party iframe.
* That 3rd party frame should be controlled by the ServiceWorker.
* After that, we open a second iframe into the first one. That should not be
* controlled.
*/
add_task(async function () {
await SpecialPowers.pushPrefEnv({
set: [
["dom.serviceWorkers.enabled", true],
["dom.serviceWorkers.exemptFromPerDomainMax", true],
["dom.serviceWorkers.testing.enabled", true],
["network.cookie.cookieBehavior", BEHAVIOR_REJECT_TRACKER],
],
});
// Open the top-level page.
info("Opening a new tab: " + SW_REGISTER_PAGE);
let topTab = await BrowserTestUtils.openNewForegroundTab({
gBrowser,
opening: SW_REGISTER_PAGE,
});
// Install SW
info("Registering a SW: " + SW_REL_SW_SCRIPT);
await SpecialPowers.spawn(
topTab.linkedBrowser,
[{ sw: SW_REL_SW_SCRIPT }],
async function ({ sw }) {
// Waive the xray to use the content utils.js script functions.
await content.wrappedJSObject.registerAndWaitForActive(sw);
// User interaction
content.document.userInteractionForTesting();
}
);
info("Loading a new top-level URL: " + TOP_EMPTY_PAGE);
let browserLoadedPromise = BrowserTestUtils.browserLoaded(
topTab.linkedBrowser
);
BrowserTestUtils.startLoadingURIString(topTab.linkedBrowser, TOP_EMPTY_PAGE);
await browserLoadedPromise;
// Create Iframe in the top-level page and verify its state.
info("Creating iframe and checking if controlled");
let { controlled } = await SpecialPowers.spawn(
topTab.linkedBrowser,
[{ url: SW_IFRAME_PAGE }],
async function ({ url }) {
content.document.userInteractionForTesting();
const payload =
await content.wrappedJSObject.createIframeAndWaitForMessage(url);
return payload;
}
);
ok(controlled, "Should be controlled!");
// Create a nested Iframe.
info("Creating nested-iframe and checking if controlled");
let { nested_controlled } = await SpecialPowers.spawn(
topTab.linkedBrowser,
[{ url: SW_IFRAME_PAGE }],
async function ({ url }) {
const payload =
await content.wrappedJSObject.createNestedIframeAndWaitForMessage(url);
return payload;
}
);
ok(!nested_controlled, "Should not be controlled!");
info("Loading the SW unregister page: " + SW_REGISTER_PAGE);
browserLoadedPromise = BrowserTestUtils.browserLoaded(topTab.linkedBrowser);
BrowserTestUtils.startLoadingURIString(
topTab.linkedBrowser,
SW_REGISTER_PAGE
);
await browserLoadedPromise;
await SpecialPowers.spawn(topTab.linkedBrowser, [], async function () {
await content.wrappedJSObject.unregisterAll();
});
// Close the testing tab.
BrowserTestUtils.removeTab(topTab);
});