• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html manifest="resources/fail-on-update.php">
2<p>Test that a 404 response for manifest results in cache removal.</p>
3<body>
4<ul>
5<li>Frame 1: Manifest is still available, so a new master resource is added to the cache.
6<li>Frame 2: Manifest loading results in 404 response, so the cache group becomes obsolete, and an obsolete event is dispatched (because the document in frame was associated with a cache in the group).
7<li>Frame 3: Manifest is still 404 - the document is never associated with a cache.
8<li>Frame 4: Manifest is now available, so the document gets associated with a cache in a newly created group; the obsolete cache group is not affected.
9</ul>
10<p>Should say SUCCESS:</p>
11<div id=result></div>
12
13<script>
14if (window.layoutTestController) {
15    layoutTestController.dumpAsText();
16    layoutTestController.waitUntilDone();
17}
18
19function log(message)
20{
21    document.getElementById("result").innerHTML += message + "<br>";
22}
23
24function setManifestDeleted(state)
25{
26    var req = new XMLHttpRequest;
27    req.open("GET", "resources/fail-on-update.php?command=" + (state ? "delete" : "reset"), false);
28    req.send(null);
29}
30
31function test()
32{
33    clearTimeout(timeoutId);
34
35    // The frame will be associated to a cache, and its main resource will be added to the cache.
36    var ifr = document.createElement("iframe");
37    ifr.setAttribute("src", "resources/remove-cache-frame.html");
38    document.body.appendChild(ifr);
39    applicationCache.onnoupdate = test2;
40}
41
42function test2()
43{
44    applicationCache.onnoupdate = function() { log("Unexpected noupdate event") }
45    applicationCache.oncached = function() { log("Unexpected cached event") }
46
47    setManifestDeleted(true);
48    // The frame will be associated to a cache, but update will obsolete it.
49    var ifr = document.createElement("iframe");
50    ifr.setAttribute("src", "resources/remove-cache-frame.html");
51    document.body.appendChild(ifr);
52    applicationCache.onobsolete = test3;
53}
54
55function test3()
56{
57    applicationCache.onchecking = function() { log("Unexpected checking event after obsolete event") }
58    applicationCache.onupdateready = function() { log("Unexpected updateready event after obsolete event") }
59    applicationCache.onerror = function() { log("Unexpected error event after obsolete event") }
60    applicationCache.onnoupdate = function() { log("Unexpected noupdate event after obsolete event") }
61    applicationCache.oncached = function() { log("Unexpected cached event after obsolete event") }
62
63    // The frame will not be associated to a cache.
64    var ifr = document.createElement("iframe");
65    ifr.setAttribute("src", "resources/remove-cache-frame.html");
66    document.body.appendChild(ifr);
67    window.addEventListener("message", test4, false);
68}
69
70function test4()
71{
72    setManifestDeleted(false);
73
74    window.removeEventListener("message", test4, false);
75    applicationCache.onupdateready = null;
76
77    // The frame will be associated to a cache.
78    var ifr = document.createElement("iframe");
79    ifr.setAttribute("src", "resources/remove-cache-frame-2.html");
80    document.body.appendChild(ifr);
81    window.addEventListener("message", test5, false);
82}
83
84function test5()
85{
86    log("SUCCESS");
87    if (window.layoutTestController)
88        layoutTestController.notifyDone();
89}
90
91function resetManifest()
92{
93    if (applicationCache.status != applicationCache.UNCACHED && applicationCache.status != applicationCache.OBSOLETE) {
94        timeoutId = setTimeout(resetManifest, 100);
95        return;
96    }
97
98    setManifestDeleted(false);
99    location.reload();
100}
101
102applicationCache.onupdateready = function() { log("Unexpected updateready event") }
103applicationCache.onnoupdate = test;
104applicationCache.oncached = test;
105
106// If the manifest script happened to be in a wrong state, reset it.
107var timeoutId = setTimeout(resetManifest, 100);
108
109</script>
110</body>
111</html>
112