diff options
Diffstat (limited to 'LayoutTests/http/tests/appcache/fallback.html')
-rw-r--r-- | LayoutTests/http/tests/appcache/fallback.html | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/LayoutTests/http/tests/appcache/fallback.html b/LayoutTests/http/tests/appcache/fallback.html new file mode 100644 index 0000000..aaf7a82 --- /dev/null +++ b/LayoutTests/http/tests/appcache/fallback.html @@ -0,0 +1,171 @@ +<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 canLoad(url) +{ + try { + var req = new XMLHttpRequest(); + req.open("GET", url, false); + req.send(""); + return true; + } catch (e) { + return false; + } +} + +function load(url) +{ + try { + var req = new XMLHttpRequest(); + req.open("GET", url, false); + req.send(""); + return req.responseText; + } catch (ex) { + alert("Unexpected error loading " + url + ": " + ex); + hadError = true; + } +} + +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 (!canLoad(testURL) || !/not in the cache/.test(load(testURL))) { + log("FAIL: Cannot load an URL from fallback namespace when network is enabled"); + hadError = true; + } + + if (!canLoad(nonexistentURL) || load(nonexistentURL) != "Hello, World!") { + log("FAIL: Fallback resource wasn't used for a 404 response"); + hadError = true; + } + + if (!canLoad(redirectURL) || 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 (!canLoad(testURL)) { + log("FAIL: Cannot load an URL from fallback namespace when network is disabled"); + hadError = true; + } else 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> |