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 lastTest = false; 9 : 0 : 10 : 0 : let log = []; 11 : 0 : let expected = [ 12 : 0 : 'readyState before abort() 1', 13 : 0 : 'upload.onabort - before open() 4', 14 : 0 : 'readyState after open() 1', 15 : 0 : 16 : 0 : 'xhr.onabort 1', 17 : 0 : 'xhr.onloadend 1', 18 : 0 : 'readyState after abort() 1', 19 : 0 : 20 : 0 : 'xhr.onload 4', 21 : 0 : 'xhr.onloadend 4', 22 : 0 : ]; 23 : 0 : 24 : 0 : xhr.upload.onloadstart = () => { 25 : 0 : log.push('readyState before abort() ' + xhr.readyState); 26 : 0 : 27 : 0 : xhr.abort(); 28 : 0 : log.push('readyState after abort() ' + xhr.readyState); 29 : 0 : }; 30 : 0 : 31 : 0 : xhr.upload.onabort = () => { 32 : 0 : log.push('upload.onabort - before open() ' + xhr.readyState); 33 : 0 : 34 : 0 : xhr.open('GET', `${activeURL}/content.py`); 35 : 0 : log.push('readyState after open() ' + xhr.readyState); 36 : 0 : 37 : 0 : xhr.send(); 38 : 0 : }; 39 : 0 : 40 : 0 : xhr.onabort = () => { 41 : 0 : // happens immediately after all of upload.onabort, so readyState is 1 42 : 0 : log.push('xhr.onabort ' + xhr.readyState); 43 : 0 : }; 44 : 0 : 45 : 0 : xhr.onload = () => { 46 : 0 : log.push('xhr.onload ' + xhr.readyState); 47 : 0 : }; 48 : 0 : 49 : 0 : xhr.onloadend = () => { 50 : 0 : log.push('xhr.onloadend ' + xhr.readyState); 51 : 0 : 52 : 0 : if(lastTest){ 53 : 0 : assert.deepStrictEqual(log, expected); 54 : 0 : } 55 : 0 : lastTest = true; 56 : 0 : }; 57 : 0 : 58 : 0 : xhr.open('POST', `${activeURL}/content.py`); 59 : 0 : xhr.send('non-empty'); 60 : 0 : } 61 : 2 : 62 : 2 : /* 63 : 2 : * open-during-abort-event.htm 64 : 2 : * 65 : 2 : 66 : 2 : <!doctype html> 67 : 2 : <title>XMLHttpRequest: open() during abort event - abort() called from upload.onloadstart</title> 68 : 2 : <script src="/resources/testharness.js"></script> 69 : 2 : <script src="/resources/testharnessreport.js"></script> 70 : 2 : <div id="log"></div> 71 : 2 : <script> 72 : 2 : async_test(t => { 73 : 2 : let client = new XMLHttpRequest(), 74 : 2 : log = [], 75 : 2 : lastTest = false, 76 : 2 : expected = [ 77 : 2 : 'readyState before abort() 1', 78 : 2 : "upload.onabort - before open() 4", 79 : 2 : "readyState after open() 1", 80 : 2 : "client.onabort 1", 81 : 2 : "client.onloadend 1", 82 : 2 : "readyState after abort() 1", 83 : 2 : "client.onload 4", 84 : 2 : "client.onloadend 4" 85 : 2 : ] 86 : 2 : 87 : 2 : client.upload.onloadstart = t.step_func(() => { 88 : 2 : log.push('readyState before abort() '+client.readyState) 89 : 2 : client.abort() 90 : 2 : log.push('readyState after abort() '+client.readyState) 91 : 2 : }) 92 : 2 : 93 : 2 : client.upload.onabort = t.step_func(() => { 94 : 2 : log.push('upload.onabort - before open() ' + client.readyState) 95 : 2 : client.open("GET", "resources/content.py") 96 : 2 : log.push('readyState after open() ' + client.readyState) 97 : 2 : client.send(null) 98 : 2 : }) 99 : 2 : 100 : 2 : client.onabort = t.step_func(() => { 101 : 2 : // happens immediately after all of upload.onabort, so readyState is 1 102 : 2 : log.push('client.onabort ' + client.readyState) 103 : 2 : }) 104 : 2 : 105 : 2 : client.onloadend = t.step_func(() => { 106 : 2 : log.push('client.onloadend ' + client.readyState) 107 : 2 : if(lastTest) { 108 : 2 : assert_array_equals(log, expected) 109 : 2 : t.done() 110 : 2 : } 111 : 2 : lastTest = true 112 : 2 : }) 113 : 2 : 114 : 2 : client.onload = t.step_func(() => { 115 : 2 : log.push('client.onload ' + client.readyState) 116 : 2 : }) 117 : 2 : 118 : 2 : client.open("POST", "resources/content.py") 119 : 2 : client.send("non-empty") 120 : 2 : }) 121 : 2 : </script> 122 : 2 : 123 : 2 : * 124 : 2 : * open-during-abort-event.htm 125 : 2 : */