summaryrefslogtreecommitdiffstats
path: root/docshell/test/chrome/bug298622_window.xul
blob: 2773f342022e6531f41d0dc281ce834e6abf5ce4 (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
136
137
138
139
140
141
142
143
144
145
146
147
148
<?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(nextTest,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;
  
    // Define the generator-iterator for the tests.
    var tests = testIterator();

    ////
    // Execute the next test in the generator function.
    //
    function nextTest() {
      tests.next();
    }

    ////
    // Generator function for test steps for bug 298622:  
    // Find should work correctly on a page loaded from the
    // bfcache.
    //
    function testIterator()
    {
      // Make sure bfcache is on.
      enableBFCache(true);
      
      // Load a test page which contains some text to be found.
      doPageNavigation({
        uri: "data:text/html,<html><head><title>test1</title></head>" +
             "<body>find this!</body></html>",
        onNavComplete: nextTest
      });
      yield undefined;

      // Load a second, dummy page, verifying that the original
      // page gets stored in the bfcache.
      doPageNavigation({
        uri: getHttpUrl("generic.html"),
        eventsToListenFor: ["pageshow", "pagehide"],
        expectedEvents: [ { type: "pagehide",
                            title: "test1",
                            persisted: true },
                          { type: "pageshow",
                            title: "generic page" } ],
        onNavComplete: nextTest
      });
      yield undefined;

      // Make sure we unsuppress painting before continuing
      SimpleTest.executeSoon(nextTest);
      yield undefined;

      // 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();
      SimpleTest.executeSoon(nextTest);
      yield undefined;

      // 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
      waitForTrue(function() {
        return (
          TestWindow.getWindow().getSelection().toString().toLowerCase() == 
          "a generic page");
      }, nextTest, 20);
      yield undefined;

      is(gFindBar._findField.inputField.value, "A generic page",
        "expected text not present in find input field");
      is(TestWindow.getWindow().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.
      doPageNavigation({
        back: true,
        eventsToListenFor: ["pageshow"],
        expectedEvents: [ { type: "pageshow",
                            title: "test1",
                            persisted: true } ],
        onNavComplete: nextTest
      });
      yield undefined;

      // 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();
      SimpleTest.executeSoon(nextTest);
      yield undefined;

      // 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
      waitForTrue(function() {
        return (
          TestWindow.getWindow().getSelection().toString().toLowerCase() == 
          "find this");
      }, nextTest, 20);
      yield undefined;

      is(TestWindow.getWindow().getSelection().toString().toLowerCase(),
         "find this",
         "find failed on page loaded from bfcache");
      
      // Tell the framework the test is finished.  Include the final 'yield' 
      // statement to prevent a StopIteration exception from being thrown.
      finish();
      yield undefined;
    }
    
  ]]></script>

  <commandset>
    <command id="cmd_find"
     oncommand="document.getElementById('FindToolbar').onFindCommand();"/>
  </commandset>
  <browser type="content-primary" flex="1" id="content" src="about:blank"/>
  <findbar id="FindToolbar" browserid="content"/>
</window>