<!doctype html>
<html>
<body>
<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function log(str)
{
    document.body.appendChild(document.createTextNode(str));
    document.body.appendChild(document.createElement("br"));
}

function addElement(e)
{
    var txt = (e && e.type) || "insertedText";
    log(txt);
}
document.addEventListener("DOMContentLoaded", addElement, false);

var abortDispatched = false;
function reportResult()
{
    log(abortDispatched ? "PASS" : "FAIL");
    testRunner.notifyDone();
}

window.onload = function () {
    xhr.open("GET", "", true);
    setTimeout(reportResult, 100);
};

var xhr = new XMLHttpRequest();
xhr.onabort = function () {
    abortDispatched = true;
};

function sendAndAbort()
{
    xhr.open("GET", "", true);
    xhr.send();
    xhr.abort();
}
window.addEventListener("DOMSubtreeModified", sendAndAbort);
addElement();
</script>
Reentrancy, cancellation and explicit abort. Check that we don't crash
and report the expected abort event.<br/>
</body>
</html>
