summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/ajax/offline/test_lowDeviceStorage.html
blob: d03ef5a12fb8b1d07091d48dfd22d6c3263d13d1 (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
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Low device storage</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">

/**
 * This test checks that an offline cache update scheduled *after* a low device
 * storage situation appears is canceled. It basically does:
 *
 * 1. Notifies to the offline cache update service about a fake
 *    low device storage situation.
 * 2. Schedules an update and observes for its notifications.
 * 3. We are supposed to receive an error event notifying about the cancelation
 *    of the update because of the low storage situation.
 * 4. Notifies to the offline cache update service that we've recovered from
 *    the low storage situation.
 */

var updateService = SpecialPowers.Cc['@mozilla.org/offlinecacheupdate-service;1']
                                 .getService(Ci.nsIOfflineCacheUpdateService);

var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"]
                       .getService(SpecialPowers.Ci.nsIObserverService);

var errorReceived = false;

var systemPrincipal = SpecialPowers.Services.scriptSecurityManager.getSystemPrincipal();

function finish() {
  obs.notifyObservers(updateService, "disk-space-watcher", "free");

  OfflineTest.teardownAndFinish();
}

if (OfflineTest.setup()) {
  obs.notifyObservers(updateService, "disk-space-watcher", "full");

  var updateObserver = {
    updateStateChanged: function (aUpdate, aState) {
      switch(aState) {
        case Ci.nsIOfflineCacheUpdateObserver.STATE_ERROR:
          errorReceived = true;
          OfflineTest.ok(true, "Expected error. Update canceled");
        break;
        case Ci.nsIOfflineCacheUpdateObserver.STATE_FINISHED:
          aUpdate.removeObserver(this);
          OfflineTest.ok(errorReceived,
                         "Finished after receiving the expected error");
          finish();
        break;
        case Ci.nsIOfflineCacheUpdateObserver.STATE_NOUPDATE:
          aUpdate.removeObserver(this);
          OfflineTest.ok(false, "No update");
          finish();
          break;
        case Ci.nsIOfflineCacheUpdateObserver.STATE_DOWNLOADING:
        case Ci.nsIOfflineCacheUpdateObserver.STATE_ITEMSTARTED:
        case Ci.nsIOfflineCacheUpdateObserver.STATE_ITEMPROGRESS:
          aUpdate.removeObserver(this);
          OfflineTest.ok(false, "The update was supposed to be canceled");
          finish();
          break;
      }
    },
    applicationCacheAvailable: function() {}
  };

  var manifest = "http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/simpleManifest.cacheManifest";
  var ioService = Cc["@mozilla.org/network/io-service;1"]
                  .getService(Ci.nsIIOService);
  var manifestURI = ioService.newURI(manifest, null, null);
  var documentURI = ioService.newURI(document.documentURI, null, null);
  var update = updateService.scheduleUpdate(manifestURI, documentURI, systemPrincipal, window);
  update.addObserver(updateObserver, false);
}

SimpleTest.waitForExplicitFinish();

</script>

</head>

<body>

</body>
</html>