1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
<?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>
|