async function getBrowsingContextId(browser, id) { return SpecialPowers.spawn(browser, [id], async function (id) {
let contextId = content.window.docShell.browsingContext.id;
let frames = [content.window]; while (frames.length) {
let frame = frames.pop();
let target = frame.document.getElementById(id); if (target) {
contextId = target.docShell.browsingContext.id; break;
}
async function removeFrame(browser, id) { return SpecialPowers.spawn(browser, [id], async function (id) {
let frames = [content.window]; while (frames.length) {
let frame = frames.pop();
let target = frame.document.getElementById(id); if (target) {
target.remove(); break;
}
add_task(async function () { // If Fission is disabled, the pref is no-op.
await SpecialPowers.pushPrefEnv({ set: [["fission.bfcacheInParent", true]] });
await BrowserTestUtils.withNewTab(
{
gBrowser,
url:
getRootDirectory(gTestPath).replace( "chrome://mochitests/content", // eslint-disable-next-line @microsoft/sdl/no-insecure-url "http://example.com"
) + "dummy_page.html",
},
async function (browser) {
let path = getRootDirectory(gTestPath).replace( "chrome://mochitests/content", // eslint-disable-next-line @microsoft/sdl/no-insecure-url "http://example.com"
);
await SpecialPowers.spawn(browser, [path], async function (path) { var bc = new content.BroadcastChannel("browser_browsingContext"); function waitForMessage(command) {
let p = new Promise(resolve => {
bc.addEventListener("message", e => resolve(e), { once: true });
});
command(); return p;
}
// Open a new window and wait for the message.
let e1 = await waitForMessage(_ =>
content.window.open(path + "onpageshow_message.html", "", "noopener")
);
is(e1.data, "pageshow", "Got page show");
let e2 = await waitForMessage(_ => bc.postMessage("createiframe"));
is(e2.data.framesLength, 1, "Here we should have an iframe");
let e3 = await waitForMessage(_ => bc.postMessage("nextpage"));
is(e3.data.event, "load");
is(e3.data.framesLength, 0, "Here there shouldn't be an iframe");
// Return to the previous document. N.B. we expect to trigger // BFCache here, hence we wait for pageshow.
let e4 = await waitForMessage(_ => bc.postMessage("back"));
is(e4.data, "pageshow");
let e5 = await waitForMessage(_ => bc.postMessage("queryframes"));
is(e5.data.framesLength, 1, "And again there should be an iframe");
let e6 = await waitForMessage(_ => bc.postMessage("close"));
is(e6.data, "closed");
bc.close();
});
}
);
});
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.18Bemerkung:
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.