summaryrefslogtreecommitdiffstats
path: root/docshell/test/browser/browser_bug673467.js
diff options
context:
space:
mode:
Diffstat (limited to 'docshell/test/browser/browser_bug673467.js')
-rw-r--r--docshell/test/browser/browser_bug673467.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/docshell/test/browser/browser_bug673467.js b/docshell/test/browser/browser_bug673467.js
new file mode 100644
index 000000000..10139a48c
--- /dev/null
+++ b/docshell/test/browser/browser_bug673467.js
@@ -0,0 +1,51 @@
+/* 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 tab = gBrowser.addTab(doc);
+ let tabBrowser = tab.linkedBrowser;
+
+ BrowserTestUtils.browserLoaded(tab.linkedBrowser).then(() => {
+ return ContentTask.spawn(tab.linkedBrowser, null, () => {
+ return new Promise(resolve => {
+ // 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
+ .QueryInterface(Ci.nsIInterfaceRequestor)
+ .getInterface(Ci.nsIWebNavigation)
+ .sessionHistory;
+
+ Assert.equal(shistory.count, 1, "shistory count should be 1.");
+ resolve();
+ }, true);
+ });
+ });
+ }).then(() => {
+ gBrowser.removeTab(tab);
+ finish();
+ });
+}