<html>
<body>
<p>Test that offline applications work when there is no network access (simulated).</p>
<p>Should say SUCCESS:</p>
<div id=result></div>

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

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

function setNetworkEnabled(state)
{
    var req = new XMLHttpRequest;
    req.open("GET", "/resources/network-simulator.php?test=appcache-offline-access&command=" + (state ? "connect" : "disconnect"), false);
    req.send("");
}

function createFrame()
{
    var ifr = document.createElement("iframe");
    ifr.setAttribute("src", "/resources/network-simulator.php?test=appcache-offline-access&path=/appcache/resources/offline-access-frame.html");
    document.body.appendChild(ifr);
}

function frameCreated()
{
    if (stage == 0) {
        stage = 1;
        setNetworkEnabled(false);
        createFrame();
    } else if (stage == 1) {
        stage = 2;
        setNetworkEnabled(true);
        createFrame();
    } else {
        log("SUCCESS");
        if (window.testRunner)
            testRunner.notifyDone()
    }
}

window.addEventListener("message", frameCreated, false);

var stage = 0;
setNetworkEnabled(true);
createFrame();

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