Clean up asynchronous behavior in some accessibility tests
[WebKit-https.git] / LayoutTests / accessibility / mac / removing-textarea-after-edit-crash.html
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 <html>
3 <head>
4 <script src="../../resources/js-test-pre.js"></script>
5 </head>
6 <body id="body">
7
8 <div class="hidden" id="div">
9
10 <div>
11 <textarea placeholder="hello" id="textarea">a</textarea>
12 text
13 </div>
14
15 <input type="text" id="textfield">
16
17 </div>
18
19 <p id="description"></p>
20 <div id="console"></div>
21
22 <script>
23     description("This tests that when an element is removed from the DOM while a notification referencing it is pending, it will not crash.");
24
25     // Triggering this is quite complicated, because the ValueChange notification needs to be the one to trigger the layoutUpdate
26     // Sending the XMLHttpRequest after a timeout and then having a handler set the display: NONE, seems to do it.
27     function processStateChange() {
28         if (req.readyState == 4) {
29             document.getElementById("textarea").value = "";
30             document.getElementById("div").style.display = "NONE";
31
32             // we now have to wait for the value change to be propagated to trigger the crash.
33             setTimeout(finishJSTest, 1);
34         }
35     }
36 </script>
37
38 <script>
39     var req = 0;
40     if (window.accessibilityController) {  
41         window.jsTestIsAsync = true;
42         document.getElementById("body").focus();
43         body = accessibilityController.focusedElement;
44
45         // Access the text area so that an accessibility element is created (so that it will send out notifications).        
46         body.childAtIndex(0).childAtIndex(0);
47
48         document.getElementById("textarea").focus();
49
50         req = new XMLHttpRequest;
51         req.onreadystatechange = processStateChange;
52         req.open("get", "../../../http/tests/xmlhttprequest/methods.cgi", true);
53         // Sending this after a timeout makes is so that the layout does not happen until the value change is sent.
54         setTimeout("req.send('')", 1);
55     } else
56         debug("window.accessibilityController is not present");
57
58 </script>
59 <script src="../../resources/js-test-post.js"></script>
60 </body>
61 </html>