| <html> |
| <body> |
| <p>Test that EventSource cross-origin requests with credentials fail until the correct CORS headers are sent. Should print a series of PASS messages followed by DONE.</p> |
| <div id="result"></div> |
| <script> |
| function log(msg) { |
| document.getElementById("result").innerHTML += msg + "<br>"; |
| } |
| |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| } |
| |
| function end() { |
| if (window.testRunner) |
| testRunner.notifyDone(); |
| } |
| |
| var count = 1; |
| var base_url = location.href.substr(0, location.href.lastIndexOf('/')).replace("127.0.0.1", "localhost"); |
| |
| function create_es() { |
| try { |
| var es = new EventSource(base_url + "/resources/es-cors-credentials.py?count=" + count, {"withCredentials": true}); |
| } |
| catch (ex) { |
| log("FAIL: EventSource constructor threw exception: " + ex); |
| end(); |
| return; |
| } |
| |
| if (!es.withCredentials) { |
| log("FAIL: withCredentials is false"); |
| es.close(); |
| end(); |
| } |
| |
| es.onerror = function () { |
| if (es.readyState == es.CLOSED) { |
| if (count != 4 && count != 5) { |
| log("PASS: got error event and readyState is CLOSED"); |
| count++; |
| setTimeout(create_es); |
| } |
| else { |
| log("FAIL: got unexpected error event"); |
| end(); |
| } |
| } |
| else if (count != 5) { |
| log("FAIL: got error event but readyState is not CLOSED"); |
| es.close(); |
| end(); |
| } |
| }; |
| |
| es.onmessage = function (evt) { |
| if (evt.origin != location.origin && !evt.origin.indexOf("http://localhost")) { |
| if (count == 4 && evt.data == "DATA1" && evt.lastEventId == "77") { |
| log("PASS: got cross-origin message event with data \"DATA1\" and lastEventId \"77\""); |
| count++; |
| return; |
| } |
| if (count == 5 && evt.data == "DATA2") { |
| log("PASS: got cross-origin message event with data \"DATA2\""); |
| log("DONE"); |
| } |
| else |
| log("FAIL: got unexpected cross-origin message event"); |
| } |
| else |
| log("FAIL: got message event from same or unexpected origin"); |
| |
| es.close(); |
| end(); |
| }; |
| } |
| create_es(); |
| </script> |
| </body> |
| </html> |