mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-04 11:26:09 +00:00
0b1a146519
ContentTask tasks have a different lifetime than SpecialPowers tasks, with the former being tied to the lifetime of a message manager and the latter tied to the lifetime of a window global. That means that existing ContentTask callers which expect to be able to register load listeners before the creation of a window global, or which expect to persist after a page has navigated, won't work as SpecialPowers tasks. Since those sorts of tasks are not really resilient in the face of Fission, they should really be written to work differently, but this patch mostly just reverts them to using ContentTask for the time being. Differential Revision: https://phabricator.services.mozilla.com/D53744 --HG-- extra : moz-landing-system : lando
63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
// Test for bug 673467. In a new tab, load a page which inserts a new iframe
|
|
// before the load and then sets its location during the load. This should
|
|
// create just one SHEntry.
|
|
|
|
var doc =
|
|
"data:text/html,<html><body onload='load()'>" +
|
|
"<script>" +
|
|
" var iframe = document.createElement('iframe');" +
|
|
" iframe.id = 'iframe';" +
|
|
" document.documentElement.appendChild(iframe);" +
|
|
" function load() {" +
|
|
" iframe.src = 'data:text/html,Hello!';" +
|
|
" }" +
|
|
"</script>" +
|
|
"</body></html>";
|
|
|
|
function test() {
|
|
waitForExplicitFinish();
|
|
|
|
let taskFinished;
|
|
|
|
let tab = BrowserTestUtils.addTab(gBrowser, doc, {}, tab => {
|
|
taskFinished = ContentTask.spawn(tab.linkedBrowser, null, () => {
|
|
return new Promise(resolve => {
|
|
addEventListener(
|
|
"load",
|
|
function() {
|
|
// The main page has loaded. Now wait for the iframe to load.
|
|
let iframe = content.document.getElementById("iframe");
|
|
iframe.addEventListener(
|
|
"load",
|
|
function listener(aEvent) {
|
|
// Wait for the iframe to load the new document, not about:blank.
|
|
if (!iframe.src) {
|
|
return;
|
|
}
|
|
|
|
iframe.removeEventListener("load", listener, true);
|
|
let shistory = content.docShell.QueryInterface(
|
|
Ci.nsIWebNavigation
|
|
).sessionHistory;
|
|
|
|
Assert.equal(shistory.count, 1, "shistory count should be 1.");
|
|
resolve();
|
|
},
|
|
true
|
|
);
|
|
},
|
|
true
|
|
);
|
|
});
|
|
});
|
|
});
|
|
|
|
taskFinished.then(() => {
|
|
gBrowser.removeTab(tab);
|
|
finish();
|
|
});
|
|
}
|