| OLD | NEW |
| 1 <html> | 1 <html> |
| 2 <head> | 2 <head> |
| 3 <script src="/js-test-resources/js-test.js"></script> | 3 <script src="/js-test-resources/js-test.js"></script> |
| 4 <script> | 4 <script> |
| 5 function write(s) | 5 function write(s) |
| 6 { | 6 { |
| 7 document.getElementById('pre').appendChild(document.createTextNode(s)); | 7 document.getElementById('pre').appendChild(document.createTextNode(s)); |
| 8 } | 8 } |
| 9 | 9 |
| 10 var didCollect = false; | 10 var didCollect = false; |
| 11 function collect() | 11 window.onmessage = function () |
| 12 { | 12 { |
| 13 didCollect = true; | 13 didCollect = true; |
| 14 gc(); | 14 gc(); |
| 15 } | 15 } |
| 16 | 16 |
| 17 function processStateChange(e) | 17 function processStateChange(e) |
| 18 { | 18 { |
| 19 if (didCollect) | 19 if (didCollect) |
| 20 write("PASS: event handler fired after garbage collection.\n"); | 20 write("PASS: event handler fired after garbage collection.\n"); |
| 21 if (e.target.readyState == 4) { | 21 if (e.target.readyState == 4) { |
| 22 if (window.testRunner) | 22 if (window.testRunner) |
| 23 testRunner.notifyDone(); | 23 testRunner.notifyDone(); |
| 24 } | 24 } |
| 25 } | 25 } |
| 26 | 26 |
| 27 function test() | 27 function test() |
| 28 { | 28 { |
| 29 if (window.testRunner) { | 29 if (window.testRunner) { |
| 30 testRunner.dumpAsText(); | 30 testRunner.dumpAsText(); |
| 31 testRunner.waitUntilDone(); | 31 testRunner.waitUntilDone(); |
| 32 } | 32 } |
| 33 | 33 |
| 34 var request = new XMLHttpRequest(); | 34 var request = new XMLHttpRequest(); |
| 35 request.onreadystatechange = processStateChange; | 35 request.onreadystatechange = processStateChange; |
| 36 request.open("GET", "print-content-type.cgi", true); | 36 request.open("GET", "print-content-type.cgi", true); |
| 37 request.send(null); | 37 request.send(null); |
| 38 | 38 |
| 39 setTimeout('collect();', 0); // timeout ensures stack references to request
are cleared when we collect | 39 // Indirectly GC so as to ensure that 'request' isn't stack reachable. |
| 40 window.postMessage('gc!', '*'); |
| 40 } | 41 } |
| 41 </script> | 42 </script> |
| 42 </head> | 43 </head> |
| 43 | 44 |
| 44 <body onload="test();"> | 45 <body onload="test();"> |
| 45 <p>This test checks whether event handlers for outstanding XMLHttpRequests survi
ve garbage collection.</p> | 46 <p>This test checks whether event handlers for outstanding XMLHttpRequests survi
ve garbage collection.</p> |
| 46 <p>See https://bugs.webkit.org/show_bug.cgi?id=9113 REGRESSION (14581): | 47 <p>See https://bugs.webkit.org/show_bug.cgi?id=9113 REGRESSION (14581): |
| 47 XMLHttpRequest never calls onreadystatechange with a readystate == 4</p> | 48 XMLHttpRequest never calls onreadystatechange with a readystate == 4</p> |
| 48 <p>If the test passes, you'll see a series of 'PASS' messages below.</p> | 49 <p>If the test passes, you'll see a series of 'PASS' messages below.</p> |
| 49 <hr> | 50 <hr> |
| 50 | 51 |
| 51 <pre id='pre'></pre> | 52 <pre id='pre'></pre> |
| 52 | 53 |
| 53 </body> | 54 </body> |
| 54 </html> | 55 </html> |
| OLD | NEW |