<html manifest="resources/fallback.manifest"> <body> <p>Test application cache fallback entries.</p> <p>Should say SUCCESS:</p> <div id=result></div> <script> if (window.layoutTestController) { layoutTestController.dumpAsText(); layoutTestController.waitUntilDone(); } var hadError = false; function log(message) { document.getElementById("result").innerHTML += message + "<br>"; } function setNetworkEnabled(state) { try { var req = new XMLHttpRequest; req.open("GET", "/resources/network-simulator.php?command=" + (state ? "connect" : "disconnect"), false); req.send(""); } catch (ex) { log("Cannot access network simulator URL"); hadError = true; } } function load(url) { try { var req = new XMLHttpRequest(); req.open("GET", url, false); req.send(""); return req.responseText; } catch (ex) { log("FAIL: Cannot load " + url + ", ex = " + ex); hadError = true; return ""; // This value should not be expected as the responseText for a url presented to this function. } } var testURL = "/resources/network-simulator.php?path=/appcache/resources/not-in-cache.txt"; var nonexistentURL = "resources/does-not-exist"; var redirectURL = "resources/fallback-redirect.php"; function test() { applicationCache.onnoupdate = function() { log("FAIL: received unexpected noupdate event") } applicationCache.oncached = function() { log("FAIL: received unexpected cached event") } setNetworkEnabled(true); if (!/not in the cache/.test(load(testURL))) { log("FAIL: Cannot load an URL from fallback namespace when network is enabled"); hadError = true; } if (load(nonexistentURL) != "Hello, World!") { log("FAIL: Fallback resource wasn't used for a 404 response"); hadError = true; } if (load(redirectURL) != "Hello, World!") { log("FAIL: Fallback resource wasn't used for a redirect to a resource with another origin"); hadError = true; } test2(); } function test2() { var req = new XMLHttpRequest; req.open("GET", nonexistentURL); req.onerror = function() { log("FAIL: Fallback resource wasn't used for a 404 response (async)"); hadError = true; test3(); } req.onload = function() { if (req.responseText != "Hello, World!") { log("FAIL: Unexpected result for a 404 response (async)"); hadError = true; } test3(); } req.send(""); } function test3() { var req = new XMLHttpRequest; req.open("GET", redirectURL); req.onerror = function() { log("FAIL: Fallback resource wasn't used for a redirect to a resource with another origin (async)"); hadError = true; test4(); } req.onload = function() { if (req.responseText != "Hello, World!") { log("FAIL: Unexpected result for a redirect response (async)"); hadError = true; } test4(); } req.send(""); } function test4() { // Try loading a fallback resource as main one. applicationCache.onnoupdate = test5; var ifr = document.createElement("iframe"); ifr.setAttribute("src", nonexistentURL); document.body.appendChild(ifr); } function test5() { if (!/Hello, World/.test(window.frames[0].document.documentElement.innerHTML)) { log("FAIL: Fallback URL was not honored for main resource"); hadError = true; } test6(); } function test6() { setNetworkEnabled(false); if (load(testURL) != load("resources/simple.txt")) { log("FAIL: Loading an URL from fallback namespace when network is disabled returned unexpected response"); hadError = true; } log(hadError ? "FAILURE" : "SUCCESS"); if (window.layoutTestController) layoutTestController.notifyDone(); } 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") } </script> </body> </html>