xhrAbort_worker.js (2014B)
1 /** 2 * Any copyright is dedicated to the Public Domain. 3 * http://creativecommons.org/publicdomain/zero/1.0/ 4 */ 5 /* eslint-env worker */ 6 /* global WorkerProgressEvent */ 7 function runTest() { 8 var xhr = new XMLHttpRequest(); 9 10 var events = []; 11 function pushEvent(event) { 12 var readyState, responseText, status, statusText; 13 14 try { 15 readyState = xhr.readyState; 16 } catch (e) { 17 readyState = "[exception]"; 18 } 19 20 try { 21 responseText = xhr.responseText; 22 } catch (e) { 23 responseText = "[exception]"; 24 } 25 26 try { 27 status = xhr.status; 28 } catch (e) { 29 status = "[exception]"; 30 } 31 32 try { 33 statusText = xhr.statusText; 34 } catch (e) { 35 statusText = "[exception]"; 36 } 37 38 var str = 39 event.type + 40 "(" + 41 readyState + 42 ", '" + 43 responseText + 44 "', " + 45 status + 46 ", '" + 47 statusText + 48 "'"; 49 if ( 50 ("ProgressEvent" in this && event instanceof ProgressEvent) || 51 ("WorkerProgressEvent" in this && event instanceof WorkerProgressEvent) 52 ) { 53 str += ", progressEvent"; 54 } 55 str += ")"; 56 57 events.push(str); 58 } 59 60 xhr.onerror = function () { 61 throw new Error("Error: " + xhr.statusText); 62 }; 63 64 xhr.onload = function () { 65 throw new Error("Shouldn't have gotten load event!"); 66 }; 67 68 var seenAbort; 69 xhr.onabort = function (event) { 70 if (seenAbort) { 71 throw new Error("Already seen the abort event!"); 72 } 73 seenAbort = true; 74 75 pushEvent(event); 76 postMessage(events); 77 }; 78 79 xhr.onreadystatechange = function (event) { 80 pushEvent(event); 81 if (xhr.readyState == xhr.HEADERS_RECEIVED) { 82 xhr.abort(); 83 } 84 }; 85 86 xhr.open("GET", "worker_testXHR.txt"); 87 xhr.overrideMimeType("text/plain"); 88 xhr.send(null); 89 } 90 91 function messageListener(event) { 92 switch (event.data) { 93 case "start": 94 runTest(); 95 break; 96 default: 97 throw new Error("Bad message!"); 98 } 99 } 100 101 addEventListener("message", messageListener, false);