diff options
Diffstat (limited to 'docshell/test/chrome/test_bug608669.xul')
-rw-r--r-- | docshell/test/chrome/test_bug608669.xul | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/docshell/test/chrome/test_bug608669.xul b/docshell/test/chrome/test_bug608669.xul new file mode 100644 index 000000000..51d6a3b7d --- /dev/null +++ b/docshell/test/chrome/test_bug608669.xul @@ -0,0 +1,117 @@ +<?xml version="1.0"?> +<?xml-stylesheet href="chrome://global/skin" type="text/css"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=608669 +--> +<window title="Mozilla Bug 608669" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + + <!-- test results are displayed in the html:body --> + <body xmlns="http://www.w3.org/1999/xhtml"> + <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=608669" + target="_blank">Mozilla Bug 608669</a> + </body> + + <!-- test code goes here --> + <script type="application/javascript"><![CDATA[ + +var gOrigMaxTotalViewers = undefined; +function setCachePref(enabled) { + var prefBranch = Components.classes["@mozilla.org/preferences-service;1"] + .getService(Components.interfaces.nsIPrefBranch); + if (enabled) { + is(typeof gOrigMaxTotalViewers, "undefined", "don't double-enable bfcache"); + prefBranch.setBoolPref("browser.sessionhistory.cache_subframes", true); + gOrigMaxTotalViewers = prefBranch.getIntPref("browser.sessionhistory.max_total_viewers"); + prefBranch.setIntPref("browser.sessionhistory.max_total_viewers", 10); + } + else { + is(typeof gOrigMaxTotalViewers, "number", "don't double-disable bfcache"); + prefBranch.setIntPref("browser.sessionhistory.max_total_viewers", gOrigMaxTotalViewers); + gOrigMaxTotalViewers = undefined; + try { + prefBranch.clearUserPref("browser.sessionhistory.cache_subframes"); + } catch (e) { /* Pref didn't exist, meh */ } + } +} + + +/** Test for Bug 608669 **/ +SimpleTest.waitForExplicitFinish(); + +addLoadEvent(nextTest); + +gen = doTest(); + +function nextTest() { + gen.next(); +} + +function doTest() { + var container = document.getElementById('container'); + + setCachePref(true); + + var notificationCount = 0; + var observer = { + observe: function(aSubject, aTopic, aData) { + is(aTopic, "chrome-document-global-created", + "correct topic"); + is(aData, "null", + "correct data"); + notificationCount++; + } + }; + + var os = Components.classes["@mozilla.org/observer-service;1"]. + getService(Components.interfaces.nsIObserverService); + os.addObserver(observer, "chrome-document-global-created", false); + os.addObserver(observer, "content-document-global-created", false); + + is(notificationCount, 0, "initial count"); + + // create a new iframe + var iframe = document.createElement("iframe"); + container.appendChild(iframe); + iframe.contentWindow.x = "y"; + is(notificationCount, 1, "after created iframe"); + + // Try loading in an iframe + iframe.setAttribute("src", "bug608669.xul"); + iframe.onload = nextTest; + yield undefined; + is(notificationCount, 1, "after first load"); + is(iframe.contentWindow.x, "y", "reused window"); + + // Try loading again in an iframe + iframe.setAttribute("src", "bug608669.xul?x"); + iframe.onload = nextTest; + yield undefined; + is(notificationCount, 2, "after second load"); + is("x" in iframe.contentWindow, false, "didn't reuse window"); + + // Open a new window using window.open + popup = window.open("bug608669.xul", "bug 608669", + "chrome,width=600,height=600"); + popup.onload = nextTest; + yield undefined; + is(notificationCount, 3, "after window.open load"); + popup.close(); + + setCachePref(false); + os.removeObserver(observer, "chrome-document-global-created"); + os.removeObserver(observer, "content-document-global-created"); + SimpleTest.finish(); + yield undefined; +} + + + + ]]></script> + <vbox id="container" flex="1"> + <description>Below will an iframe be added</description> + </vbox> +</window> |