summaryrefslogtreecommitdiffstats
path: root/docshell/test/chrome/bug298622_window.xhtml
blob: 38abf3510703988a3afe40a03fd8d9b9b93afb79 (plain)
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>