| <html> |
| <script> |
| |
| function didReadFile() |
| { |
| document.getElementById('result').innerHTML = 'FAILURE: ' + req.responseText; |
| if (window.testRunner) |
| testRunner.notifyDone(); |
| } |
| |
| function log(message) |
| { |
| var logElement = document.getElementById('log'); |
| logElement.appendChild(document.createTextNode(message)); |
| logElement.appendChild(document.createElement("p")); |
| } |
| |
| function onReqreadystatechange() |
| { |
| log('readyState change ' + req.readyState); |
| } |
| |
| function onReqAbort() |
| { |
| log('Abort event.'); |
| } |
| |
| function onSyncReqError() |
| { |
| log('Error event.'); |
| } |
| |
| function onReqError(e) |
| { |
| document.getElementById('result').innerHTML = 'SUCCESS: Error handler was called with readyState ' + req.readyState; |
| if (window.testRunner) |
| testRunner.notifyDone(); |
| } |
| |
| function runTest() { |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| } |
| |
| // First, make a sync request. |
| log ('Sync XHR started.'); |
| req = new XMLHttpRequest(); |
| req.onreadystatechange = onReqreadystatechange; |
| req.onerror = onSyncReqError; |
| req.onabort = onReqAbort; |
| req.open('GET', '/resources/redirect.php?url=http://localhost:8080/xmlhttprequest/resources/forbidden.txt', false); |
| try { |
| req.send(null); |
| } catch (e) { |
| log('Exception: ' + (e.description ? e.description : e)); |
| } |
| |
| if (req.responseText != '') { |
| didReadFile(); |
| return; |
| } |
| |
| log ('Async XHR started.'); |
| req = new XMLHttpRequest(); |
| req.onreadystatechange = onReqreadystatechange; |
| req.onload = didReadFile; |
| req.onerror = onReqError; |
| req.onabort = onReqAbort; |
| req.open('GET', '/resources/redirect.php?url=http://localhost:8080/xmlhttprequest/resources/forbidden.txt'); |
| req.send(null); |
| } |
| </script> |
| <body onload="runTest()"> |
| <div>This tests that unsafe redirects won't be allowed when making an XMLHttpRequest.</div> |
| <div id="log"></div> |
| <div id="result">FAILURE</div> |
| </body> |
| </html> |