| OLD | NEW |
| 1 <p>Tests that asynchronous XMLHttpRequests handle redirects according to the COR
S standard.</p> | 1 <p>Tests that asynchronous XMLHttpRequests handle redirects according to the COR
S standard.</p> |
| 2 | 2 |
| 3 <pre id="console"></pre> | 3 <pre id="console"></pre> |
| 4 <script> | 4 <script> |
| 5 if (window.testRunner) { | 5 if (window.testRunner) { |
| 6 testRunner.dumpAsText(); | 6 testRunner.dumpAsText(); |
| 7 testRunner.waitUntilDone(); | 7 testRunner.waitUntilDone(); |
| 8 } | 8 } |
| 9 | 9 |
| 10 function log(message) | 10 function log(message) |
| 11 { | 11 { |
| 12 document.getElementById('console').appendChild(document.createTextNode(messa
ge + '\n')); | 12 document.getElementById('console').appendChild(document.createTextNode(messa
ge + '\n')); |
| 13 } | 13 } |
| 14 | 14 |
| 15 function runTestAsync(url, addCustomHeader, expectSuccess) { | 15 function runTestAsync(url, credentials, addCustomHeader, expectSuccess) { |
| 16 log("Testing " + url); | 16 log("Testing " + url + (credentials ? " with " : " without ") + "credentials
"); |
| 17 log("Expecting success: " + expectSuccess); | 17 log("Expecting success: " + expectSuccess); |
| 18 | 18 |
| 19 xhr = new XMLHttpRequest(); | 19 xhr = new XMLHttpRequest(); |
| 20 xhr.withCredentials = credentials; |
| 20 xhr.open("GET", url, true); | 21 xhr.open("GET", url, true); |
| 21 if (addCustomHeader) | 22 if (addCustomHeader) |
| 22 xhr.setRequestHeader("x-webkit", "foo"); | 23 xhr.setRequestHeader("x-webkit", "foo"); |
| 23 | 24 |
| 24 xhr.onload = function() { | 25 xhr.onload = function() { |
| 25 log((expectSuccess ? "PASS" : "FAIL") + ": " + xhr.responseText); | 26 log((expectSuccess ? "PASS" : "FAIL") + ": " + xhr.responseText); |
| 26 nextTest(); | 27 nextTest(); |
| 27 } | 28 } |
| 28 xhr.onerror = function() { | 29 xhr.onerror = function() { |
| 29 log((expectSuccess ? "FAIL" : "PASS") + ": " + xhr.status); | 30 log((expectSuccess ? "FAIL" : "PASS") + ": " + xhr.status); |
| 30 nextTest(); | 31 nextTest(); |
| 31 } | 32 } |
| 32 xhr.send(null); | 33 xhr.send(null); |
| 33 } | 34 } |
| 34 | 35 |
| 36 var withoutCredentials = false; |
| 37 var withCredentials = true; |
| 35 var noCustomHeader = false; | 38 var noCustomHeader = false; |
| 36 var addCustomHeader = true; | 39 var addCustomHeader = true; |
| 37 var succeeds = true; | 40 var succeeds = true; |
| 38 var fails = false; | 41 var fails = false; |
| 39 | 42 |
| 40 var tests = [ | 43 var tests = [ |
| 41 // 1) Test simple same origin requests that receive cross origin redirects. | 44 // 1) Test simple cross origin requests that receive redirects. |
| 42 | |
| 43 // Request receives a cross-origin redirect response without CORS headers. The r
edirect response fails the access check. | |
| 44 ["resources/redirect-cors.php?url=http://localhost:8000/xmlhttprequest/resources
/access-control-basic-allow-star.cgi", | |
| 45 noCustomHeader, fails], | |
| 46 | |
| 47 // Request receives a cross-origin redirect response with CORS headers. The redi
rect response passes the access check, | |
| 48 // but the resource response fails its access check because the security origin
is a globally unique identifier after | |
| 49 // the redirect and the same origin XHR has 'allowCredentials' true. | |
| 50 ["resources/redirect-cors.php?url=http://localhost:8000/xmlhttprequest/resources
/access-control-basic-allow-star.cgi&\ | |
| 51 access-control-allow-origin=http://localhost:8000&\ | |
| 52 access-control-allow-credentials=true", | |
| 53 noCustomHeader, fails], | |
| 54 | |
| 55 // Same as above, but to a less permissive resource that only allows the request
ing origin. | |
| 56 ["resources/redirect-cors.php?url=http://localhost:8000/xmlhttprequest/resources
/access-control-basic-allow.cgi&\ | |
| 57 access-control-allow-origin=http://localhost:8000&\ | |
| 58 access-control-allow-credentials=true", | |
| 59 noCustomHeader, fails], | |
| 60 | |
| 61 // 2) Test simple cross origin requests that receive redirects. | |
| 62 | 45 |
| 63 // Receives a redirect response without CORS headers. The redirect response fail
s the access check. | 46 // Receives a redirect response without CORS headers. The redirect response fail
s the access check. |
| 64 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=http://lo
calhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi", | 47 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=http://lo
calhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi", |
| 65 noCustomHeader, fails], | 48 withoutCredentials, noCustomHeader, fails], |
| 66 | 49 |
| 67 // Receives a redirect response with CORS headers. The redirect response passes
the access check and the resource response | 50 // Receives a redirect response with CORS headers. The redirect response passes
the access check and the resource response |
| 68 // passes the access check. | 51 // passes the access check. |
| 52 // FIXME: this test fails because the redirect is vetoed. There are continued bu
gs with redirects when the original |
| 53 // request was cross-origin. |
| 69 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=http://lo
calhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&\ | 54 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=http://lo
calhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&\ |
| 70 access-control-allow-origin=http://localhost:8000", | 55 access-control-allow-origin=http://localhost:8000", |
| 71 noCustomHeader, succeeds], | 56 withoutCredentials, noCustomHeader, succeeds], |
| 72 | 57 |
| 73 // Receives a redirect response with a URL containing the userinfo production. | 58 // Receives a redirect response with a URL containing the userinfo production. |
| 74 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=http://us
ername:password@localhost:8000/xmlhttprequest/resources/access-control-basic-all
ow-star.cgi&\ | 59 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=http://us
ername:password@localhost:8000/xmlhttprequest/resources/access-control-basic-all
ow-star.cgi&\ |
| 75 access-control-allow-origin=http://localhost:8000", | 60 access-control-allow-origin=http://localhost:8000", |
| 76 noCustomHeader, fails], | 61 withoutCredentials, noCustomHeader, fails], |
| 77 | 62 |
| 78 // Receives a redirect response with a URL with an unsupported scheme. | 63 // Receives a redirect response with a URL with an unsupported scheme. |
| 79 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=foo://bar
.cgi&\ | 64 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=foo://bar
.cgi&\ |
| 80 access-control-allow-origin=http://localhost:8000", | 65 access-control-allow-origin=http://localhost:8000", |
| 81 noCustomHeader, fails], | 66 withoutCredentials, noCustomHeader, fails], |
| 82 | 67 |
| 83 // 3) Test preflighted cross origin requests that receive redirects. | 68 // 2) Test preflighted cross origin requests that receive redirects. |
| 84 | 69 |
| 85 // Receives a redirect response to the preflight request and fails. | 70 // Receives a redirect response to the preflight request and fails. |
| 86 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-pref
light=true&\ | 71 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-pref
light=true&\ |
| 87 url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-
star.cgi&\ | 72 url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-
star.cgi&\ |
| 88 access-control-allow-origin=*", | 73 access-control-allow-origin=*", |
| 89 addCustomHeader, fails], | 74 withoutCredentials, addCustomHeader, fails], |
| 90 | 75 |
| 91 // Successful preflight and receives a redirect response to the actual request a
nd fails. | 76 // Successful preflight and receives a redirect response to the actual request a
nd fails. |
| 92 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-pref
light=false&\ | 77 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-pref
light=false&\ |
| 93 url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-
star.cgi&\ | 78 url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-
star.cgi&\ |
| 94 access-control-allow-origin=*&\ | 79 access-control-allow-origin=*&\ |
| 95 access-control-allow-headers=x-webkit", | 80 access-control-allow-headers=x-webkit", |
| 96 addCustomHeader, fails], | 81 withoutCredentials, addCustomHeader, fails], |
| 97 | 82 |
| 98 // 4) Test same origin requests with a custom header that receive a same origin
redirect. | 83 // 3) Test same origin requests with a custom header that receive a same origin
redirect. |
| 99 ["resources/redirect-cors.php?url=http://127.0.0.1:8000/xmlhttprequest/resources
/get.txt", | 84 ["resources/redirect-cors.php?url=http://127.0.0.1:8000/xmlhttprequest/resources
/get.txt", |
| 100 addCustomHeader, succeeds], | 85 withoutCredentials, addCustomHeader, succeeds], |
| 86 |
| 101 ] | 87 ] |
| 102 | 88 |
| 103 var currentTest = 0; | 89 var currentTest = 0; |
| 104 | 90 |
| 105 function nextTest() { | 91 function nextTest() { |
| 106 if (currentTest < tests.length) | 92 if (currentTest < tests.length) |
| 107 runTestAsync.apply(null, tests[currentTest++]); | 93 runTestAsync.apply(null, tests[currentTest++]); |
| 108 else if (window.testRunner) | 94 else if (window.testRunner) |
| 109 testRunner.notifyDone(); | 95 testRunner.notifyDone(); |
| 110 } | 96 } |
| 111 | 97 |
| 112 nextTest(); | 98 nextTest(); |
| 113 </script> | 99 </script> |
| OLD | NEW |