<html manifest="resources/subframes-2.manifest">
<body>
<p>Test that a subframe without manifest gets picked by a relevant application cache that
contains its resource.</p>
<p>Should say SUCCESS:</p>
<div id=result></div>

<script>
if (window.layoutTestController) {
    layoutTestController.dumpAsText();
    layoutTestController.waitUntilDone();
}

function log(message)
{
    document.getElementById("result").innerHTML += message + "<br>";
}

function debug(message)
{
    // If running manually in the browser, print the sequence of events.
    if (!window.layoutTestController)
        log(message);
}

var receivedExpectedMessage = false;
var receivedCheckingEvent = false;
var receivedNoupdateEvent = false;

function checkDone()
{
    if (receivedExpectedMessage && receivedCheckingEvent && receivedNoupdateEvent) {
        log("SUCCESS");
        if (window.layoutTestController)
            layoutTestController.notifyDone();
    }
}

function test()
{
    applicationCache.onnoupdate = null;
    applicationCache.oncached = null;

    // When a new main resource is associated with the cache, an update should be started.
    applicationCache.onchecking = function() { debug("checking"); receivedCheckingEvent = true; checkDone();  }
    applicationCache.onnoupdate = function() { debug("noupdate"); receivedNoupdateEvent = true; checkDone();  }

    var ifr = document.createElement("iframe");
    ifr.setAttribute("src", "resources/subframe-2.html");
    document.body.appendChild(ifr);
}

applicationCache.onnoupdate = function() { test() }
applicationCache.oncached = function() { test() }

applicationCache.onupdateready = function() { log("FAIL: received unexpected updateready event") }
applicationCache.onerror = function() { log("FAIL: received unexpected error event") }

window.addEventListener("message", function() { debug("message"); receivedExpectedMessage = true; checkDone(); }, false);

</script>
</body>
</html>
