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: function runTest() { michael@0: var xhr = new XMLHttpRequest(); michael@0: michael@0: var events = []; michael@0: function pushEvent(event) { michael@0: var readyState, responseText, status, statusText; michael@0: michael@0: try { michael@0: readyState = xhr.readyState; michael@0: } michael@0: catch (e) { michael@0: readyState = "[exception]"; michael@0: } michael@0: michael@0: try { michael@0: responseText = xhr.responseText; michael@0: } michael@0: catch (e) { michael@0: responseText = "[exception]"; michael@0: } michael@0: michael@0: try { michael@0: status = xhr.status; michael@0: } michael@0: catch (e) { michael@0: status = "[exception]"; michael@0: } michael@0: michael@0: try { michael@0: statusText = xhr.statusText; michael@0: } michael@0: catch (e) { michael@0: statusText = "[exception]"; michael@0: } michael@0: michael@0: var str = event.type + "(" + readyState + ", '" + responseText + "', " + michael@0: status + ", '" + statusText + "'"; michael@0: if ((("ProgressEvent" in this) && event instanceof ProgressEvent) || michael@0: (("WorkerProgressEvent" in this) && event instanceof WorkerProgressEvent)) { michael@0: str += ", progressEvent"; michael@0: } michael@0: str += ")"; michael@0: michael@0: events.push(str); michael@0: } michael@0: michael@0: xhr.onerror = function(event) { michael@0: throw new Error("Error: " + xhr.statusText); michael@0: } michael@0: michael@0: xhr.onload = function(event) { michael@0: throw new Error("Shouldn't have gotten load event!"); michael@0: }; michael@0: michael@0: var seenAbort; michael@0: xhr.onabort = function(event) { michael@0: if (seenAbort) { michael@0: throw new Error("Already seen the abort event!"); michael@0: } michael@0: seenAbort = true; michael@0: michael@0: pushEvent(event); michael@0: postMessage(events); michael@0: }; michael@0: michael@0: xhr.onreadystatechange = function(event) { michael@0: pushEvent(event); michael@0: if (xhr.readyState == xhr.HEADERS_RECEIVED) { michael@0: xhr.abort(); michael@0: } michael@0: }; michael@0: michael@0: xhr.open("GET", "testXHR.txt"); michael@0: xhr.overrideMimeType("text/plain"); michael@0: xhr.send(null); michael@0: } michael@0: michael@0: function messageListener(event) { michael@0: switch (event.data) { michael@0: case "start": michael@0: runTest(); michael@0: break; michael@0: default: michael@0: throw new Error("Bad message!"); michael@0: } michael@0: } michael@0: michael@0: addEventListener("message", messageListener, false);