<html manifest="resources/foreign-fallback.manifest">
<body>
<p>Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=44406">bug 44406</a>:
Application Cache crash when a fallback document has a manifest URL.</p>
<div id="result">Testing...</div>
<script>
if (window.testRunner) {
    testRunner.waitUntilDone();
    testRunner.dumpAsText();
}


applicationCache.addEventListener('cached', test, false);
applicationCache.addEventListener('noupdate', test, false);

function test()
{
    var ifr = document.createElement("iframe");
    ifr.setAttribute("src", "resources/foreign-fallback/does-not-exist.html");
    document.body.appendChild(ifr);

    // I couldn't find any event that would fire on frame loading failure, so let's poll.
    setTimeout(frameDone, 100);
}

function frameDone()
{
    try {
        var frameContent = frames[0].document.documentElement.innerHTML;
        if (frameContent.match("Not Found"))
            document.getElementById("result").innerHTML = "PASS";
        else if (frameContent.match("FAIL"))
            document.getElementById("result").innerHTML = "FAIL";
        else
            throw "Try again";

        if (window.testRunner)
            testRunner.notifyDone();
    } catch (ex) {
        // Not done yet.
        setTimeout(frameDone, 100);
    }
}

</script>
<p>The frame below should display a Not Found error - the fallback entry is foreign, so it shouldn't be used for main resource.</p>
</body>
</html>
