mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-26 12:20:56 +00:00
Bug 1328501 - Part 2: Add test case. r=smaug
MozReview-Commit-ID: HpsK5HeHRO0 --HG-- extra : rebase_source : d6896ddcb938c377a9e0ca26c70782cf974dad3e
This commit is contained in:
parent
33a5d73d1a
commit
6ee7658d7e
@ -36,6 +36,9 @@ support-files =
|
||||
file_bug852909.png
|
||||
file_bug1046022.html
|
||||
file_bug1206879.html
|
||||
file_bug1328501.html
|
||||
file_bug1328501_frame.html
|
||||
file_bug1328501_framescript.js
|
||||
file_multiple_pushState.html
|
||||
print_postdata.sjs
|
||||
test-form_sjis.html
|
||||
@ -50,6 +53,7 @@ support-files =
|
||||
|
||||
[browser_bug1206879.js]
|
||||
[browser_bug1309900_crossProcessHistoryNavigation.js]
|
||||
[browser_bug1328501.js]
|
||||
[browser_bug1347823.js]
|
||||
[browser_bug134911.js]
|
||||
[browser_bug234628-1.js]
|
||||
|
38
docshell/test/browser/browser_bug1328501.js
Normal file
38
docshell/test/browser/browser_bug1328501.js
Normal file
@ -0,0 +1,38 @@
|
||||
const HTML_URL = "http://mochi.test:8888/browser/docshell/test/browser/file_bug1328501.html";
|
||||
const FRAME_URL = "http://mochi.test:8888/browser/docshell/test/browser/file_bug1328501_frame.html";
|
||||
const FRAME_SCRIPT_URL = "chrome://mochitests/content/browser/docshell/test/browser/file_bug1328501_framescript.js";
|
||||
add_task(async function testMultiFrameRestore() {
|
||||
await BrowserTestUtils.withNewTab({gBrowser, url: HTML_URL}, async function(browser) {
|
||||
// Navigate 2 subframes and load about:blank.
|
||||
let browserLoaded = BrowserTestUtils.browserLoaded(browser);
|
||||
await ContentTask.spawn(browser, FRAME_URL, async function(FRAME_URL) {
|
||||
function frameLoaded(frame) {
|
||||
frame.contentWindow.location = FRAME_URL;
|
||||
return new Promise(r => frame.onload = r);
|
||||
}
|
||||
let frame1 = content.document.querySelector("#testFrame1");
|
||||
let frame2 = content.document.querySelector("#testFrame2");
|
||||
ok(frame1, "check found testFrame1");
|
||||
ok(frame2, "check found testFrame2");
|
||||
await frameLoaded(frame1);
|
||||
await frameLoaded(frame2);
|
||||
content.location = "dummy_page.html";
|
||||
});
|
||||
await browserLoaded;
|
||||
|
||||
// Load a frame script to query nsIDOMWindow on "http-on-opening-request",
|
||||
// which will force about:blank content viewers being created.
|
||||
browser.messageManager.loadFrameScript(FRAME_SCRIPT_URL, false);
|
||||
|
||||
// The frame script also forwards frames-loaded.
|
||||
let framesLoaded = BrowserTestUtils.waitForMessage(browser.messageManager, "test:frames-loaded");
|
||||
|
||||
browser.goBack();
|
||||
await framesLoaded;
|
||||
await new Promise(r => setTimeout(r, 1000));
|
||||
await ContentTask.spawn(browser, FRAME_URL, (FRAME_URL) => {
|
||||
is(content.document.querySelector("#testFrame1").contentWindow.location.href, FRAME_URL);
|
||||
is(content.document.querySelector("#testFrame2").contentWindow.location.href, FRAME_URL);
|
||||
})
|
||||
})
|
||||
});
|
27
docshell/test/browser/file_bug1328501.html
Normal file
27
docshell/test/browser/file_bug1328501.html
Normal file
@ -0,0 +1,27 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Page with iframes</title>
|
||||
<script type="application/javascript">
|
||||
let promiseResolvers = {
|
||||
"testFrame1": {},
|
||||
"testFrame2": {}
|
||||
}
|
||||
let promises = [
|
||||
new Promise(r => promiseResolvers["testFrame1"].resolve = r),
|
||||
new Promise(r => promiseResolvers["testFrame2"].resolve = r)
|
||||
];
|
||||
function frameLoaded(frame) {
|
||||
promiseResolvers[frame].resolve();
|
||||
}
|
||||
Promise.all(promises).then(() => window.dispatchEvent(new Event("frames-loaded")));
|
||||
</script>
|
||||
</head>
|
||||
<body onunload="">
|
||||
<div>
|
||||
<iframe id="testFrame1" src="dummy_page.html" onload="frameLoaded(this.id);" ></iframe>
|
||||
<iframe id="testFrame2" src="dummy_page.html" onload="frameLoaded(this.id);" ></iframe>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
4
docshell/test/browser/file_bug1328501_frame.html
Normal file
4
docshell/test/browser/file_bug1328501_frame.html
Normal file
@ -0,0 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<body>Subframe page for testing</body>
|
||||
</html>
|
42
docshell/test/browser/file_bug1328501_framescript.js
Normal file
42
docshell/test/browser/file_bug1328501_framescript.js
Normal file
@ -0,0 +1,42 @@
|
||||
const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
|
||||
|
||||
// Forward iframe loaded event.
|
||||
addEventListener("frames-loaded",
|
||||
e => sendAsyncMessage("test:frames-loaded"), true, true);
|
||||
|
||||
let requestObserver = {
|
||||
observe(subject, topic, data) {
|
||||
if (topic == "http-on-opening-request") {
|
||||
// Get DOMWindow on all child docshells to force about:blank
|
||||
// content viewers being created.
|
||||
getChildDocShells().map(ds => {
|
||||
let window = ds.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsILoadContext)
|
||||
.associatedWindow;
|
||||
});
|
||||
}
|
||||
},
|
||||
QueryInterface: XPCOMUtils.generateQI([
|
||||
Ci.nsIObserver
|
||||
])
|
||||
}
|
||||
Services.obs.addObserver(requestObserver, "http-on-opening-request");
|
||||
addEventListener("unload", e => {
|
||||
if (e.target == this) {
|
||||
Services.obs.removeObserver(requestObserver, "http-on-opening-request");
|
||||
}
|
||||
});
|
||||
|
||||
function getChildDocShells() {
|
||||
let docShellsEnum = docShell.getDocShellEnumerator(
|
||||
Ci.nsIDocShellTreeItem.typeAll,
|
||||
Ci.nsIDocShell.ENUMERATE_FORWARDS
|
||||
);
|
||||
|
||||
let docShells = [];
|
||||
while (docShellsEnum.hasMoreElements()) {
|
||||
let ds = docShellsEnum.getNext();
|
||||
docShells.push(ds);
|
||||
}
|
||||
return docShells;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user