Branch data Line data Source code
1 [ + ]: 2 : import assert from 'node:assert/strict'; 2 : 2 : import { XMLHttpRequest } from '../../../lib/whatwg-xhr.js'; 3 : 2 : 4 : 2 : export default (activeURL) => { 5 : 0 : 6 : 0 : let xhr = new XMLHttpRequest(); 7 : 0 : 8 : 0 : let test_state = 1; 9 : 0 : 10 : 0 : let log = []; 11 : 0 : let expected = [ 12 : 0 : 'onloadstart readyState before abort() 1', 13 : 0 : 'onreadystatechange readyState before open() 4', 14 : 0 : 'onreadystatechange readyState after open() 1', 15 : 0 : 'onloadstart readyState 1', 16 : 0 : 'xhr.onabort 1', 17 : 0 : 'readyState after abort() 1', 18 : 0 : 'xhr.onload 4' 19 : 0 : ]; 20 : 0 : 21 : 0 : xhr.onreadystatechange = () => { 22 : 0 : if(test_state === 2){ 23 : 0 : test_state = 3; 24 : 0 : 25 : 0 : log.push('onreadystatechange readyState before open() ' + xhr.readyState); 26 : 0 : xhr.open('GET', `${activeURL}/content.py`); 27 : 0 : log.push('onreadystatechange readyState after open() ' + xhr.readyState); 28 : 0 : xhr.send(); 29 : 0 : } 30 : 0 : }; 31 : 0 : 32 : 0 : xhr.onloadstart = () => { 33 : 0 : if(test_state === 1){ 34 : 0 : test_state = 2; 35 : 0 : 36 : 0 : log.push('onloadstart readyState before abort() ' + xhr.readyState); 37 : 0 : xhr.abort(); 38 : 0 : log.push('readyState after abort() ' + xhr.readyState); 39 : 0 : } 40 : 0 : else{ 41 : 0 : log.push('onloadstart readyState ' + xhr.readyState); 42 : 0 : } 43 : 0 : }; 44 : 0 : 45 : 0 : xhr.upload.onabort = () => { 46 : 0 : log.push('upload.onabort ' + xhr.readyState); 47 : 0 : }; 48 : 0 : 49 : 0 : xhr.onabort = () => { 50 : 0 : log.push('xhr.onabort ' + xhr.readyState); 51 : 0 : }; 52 : 0 : 53 : 0 : xhr.upload.onloadend = () => { 54 : 0 : log.push('upload.onloadend ' + xhr.readyState); 55 : 0 : }; 56 : 0 : 57 : 0 : xhr.onload = () => { 58 : 0 : log.push('xhr.onload ' + xhr.readyState); 59 : 0 : 60 : 0 : assert.deepStrictEqual(log, expected); 61 : 0 : }; 62 : 0 : 63 : 0 : xhr.open('POST', `${activeURL}/content.py`); 64 : 0 : xhr.send('abcd'); 65 : 0 : } 66 : 2 : 67 : 2 : /* 68 : 2 : * open-during-abort-processing.htm 69 : 2 : * 70 : 2 : 71 : 2 : <!doctype html> 72 : 2 : <title>XMLHttpRequest: open() during abort processing - abort() called from onloadstart</title> 73 : 2 : <script src="/resources/testharness.js"></script> 74 : 2 : <script src="/resources/testharnessreport.js"></script> 75 : 2 : <div id="log"></div> 76 : 2 : <script> 77 : 2 : async_test(t => { 78 : 2 : let client = new XMLHttpRequest(), 79 : 2 : test_state = 1, 80 : 2 : log = [], 81 : 2 : expected = [ 82 : 2 : "onloadstart readyState before abort() 1", 83 : 2 : "onreadystatechange readyState before open() 4", 84 : 2 : "onreadystatechange readyState after open() 1", 85 : 2 : "onloadstart readyState 1", 86 : 2 : "client.onabort 1", 87 : 2 : "readyState after abort() 1", 88 : 2 : "client.onload 4" 89 : 2 : ] 90 : 2 : 91 : 2 : client.onreadystatechange = t.step_func(() => { 92 : 2 : if(test_state === 2){ 93 : 2 : test_state = 3 94 : 2 : log.push('onreadystatechange readyState before open() ' + client.readyState) 95 : 2 : client.open("GET", "resources/content.py") 96 : 2 : log.push('onreadystatechange readyState after open() ' + client.readyState) 97 : 2 : client.send(null) 98 : 2 : } 99 : 2 : }) 100 : 2 : 101 : 2 : client.onloadstart = t.step_func(() => { 102 : 2 : if(test_state === 1){ 103 : 2 : test_state = 2 104 : 2 : log.push('onloadstart readyState before abort() ' + client.readyState) 105 : 2 : client.abort() 106 : 2 : log.push('readyState after abort() ' + client.readyState) 107 : 2 : }else{ 108 : 2 : log.push('onloadstart readyState ' + client.readyState) 109 : 2 : } 110 : 2 : }) 111 : 2 : 112 : 2 : client.upload.onabort = t.step_func(() => { 113 : 2 : log.push('upload.onabort ' + client.readyState) 114 : 2 : }) 115 : 2 : 116 : 2 : client.onabort = t.step_func(() => { 117 : 2 : log.push('client.onabort ' + client.readyState) 118 : 2 : }) 119 : 2 : 120 : 2 : client.upload.onloadend = t.step_func(() => { 121 : 2 : log.push('upload.onloadend ' + client.readyState) 122 : 2 : }) 123 : 2 : 124 : 2 : client.onload = t.step_func_done(() => { 125 : 2 : log.push('client.onload ' + client.readyState) 126 : 2 : assert_array_equals(log, expected) 127 : 2 : }) 128 : 2 : 129 : 2 : client.open("POST", "resources/content.py") 130 : 2 : client.send('abcd') 131 : 2 : }) 132 : 2 : </script> 133 : 2 : 134 : 2 : * 135 : 2 : * open-during-abort-processing.htm 136 : 2 : */