| <!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> |
| |