<html manifest="resources/subframes-4.manifest">
<body>
<p>Test that a subframe with manifest that matches top frame manifest works correctly.</p>
<p>In this case, the subframe resource is listed in manifest explicitly.</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 receivedCheckingEventsCounter = 0;
var receivedNoupdateEventsCounter = 0;

function checkDone()
{
    if (receivedExpectedMessage && receivedCheckingEventsCounter == 2 && receivedNoupdateEventsCounter == 2) {
        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"); receivedCheckingEventsCounter++; checkDone() }
    applicationCache.onnoupdate = function() { debug("noupdate"); receivedNoupdateEventsCounter++; checkDone();  }

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

function test2()
{
    window.removeEventListener("message", test2, false);
    window.addEventListener("message", test3, false);

    // Add an identical frame, to test that loading its resources from appcache works.
    var ifr = document.createElement("iframe");
    ifr.setAttribute("src", "resources/subframe-4.html");
    document.body.appendChild(ifr);
}

function test3()
{
    debug("message");
    receivedExpectedMessage = true;
    checkDone();
}

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", test2, false);

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