michael@0: /** michael@0: * Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: var xhr = new XMLHttpRequest(); michael@0: michael@0: function onload(event) { michael@0: if (event.target != xhr) { michael@0: throw "onload event.target != xhr"; michael@0: } michael@0: michael@0: if (event.target.status != 200) { michael@0: var message = { type: "error", michael@0: error: event.target.status }; michael@0: postMessage(message); michael@0: } michael@0: michael@0: var message = { type: "load", michael@0: data: xhr.responseText }; michael@0: postMessage(message); michael@0: } michael@0: michael@0: xhr.onload = onload; michael@0: xhr.addEventListener("load", onload, false); michael@0: xhr.removeEventListener("load", onload, false); michael@0: if (!xhr.onload) { michael@0: var message = { type: "error", michael@0: error: "Lost message listener!" }; michael@0: postMessage(message); michael@0: } michael@0: michael@0: xhr.onerror = function(event) { michael@0: if (event.target != xhr) { michael@0: throw "onerror event.target != xhr"; michael@0: } michael@0: var message = { type: "error", michael@0: error: event.target.status }; michael@0: postMessage(message); michael@0: }; michael@0: xhr.onerror = xhr.onerror; michael@0: if (!xhr.onerror || xhr.onerror != xhr.onerror) { michael@0: throw "onerror wasn't set properly"; michael@0: } michael@0: michael@0: function onprogress(event) { michael@0: if (event.target != xhr) { michael@0: throw "onprogress event.target != xhr"; michael@0: } michael@0: var message = { type: "progress", michael@0: current: event.loaded, michael@0: total: event.total }; michael@0: postMessage(message); michael@0: } michael@0: xhr.addEventListener("progress", onprogress, false); michael@0: michael@0: xhr.addEventListener("foopety", function(event) {}, false); michael@0: xhr.removeEventListener("doopety", function(event) {}, false); michael@0: michael@0: xhr.onloadend = function(event) { michael@0: var message = { type: "loadend" }; michael@0: postMessage(message); michael@0: } michael@0: michael@0: var upload = xhr.upload; michael@0: upload.onprogress = function(event) { }; michael@0: upload.addEventListener("foo", function(event) { }, false); michael@0: upload.removeEventListener("foo", function(event) { }, false); michael@0: upload.addEventListener("load", function(event) { }, false); michael@0: upload.removeEventListener("foo", function(event) { }, false); michael@0: upload.onload = function(event) { michael@0: var message = { type: "upload.load" }; michael@0: postMessage(message); michael@0: } michael@0: michael@0: onmessage = function(event) { michael@0: if (xhr.DONE != 4 || XMLHttpRequest.DONE != 4) { michael@0: throw "xhr constants not correct!"; michael@0: } michael@0: if (xhr.readystate > xhr.UNSENT) { michael@0: throw "XHR already running!"; michael@0: } michael@0: xhr.open("POST", event.data); michael@0: xhr.send("Data to send"); michael@0: }