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