• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html manifest="resources/fallback.manifest">
2<body>
3<p>Test application cache fallback entries.</p>
4<p>Should say SUCCESS:</p>
5<div id=result></div>
6
7<script>
8if (window.layoutTestController) {
9    layoutTestController.dumpAsText();
10    layoutTestController.waitUntilDone();
11}
12
13var hadError = false;
14
15function log(message)
16{
17    document.getElementById("result").innerHTML += message + "<br>";
18}
19
20function setNetworkEnabled(state)
21{
22    try {
23        var req = new XMLHttpRequest;
24        req.open("GET", "/resources/network-simulator.php?command=" + (state ? "connect" : "disconnect"), false);
25        req.send("");
26    } catch (ex) {
27        log("Cannot access network simulator URL");
28        hadError = true;
29    }
30}
31
32function load(url)
33{
34    try {
35        var req = new XMLHttpRequest();
36        req.open("GET", url, false);
37        req.send("");
38        return req.responseText;
39    } catch (ex) {
40        log("FAIL: Cannot load " + url + ", ex = " + ex);
41        hadError = true;
42        return ""; // This value should not be expected as the responseText for a url presented to this function.
43    }
44}
45
46var testURL = "/resources/network-simulator.php?path=/appcache/resources/not-in-cache.txt";
47var nonexistentURL = "resources/does-not-exist";
48var redirectURL = "resources/fallback-redirect.php";
49
50function test()
51{
52    applicationCache.onnoupdate = function() { log("FAIL: received unexpected noupdate event") }
53    applicationCache.oncached = function() { log("FAIL: received unexpected cached event") }
54
55    setNetworkEnabled(true);
56
57    if (!/not in the cache/.test(load(testURL))) {
58        log("FAIL: Cannot load an URL from fallback namespace when network is enabled");
59        hadError = true;
60    }
61
62    if (load(nonexistentURL) != "Hello, World!") {
63        log("FAIL: Fallback resource wasn't used for a 404 response");
64        hadError = true;
65    }
66
67    if (load(redirectURL) != "Hello, World!") {
68        log("FAIL: Fallback resource wasn't used for a redirect to a resource with another origin");
69        hadError = true;
70    }
71
72    test2();
73}
74
75function test2()
76{
77    var req = new XMLHttpRequest;
78    req.open("GET", nonexistentURL);
79    req.onerror = function() {
80        log("FAIL: Fallback resource wasn't used for a 404 response (async)");
81        hadError = true;
82        test3();
83    }
84    req.onload = function() {
85        if (req.responseText != "Hello, World!") {
86            log("FAIL: Unexpected result for a 404 response (async)");
87            hadError = true;
88        }
89        test3();
90    }
91
92    req.send("");
93}
94
95function test3()
96{
97    var req = new XMLHttpRequest;
98    req.open("GET", redirectURL);
99    req.onerror = function() {
100        log("FAIL: Fallback resource wasn't used for a redirect to a resource with another origin (async)");
101        hadError = true;
102        test4();
103    }
104    req.onload = function() {
105        if (req.responseText != "Hello, World!") {
106            log("FAIL: Unexpected result for a redirect response (async)");
107            hadError = true;
108        }
109        test4();
110    }
111
112    req.send("");
113}
114
115function test4()
116{
117    // Try loading a fallback resource as main one.
118
119    applicationCache.onnoupdate = test5;
120
121    var ifr = document.createElement("iframe");
122    ifr.setAttribute("src", nonexistentURL);
123    document.body.appendChild(ifr);
124}
125
126function test5()
127{
128    if (!/Hello, World/.test(window.frames[0].document.documentElement.innerHTML)) {
129        log("FAIL: Fallback URL was not honored for main resource");
130        hadError = true;
131    }
132    test6();
133}
134
135function test6()
136{
137    setNetworkEnabled(false);
138
139    if (load(testURL) != load("resources/simple.txt")) {
140        log("FAIL: Loading an URL from fallback namespace when network is disabled returned unexpected response");
141        hadError = true;
142    }
143
144    log(hadError ? "FAILURE" : "SUCCESS");
145    if (window.layoutTestController)
146        layoutTestController.notifyDone();
147}
148
149applicationCache.onnoupdate = function() { test() }
150applicationCache.oncached = function() { test() }
151
152applicationCache.onupdateready = function() { log("FAIL: received unexpected updateready event") }
153applicationCache.onerror = function() { log("FAIL: received unexpected error event") }
154
155</script>
156</body>
157</html>
158