<html xmlns="http://www.w3.org/1999/xhtml" manifest="http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingManifest.sjs"> <head> <title>Cache update 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 class="testbody" type="text/javascript"> /* * The test is checking nsIOfflineCacheUpdateService.checkForUpdate API: * - cache a manifest * - check for an update of it, expected is "no update avail" * - modify the manifest on the server * - check for an update again, expected is "update avail" * - check for an update ones again, expected is "update avail" (secondary check to probe * we didn't screw state of the manifest in the current cache with the first check) * - cache the modified manifest, new version is now in the cache * - last check for an update, expected is "no update avail" again */ SimpleTest.waitForExplicitFinish(); var manifest = "http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingManifest.sjs"; var manifestURI = Cc["@mozilla.org/network/io-service;1"] .getService(Ci.nsIIOService) .newURI(manifest, null, null); var updateService = Cc['@mozilla.org/offlinecacheupdate-service;1'] .getService(Ci.nsIOfflineCacheUpdateService); var systemPrincipal = SpecialPowers.Services.scriptSecurityManager.getSystemPrincipal(); function manifestCached() { // Run first check for an update updateService.checkForUpdate(manifestURI, systemPrincipal, { observe: function(subject, topic, data) { OfflineTest.is(topic, "offline-cache-update-unavailable", "No update avail"); // Change the manifest content OfflineTest.setSJSState(manifest, "second"); // Check we now get notification on update ready updateService.checkForUpdate(manifestURI, systemPrincipal, { observe: function(subject, topic, data) { OfflineTest.is(topic, "offline-cache-update-available", "Update avail (1)"); // Do the check again. We must get the same result. Double check is here // to make sure we don't overwrite any data in the cache by the check it self. updateService.checkForUpdate(manifestURI, systemPrincipal, { observe: function(subject, topic, data) { OfflineTest.is(topic, "offline-cache-update-available", "Update avail (2)"); // Update the manifest, invokes manifestUpdated() applicationCache.onupdateready = OfflineTest.priv(manifestUpdated); applicationCache.update(); } }); } }); } }); } function manifestUpdated() { // Check for an update after manifest has been updated updateService.checkForUpdate(manifestURI, systemPrincipal, { observe: function(subject, topic, data) { OfflineTest.is(topic, "offline-cache-update-unavailable", "No update avail (2)"); OfflineTest.teardownAndFinish(); } }); } if (OfflineTest.setup()) { applicationCache.onerror = OfflineTest.failEvent; applicationCache.oncached = OfflineTest.priv(manifestCached); } </script> </head> <body> </body> </html>