| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" |
| "http://www.w3.org/TR/html4/loose.dtd"> |
| <html> |
| <head> |
| <script> |
| function log(message) |
| { |
| var console = document.getElementById('console'); |
| console.appendChild(document.createTextNode(message)); |
| console.appendChild(document.createElement('br')); |
| } |
| |
| function errorHandler() |
| { |
| log("Error handler: readyState = " + xhr.readyState); |
| var results = window.top.document.getElementById('results'); |
| results.innerHTML = document.body.innerHTML; |
| } |
| |
| function readyStateHandlerDirectory() |
| { |
| log("ReadyState handler: readyState = " + xhr.readyState); |
| |
| if (xhr.readyState == 4 && window.testRunner) { |
| var results = window.top.document.getElementById('results'); |
| results.innerHTML = document.body.innerHTML; |
| |
| setTimeout("testRunner.notifyDone()", 0); |
| } |
| } |
| |
| function testXHRDirectory() |
| { |
| log(""); |
| log("Doing an XHR to a directory."); |
| xhr = new XMLHttpRequest(); |
| xhr.onerror = errorHandler; |
| xhr.onreadystatechange = readyStateHandlerDirectory; |
| |
| try { |
| xhr.open("GET", "../resources/", false); |
| xhr.send(""); |
| } catch(e) { |
| log("Exception: " + e.message); |
| } |
| } |
| |
| function readyStateHandlerNonExistent() |
| { |
| log("ReadyState handler: readyState = " + xhr.readyState); |
| if (xhr.readyState == 4) |
| setTimeout("testXHRDirectory()", 0); |
| } |
| |
| function testXHRNonExistentFile() |
| { |
| log("Doing an XHR to a nonexistent file."); |
| xhr = new XMLHttpRequest(); |
| xhr.onerror = errorHandler; |
| xhr.onreadystatechange = readyStateHandlerNonExistent; |
| |
| try { |
| xhr.open("GET", "nonexistent.html", true); |
| xhr.send(""); |
| } catch(e) { |
| log("Exception: " + e.message); |
| testXHRDirectory(); |
| } |
| } |
| </script> |
| </head> |
| <body onload="testXHRNonExistentFile()"> |
| <p> Bug <a href="https://bugs.webkit.org/show_bug.cgi?id=22475">22475</a>: REGRESSION: Async XMLHttpRequest never finishes on nonexistent files anymore </p> |
| <p> In both cases, readyState 4 should be reached. Because one of the requests is synchronous and for a file: URL, only a single error handler should be invoked. </p> |
| <div id="console"/> |
| </body> |
| </html> |