<html manifest="resources/abort-cache-onchecking-resource-404.manifest">
<script>
if (window.testRunner) {
    testRunner.dumpAsText()
    testRunner.waitUntilDone();
}

function log(message) {
    document.getElementById("result").innerHTML += message + "\n";
}

function onchecking() {
    applicationCache.abort(); 
}

function onnoupdate() {
    log("FAILURE");
    log("noupdate");
    if (window.testRunner)
        testRunner.notifyDone();
}

function oncached() {
    log("FAILURE");
    log("CACHED");
    if (window.testRunner)
        testRunner.notifyDone();
}

function onupdateready() {
    log("FAILURE");
    log("UPDATEREADY");
    if (window.testRunner)
        testRunner.notifyDone();
}

function onerror() {
    log("SUCCESS");
    if (window.testRunner)
        testRunner.notifyDone();
}

applicationCache.addEventListener('checking', onchecking, false);
applicationCache.addEventListener('noupdate', onnoupdate, false);
applicationCache.addEventListener('cached', oncached, false);
applicationCache.addEventListener('error', onerror, false);
applicationCache.addEventListener('updateready', onupdateready, false);

</script>

<div>This tests that download process was aborted after checking event and before update failed.</div>
<div id="result"></div>
</html>

