• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html manifest="resources/fail-on-update-2.php">
2<script>
3if (window.layoutTestController) {
4    layoutTestController.dumpAsText();
5    layoutTestController.waitUntilDone();
6}
7
8function setManifestDeleted(state)
9{
10    var req = new XMLHttpRequest;
11    req.open("GET", "resources/fail-on-update.php?command=" + (state ? "delete" : "reset"), false);
12    req.send(null);
13}
14
15function test()
16{
17    clearTimeout(timeoutId);
18
19    setManifestDeleted(true);
20    applicationCache.update();
21
22    // Create two subframes at different times to make hitting the race condition more likely.
23    var ifr = document.createElement("iframe");
24    ifr.setAttribute("src", 'resources/fail-on-update-2.html');
25    document.body.appendChild(ifr);
26
27    setTimeout(function() {
28        var ifr = document.createElement("iframe");
29        ifr.setAttribute("src", 'resources/fail-on-update-2.html');
30        document.body.appendChild(ifr);
31    }, 0);
32}
33
34var subframesLeft = 2;
35function subframeLoaded()
36{
37    if (!--subframesLeft) {
38        document.write('<p>SUCCESS: No crash.</p>');
39        if (window.layoutTestController)
40            layoutTestController.notifyDone();
41    }
42}
43
44function resetManifest()
45{
46    if (applicationCache.status != applicationCache.UNCACHED && applicationCache.status != applicationCache.OBSOLETE) {
47        timeoutId = setTimeout(resetManifest, 100);
48        return;
49    }
50
51    setManifestDeleted(false);
52    location.reload();
53}
54
55applicationCache.addEventListener('noupdate', function() { setTimeout(test, 0) }, false);
56applicationCache.addEventListener('cached', function() { setTimeout(test, 0) }, false);
57
58// If the manifest script happened to be in a wrong state, reset it.
59var timeoutId = setTimeout(resetManifest, 100);
60
61</script>
62<p>Test for a particular incorrect assertion failure.</p>
63
64</html>
65