<?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>