<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin" type="text/css"?> <window id="396649Test" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" width="600" height="600" onload="setTimeout(nextTest,0);" title="bug 396649 test"> <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/specialpowersAPI.js"/> <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SpecialPowersObserverAPI.js"/> <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/ChromePowers.js"/> <script type="application/javascript" src= "chrome://mochikit/content/chrome-harness.js" /> <script type="application/javascript" src="docshell_helpers.js" /> <script type="application/javascript"><![CDATA[ // Define the generator-iterator for the tests. var tests = testIterator(); // Maximum number of entries in the bfcache for this session history. // This number is hardcoded in docshell code. In the test, we'll // navigate through enough pages so that we hit one that's been // evicted from the bfcache because it's farther from the current // page than this number. const MAX_BFCACHE_PAGES = 3; //// // Execute the next test in the generator function. // function nextTest() { tests.next(); } //// // Generator function for test steps for bug 396649: Content // viewers should be evicted from bfcache when going back if more // than MAX_BFCACHE_PAGES from the current index. // function testIterator() { // Make sure bfcache is on. enableBFCache(true); // Load enough pages so that the first loaded is eviced from // the bfcache, since it is greater the MAX_BFCACHE_PAGES from // the current position in the session history. Verify all // of the pages are initially stored in the bfcache when // they're unloaded. for (var i = 0; i <= MAX_BFCACHE_PAGES + 1; i++) { doPageNavigation( { uri: "data:text/html,<!DOCTYPE html><html>" + "<head><title>bug396649 page" + i + "</title></head>" + "<body>" + "test page " + i + "</body></html>", eventsToListenFor: ["pageshow", "pagehide"], expectedEvents: [ { type: "pagehide", title: i == 0 ? undefined : "bug396649 page" + (i-1), persisted: true }, { type: "pageshow", title: "bug396649 page" + i } ], onNavComplete: nextTest } ); yield undefined; } // Go back to the first page, one page at a time. The first // MAX_BFCACHE_PAGES pages loaded via back should come from the bfcache, // the last should not, since it should have been evicted during the // previous navigation sequence. Verify all pages are initially stored // in the bfcache when they're unloaded. for (i = MAX_BFCACHE_PAGES + 1; i > 0; i--) { doPageNavigation( { back: true, eventsToListenFor: ["pageshow", "pagehide"], expectedEvents: [ { type: "pagehide", title: "bug396649 page" + i, persisted: true }, { type: "pageshow", title: "bug396649 page" + (i - 1), persisted: i > 1 } ], onNavComplete: nextTest } ); yield undefined; } // Traverse history forward now. Again, the first MAX_BFCACHE_PAGES // pages should come from the bfcache, the last should not, // since it should have been evicted during the backwards // traversal above. Verify all pages are initially stored // in the bfcache when they're unloaded. for (i = 1; i <= MAX_BFCACHE_PAGES + 1; i++) { doPageNavigation( { forward: true, eventsToListenFor: ["pageshow", "pagehide"], expectedEvents: [ { type: "pagehide", title: "bug396649 page" + (i-1), persisted: true }, { type: "pageshow", title: "bug396649 page" + i, persisted: i < MAX_BFCACHE_PAGES + 1 } ], onNavComplete: nextTest } ); yield undefined; } // Tell the framework the test is finished. Include the final 'yield' // statement to prevent a StopIteration exception from being thrown. finish(); yield undefined; } ]]></script> <browser type="content-primary" flex="1" id="content" src="about:blank"/> </window>