Skip to content
This repository has been archived by the owner on Apr 10, 2024. It is now read-only.

Commit

Permalink
Bug 861894 - Avoid apps to schedule new offline cache downloads while…
Browse files Browse the repository at this point in the history
… device free space is low. Tests. r=honzab, a=tef+
  • Loading branch information
ferjm committed May 10, 2013
1 parent ab3e576 commit 1770344
Show file tree
Hide file tree
Showing 4 changed files with 154 additions and 0 deletions.
2 changes: 2 additions & 0 deletions dom/tests/mochitest/ajax/offline/Makefile.in
Expand Up @@ -97,6 +97,8 @@ MOCHITEST_FILES = \
missing.html \
jupiter.jpg \
test_cancelOfflineCache.html \
test_lowDeviceStorage.html \
test_lowDeviceStorageDuringUpdate.html \
$(NULL)

# test_offlineMode.html disabled due to bug 656943
Expand Down
91 changes: 91 additions & 0 deletions dom/tests/mochitest/ajax/offline/test_lowDeviceStorage.html
@@ -0,0 +1,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 recieve 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;

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

OfflineTest.teardown();
OfflineTest.finish();
}

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

var updateObserver = {
updateStateChanged: function (aUpdate, aState) {
switch(aState) {
case Ci.nsIOfflineCacheUpdateObserver.STATE_ERROR:
aUpdate.removeObserver(this);
errorReceived = true;
OfflineTest.ok(true, "Expected error. Update canceled");
finish();
break;
case Ci.nsIOfflineCacheUpdateObserver.STATE_FINISHED:
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, window);
update.addObserver(updateObserver, false);
}

SimpleTest.waitForExplicitFinish();

</script>

</head>

<body>

</body>
</html>
@@ -0,0 +1,59 @@
<html xmlns="http://www.w3.org/1999/xhtml" manifest="http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/simpleManifest.cacheManifest">
<head>
<title>Low device storage during update</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 is canceled when a low device
* storage condition is detected during the update.
*/

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

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

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

OfflineTest.teardown();
OfflineTest.finish();
}

function onError() {
OfflineTest.ok(true, "Expected error: Update canceled");
finish();
}

function onUnexpectedEvent() {
OfflineTest.ok(false, "The update was supposed to be canceled");
finish();
}

function onChecking() {
obs.notifyObservers(updateService, "disk-space-watcher", "full");
}

if (OfflineTest.setup()) {
applicationCache.onerror = OfflineTest.priv(onError);
applicationCache.onprogress = OfflineTest.priv(onUnexpectedEvent);
applicationCache.oncached = OfflineTest.priv(onUnexpectedEvent);
applicationCache.onchecking = OfflineTest.priv(onChecking);
}

SimpleTest.waitForExplicitFinish();

</script>

</head>

<body>

</body>
</html>
2 changes: 2 additions & 0 deletions testing/mochitest/b2g.json
Expand Up @@ -8,6 +8,8 @@
"layout": ""
},
"excludetests": {
"dom/tests/mochitest/ajax/offline/test_lowDeviceStorage.html":"",
"dom/tests/mochitest/ajax/offline/test_lowDeviceStorageDuringUpdate.html":"",
"dom/tests/mochitest/dom-level0/test_innerWidthHeight_script.html": "bug 807137",
"layout/base/tests/test_after_paint_pref.html": "bug 823429",
"layout/base/tests/test_bug450930.xhtml" : "times out",
Expand Down

0 comments on commit 1770344

Please sign in to comment.