summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/cors/status.htm
blob: 73244288d412814bb312a1326902ad3213c542b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<!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>