// Our current tab should still be active
ok(ctx.tab0Browser.docShellIsActive, "Tab 0 should still be active");
ok(!ctx.tab1Browser.docShellIsActive, "Tab 1 should not be active");
// Switch to tab 1
await BrowserTestUtils.switchTab(gBrowser, ctx.tab1);
// Tab 1 should now be active
ok(!ctx.tab0Browser.docShellIsActive, "Tab 0 should be inactive");
ok(ctx.tab1Browser.docShellIsActive, "Tab 1 should be active");
// Open another tab
ctx.tab2 = BrowserTestUtils.addTab(gBrowser, testPath + "bug343515_pg2.html");
ctx.tab2Browser = gBrowser.getBrowserForTab(ctx.tab2);
// Tab 0 should be inactive, Tab 1 should be active
ok(!ctx.tab0Browser.docShellIsActive, "Tab 0 should be inactive");
ok(ctx.tab1Browser.docShellIsActive, "Tab 1 should be active");
// Tab 2's window _and_ its iframes should be inactive
ok(!ctx.tab2Browser.docShellIsActive, "Tab 2 should be inactive");
await SpecialPowers.spawn(ctx.tab2Browser, [], async function () { Assert.equal(content.frames.length, 2, "Tab 2 should have 2 iframes"); for (var i = 0; i < content.frames.length; i++) {
info("step 3, frame " + i + " info: " + content.frames[i].location);
let bc = content.frames[i].browsingContext; Assert.ok(!bc.isActive, `Tab2 iframe ${i} should be inactive`);
}
});
// Navigate tab 2 to a different page
BrowserTestUtils.startLoadingURIString(
ctx.tab2Browser,
testPath + "bug343515_pg3.html"
);
// Tab 0 should be inactive, Tab 1 should be active
ok(!ctx.tab0Browser.docShellIsActive, "Tab 0 should be inactive");
ok(ctx.tab1Browser.docShellIsActive, "Tab 1 should be active");
// Tab2 and all descendants should be inactive
await checkTab2Active(false);
// Switch to Tab 2
await BrowserTestUtils.switchTab(gBrowser, ctx.tab2);
// Check everything
ok(!ctx.tab0Browser.docShellIsActive, "Tab 0 should be inactive");
ok(!ctx.tab1Browser.docShellIsActive, "Tab 1 should be inactive");
ok(ctx.tab2Browser.docShellIsActive, "Tab 2 should be active");
await checkTab2Active(true);
// Go back
let backDone = BrowserTestUtils.waitForLocationChange(
gBrowser,
testPath + "bug343515_pg2.html"
);
ctx.tab2Browser.goBack();
await backDone;
// Step 5.
// Check everything
ok(!ctx.tab0Browser.docShellIsActive, "Tab 0 should be inactive");
ok(!ctx.tab1Browser.docShellIsActive, "Tab 1 should be inactive");
ok(ctx.tab2Browser.docShellIsActive, "Tab 2 should be active");
is(
testPath + "bug343515_pg2.html",
ctx.tab2Browser.currentURI.spec, "Got expected tab 2 url in step 5"
);
await SpecialPowers.spawn(ctx.tab2Browser, [], async function () { for (var i = 0; i < content.frames.length; i++) {
let bc = content.frames[i].browsingContext; Assert.ok(bc.isActive, `Tab2 iframe ${i} should be active`);
}
});
// Switch to tab 1
await BrowserTestUtils.switchTab(gBrowser, ctx.tab1);
// Check everything
ok(!ctx.tab0Browser.docShellIsActive, "Tab 0 should be inactive");
ok(ctx.tab1Browser.docShellIsActive, "Tab 1 should be active");
is(
testPath + "bug343515_pg3.html",
ctx.tab1Browser.currentURI.spec, "Got expected tab 1 url in step 6"
);
await SpecialPowers.spawn(ctx.tab1Browser, [], async function () { function isActive(aWindow) { var docshell = aWindow.docShell;
info(`checking ${docshell.browsingContext.id}`); return docshell.browsingContext.isActive;
}
Assert.ok(isActive(content.frames[0]), "Tab1 iframe 0 should be active"); Assert.ok(
isActive(content.frames[0].frames[0]), "Tab1 iframe 0 subiframe 0 should be active"
); Assert.ok(isActive(content.frames[1]), "Tab1 iframe 1 should be active");
});
ok(!ctx.tab2Browser.docShellIsActive, "Tab 2 should be inactive");
await SpecialPowers.spawn(ctx.tab2Browser, [], async function () { for (var i = 0; i < content.frames.length; i++) {
let bc = content.frames[i].browsingContext; Assert.ok(!bc.isActive, `Tab2 iframe ${i} should be inactive`);
}
});
// Go forward on tab 2
let forwardDone = BrowserTestUtils.waitForLocationChange(
gBrowser,
testPath + "bug343515_pg3.html"
);
ctx.tab2Browser.goForward();
await forwardDone;
// Step 7.
async function checkBrowser(browser, outerTabNum, outerActive) {
let data = { tabNum: outerTabNum, active: outerActive };
await SpecialPowers.spawn(
browser,
[data],
async function ({ tabNum, active }) { function isActive(aWindow) { var docshell = aWindow.docShell;
info(`checking ${docshell.browsingContext.id}`); return docshell.browsingContext.isActive;
}
let activestr = active ? "active" : "inactive"; Assert.equal(
isActive(content.frames[0]),
active,
`Tab${tabNum} iframe 0 should be ${activestr}`
); Assert.equal(
isActive(content.frames[0].frames[0]),
active,
`Tab${tabNum} iframe 0 subiframe 0 should be ${activestr}`
); Assert.equal(
isActive(content.frames[1]),
active,
`Tab${tabNum} iframe 1 should be ${activestr}`
);
}
);
}
// Check everything
ok(!ctx.tab0Browser.docShellIsActive, "Tab 0 should be inactive");
ok(ctx.tab1Browser.docShellIsActive, "Tab 1 should be active");
is(
testPath + "bug343515_pg3.html",
ctx.tab2Browser.currentURI.spec, "Got expected tab 2 url in step 7"
);
await checkBrowser(ctx.tab1Browser, 1, true);
ok(!ctx.tab2Browser.docShellIsActive, "Tab 2 should be inactive");
await checkBrowser(ctx.tab2Browser, 2, false);
// Close the tabs we made
BrowserTestUtils.removeTab(ctx.tab1);
BrowserTestUtils.removeTab(ctx.tab2);
});
¤ Dauer der Verarbeitung: 0.18 Sekunden
(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.