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