Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /cors/status.htm - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<meta charset=utf-8>
<title>CORS status</title>
<meta name=author title="Odin Hørthe Omdal" href="mailto:odiho@opera.com">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support.js?pipe=sub"></script>
<h1>The returned status code in different scenarios</h1>
<script>
var counter = 0
function testit(allow, preflight, response, status) {
async_test(
(++counter) + '. ' +
(allow ? 'CORS allowed' : 'CORS disallowed') +
(preflight ? ', preflight status '+preflight : '') +
(response ? ', response status '+response : '') +
'.'
).step(function() {
var client = new XMLHttpRequest()
client.open('GET', CROSSDOMAIN + 'resources/cors-makeheader.py?' + counter +
(allow ? '&headers=x-custom': '&origin=none') +
(response ? '&code='+response : '') +
(preflight ? '&preflight='+preflight : '')
)
if (preflight)
client.setRequestHeader('X-Custom', 'preflight')
client.onload = this.step_func(function() {
if (!status)
assert_unreached("load event")
/* Allow spurious error events to fire */
this.step_timeout(() => {
assert_equals(client.status, status, "status")
this.done()
}, 10)
})
client.onerror = this.step_func(function() {
if (status)
assert_unreached("error event")
assert_equals(client.readyState, client.DONE, 'readyState')
assert_equals(client.status, 0, 'status')
this.done()
})
client.send()
})
}
/* allow pref resp status */
testit(false, null, 400, 0)
testit(false, 200, null, 0)
testit(true, null, 400, 400)
testit(true, 200, 400, 400)
testit(true, 400, null, 0)
</script>
<pre>
allowed preflight response | status |
------- --------- -------- | ------ |
1 no x 400 | 0 |
2 no 200 x | 0 |
3 yes x 400 | 400 |
4 yes 200 400 | 400 |
5 yes 400 x | 0 |
</pre>
<div id=log></div>