summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/ajax/offline/test_simpleManifest.html
blob: 508bcb51652bc3366ea7b65344486d36f4f2ed42 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<html xmlns="http://www.w3.org/1999/xhtml" manifest="http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/simpleManifest.cacheManifest">
<head>
<title>simple manifest test</title>

<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="/tests/dom/tests/mochitest/ajax/offline/offlineTests.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />

<script type="text/javascript">

var gGotChecking = false;
var gGotDownloading = false;

ok(applicationCache.mozItems.length == 0,
   "applicationCache.mozItems should be available and empty before associating with a cache.");

function addFinished()
{
  OfflineTest.ok(applicationCache.mozLength == 1, "applicationCache should have one dynamic entry (deprecated API)");
  OfflineTest.ok(applicationCache.mozItem(0) == "http://mochi.test:8888/tests/SimpleTest/EventUtils.js",
    "applicationCache's dynamic entry should be the one we expect (deprecated API)");

  OfflineTest.ok(applicationCache.mozItems.length == 1, "applicationCache should have one dynamic entry");
  OfflineTest.ok(applicationCache.mozItems[0] == "http://mochi.test:8888/tests/SimpleTest/EventUtils.js",
    "applicationCache's dynamic entry should be the one we expect");

  OfflineTest.ok(applicationCache.mozHasItem("http://mochi.test:8888/tests/SimpleTest/EventUtils.js"),
                 "applicationCache.mozHasItem() should see the dynamic entry");

  // Check that the entry was added successfully
  OfflineTest.checkCache("http://mochi.test:8888/tests/SimpleTest/EventUtils.js",
                         true,
                         removeItem);
}

function removeItem()
{
  // Now test that removes work
  applicationCache.mozRemove("http://mochi.test:8888/tests/SimpleTest/EventUtils.js");

  OfflineTest.ok(applicationCache.mozLength == 0,
                 "applicationCache should have no dynamic entries (deprecated API)");
  OfflineTest.ok(applicationCache.mozItems.length == 0,
                 "applicationCache should have no dynamic entries");
  OfflineTest.ok(!applicationCache.mozHasItem("http://mochi.test:8888/tests/SimpleTest/EventUtils.js"),
                 "applicationCache.mozHasItem() should not see the removed dynamic entry");

  OfflineTest.checkCache("http://mochi.test:8888/tests/SimpleTest/EventUtils.js",
                         false,
                         function() {
                           // We're done
                           OfflineTest.teardownAndFinish();
                         });
}

function manifestUpdated()
{
  OfflineTest.ok(gGotChecking, "Should get a checking event");
  OfflineTest.ok(gGotDownloading, "Should get a downloading event");

  OfflineTest.is(applicationCache.status, 1, "Cache status should be 1 (CACHED)");

  var entries = [
    // The manifest itself should be in the cache
    ["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/simpleManifest.cacheManifest", true],

    // The document that requested the manifest should be in the cache
    [window.location.href, true],

    // The entries from the manifest should be in the cache
    ["http://mochi.test:8888/tests/SimpleTest/SimpleTest.js", true],
    ["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/offlineTests.js", true],

    // The bad entries from the manifest should not be in the cache
    ["bad:/uri/invalid", false]
  ];
  OfflineTest.checkCacheEntries(
    entries,
    function() {
      try {
        applicationCache.swapCache();
        OfflineTest.ok(false, "application.swapCache() should fail after initial update.");
      } catch(ex) {
        OfflineTest.ok(true, "application.swapCache() should fail after initial update.");
      }

      // XXX: make sure that the previous version went away after the swapCache().

      // Now add a file using the applicationCache API
      applicationCache.mozAdd("http://mochi.test:8888/tests/SimpleTest/EventUtils.js");

      // Wait for the add() to be downloaded
      OfflineTest.waitForAdd("http://mochi.test:8888/tests/SimpleTest/EventUtils.js",
                             OfflineTest.priv(addFinished));
    });
}

if (OfflineTest.setup()) {
  OfflineTest.ok(applicationCache instanceof EventTarget,
                 "applicationCache should be an event target");

  applicationCache.onerror = OfflineTest.failEvent;

  applicationCache.addEventListener("checking", function() {
    // We should get the "checking" event during an initial update,
    // but until we are associated it will not affect applicationCache.status
    OfflineTest.is(applicationCache.status, applicationCache.UNCACHED,
                   "CHECKING state during initial update");
    gGotChecking = true;
    }, true);
  applicationCache.ondownloading = function() {
    // We should get the "downloading" event during an initial update,
    // but until we are associated it will not affect applicationCache.status
    OfflineTest.is(applicationCache.status, applicationCache.UNCACHED,
                   "DOWNLOADING state during initial update")
    gGotDownloading = true; };
  applicationCache.oncached = OfflineTest.priv(manifestUpdated);
}

SimpleTest.waitForExplicitFinish();
SimpleTest.requestFlakyTimeout("untriaged");

</script>

</head>

<body>

</body>
</html>