summaryrefslogtreecommitdiffstats
path: root/LayoutTests/http/tests/appcache/fallback.html
diff options
context:
space:
mode:
Diffstat (limited to 'LayoutTests/http/tests/appcache/fallback.html')
-rw-r--r--LayoutTests/http/tests/appcache/fallback.html171
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>