<!
DOCTYPE html>
<
meta charset=utf-8>
<
title>CORS status</
title>
<
link rel=help href=
https://fetch.spec.whatwg.org/>
<
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>