xhr_worker.js (2252B)
1 /** 2 * Any copyright is dedicated to the Public Domain. 3 * http://creativecommons.org/publicdomain/zero/1.0/ 4 */ 5 var xhr = new XMLHttpRequest(); 6 7 function onload(event) { 8 if (event.target != xhr) { 9 throw new Error("onload event.target != xhr"); 10 } 11 12 if (event.target.status != 200) { 13 const message = { type: "error", error: event.target.status }; 14 postMessage(message); 15 } 16 17 const message = { type: "load", data: xhr.responseText }; 18 postMessage(message); 19 } 20 21 xhr.onload = onload; 22 xhr.addEventListener("load", onload); 23 xhr.removeEventListener("load", onload); 24 if (!xhr.onload) { 25 const message = { type: "error", error: "Lost message listener!" }; 26 postMessage(message); 27 } 28 29 xhr.onerror = function (event) { 30 if (event.target != xhr) { 31 throw new Error("onerror event.target != xhr"); 32 } 33 var message = { type: "error", error: event.target.status }; 34 postMessage(message); 35 }; 36 // eslint-disable-next-line no-self-assign 37 xhr.onerror = xhr.onerror; 38 // eslint-disable-next-line no-self-compare 39 if (!xhr.onerror || xhr.onerror != xhr.onerror) { 40 throw new Error("onerror wasn't set properly"); 41 } 42 43 function onprogress(event) { 44 if (event.target != xhr) { 45 throw new Error("onprogress event.target != xhr"); 46 } 47 const message = { 48 type: "progress", 49 current: event.loaded, 50 total: event.total, 51 }; 52 postMessage(message); 53 } 54 xhr.addEventListener("progress", onprogress); 55 56 xhr.addEventListener("foopety", function () {}); 57 xhr.removeEventListener("doopety", function () {}); 58 59 xhr.onloadend = function () { 60 const message = { type: "loadend" }; 61 postMessage(message); 62 }; 63 64 var upload = xhr.upload; 65 upload.onprogress = function () {}; 66 upload.addEventListener("foo", function () {}); 67 upload.removeEventListener("foo", function () {}); 68 upload.addEventListener("load", function () {}); 69 upload.removeEventListener("foo", function () {}); 70 upload.onload = function () { 71 const message = { type: "upload.load" }; 72 postMessage(message); 73 }; 74 75 onmessage = function (event) { 76 if (xhr.DONE != 4 || XMLHttpRequest.DONE != 4) { 77 throw new Error("xhr constants not correct!"); 78 } 79 if (xhr.readystate > xhr.UNSENT) { 80 throw new Error("XHR already running!"); 81 } 82 xhr.open("POST", event.data); 83 xhr.send("Data to send"); 84 };