<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin" type="text/css"?> <window id="298622Test" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" width="600" height="600" onload="setTimeout(runTest, 0);" title="bug 298622 test"> <script type="application/javascript" src= "chrome://mochikit/content/chrome-harness.js" /> <script type="application/javascript" src= "docshell_helpers.js" /> <script type="application/javascript"><![CDATA[ // Global variable that holds a reference to the find bar. var gFindBar; //// // Test for bug 298622: // Find should work correctly on a page loaded from the // bfcache. // async function runTest() { // Make sure bfcache is on. enableBFCache(true); // Load a test page which contains some text to be found. await promisePageNavigation({ uri: "data:text/html,<html><head><title>test1</title></head>" + "<body>find this!</body></html>", }); // Load a second, dummy page, verifying that the original // page gets stored in the bfcache. await promisePageNavigation({ uri: getHttpUrl("generic.html"), eventsToListenFor: ["pageshow", "pagehide"], expectedEvents: [ { type: "pagehide", title: "test1", persisted: true }, { type: "pageshow", title: "generic page" } ], }); // Make sure we unsuppress painting before continuing await new Promise(resolve => { SimpleTest.executeSoon(resolve); }); // Search for some text that's on the second page (but not on // the first page), and verify that it can be found. gFindBar = document.getElementById("FindToolbar"); document.getElementById("cmd_find").doCommand(); ok(!gFindBar.hidden, "failed to open findbar"); gFindBar._findField.value = "A generic page"; gFindBar._find(); await new Promise(resolve => { SimpleTest.executeSoon(resolve); }); // Make sure Find bar's internal status is not 'notfound' isnot(gFindBar._findField.getAttribute("status"), "notfound", "Findfield status attribute should not have been 'notfound'" + " after Find"); // Make sure the key events above have time to be processed // before continuing await promiseTrue(() => SpecialPowers.spawn(document.getElementById("content"), [], function() { return content.document.getSelection().toString().toLowerCase() == "a generic page"; }), 20 ); is(gFindBar._findField.value, "A generic page", "expected text not present in find input field"); is(await SpecialPowers.spawn(document.getElementById("content"), [], async function() { return content.document.getSelection().toString().toLowerCase(); }), "a generic page", "find failed on second page loaded"); // Go back to the original page and verify it's loaded from the // bfcache. await promisePageNavigation({ back: true, eventsToListenFor: ["pageshow"], expectedEvents: [ { type: "pageshow", title: "test1", persisted: true } ], }); // Search for some text that's on the original page (but not // the dummy page loaded above), and verify that it can // be found. gFindBar = document.getElementById("FindToolbar"); document.getElementById("cmd_find").doCommand(); ok(!gFindBar.hidden, "failed to open findbar"); gFindBar._findField.value = "find this"; gFindBar._find(); await new Promise(resolve => { SimpleTest.executeSoon(resolve); }); // Make sure Find bar's internal status is not 'notfound' isnot(gFindBar._findField.getAttribute("status"), "notfound", "Findfield status attribute should not have been 'notfound'" + " after Find"); // Make sure the key events above have time to be processed // before continuing await promiseTrue(() => SpecialPowers.spawn(document.getElementById("content"), [], function() { return content.document.getSelection().toString().toLowerCase() == "find this"; }), 20 ); is(await SpecialPowers.spawn(document.getElementById("content"), [], async function() { return content.document.getSelection().toString().toLowerCase(); }), "find this", "find failed on page loaded from bfcache"); // Tell the framework the test is finished. finish(); } ]]></script> <commandset> <command id="cmd_find" oncommand="document.getElementById('FindToolbar').onFindCommand();"/> </commandset> <browser type="content" primary="true" flex="1" id="content" messagemanagergroup="test" remote="true" maychangeremoteness="true" /> <findbar id="FindToolbar" browserid="content"/> </window>