diff options
Diffstat (limited to 'dom/tests/mochitest/ajax/offline/test_offlineMode.html')
-rw-r--r-- | dom/tests/mochitest/ajax/offline/test_offlineMode.html | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/dom/tests/mochitest/ajax/offline/test_offlineMode.html b/dom/tests/mochitest/ajax/offline/test_offlineMode.html new file mode 100644 index 000000000..1d4610fb5 --- /dev/null +++ b/dom/tests/mochitest/ajax/offline/test_offlineMode.html @@ -0,0 +1,164 @@ +<html xmlns="http://www.w3.org/1999/xhtml" manifest="http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingManifest.sjs"> +<head> +<title>Offline mode 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 loads a manifest and cache it. + * Then tests if all works in online mode + * as expected. Then switches firefox to offline + * mode and tries the page load still works as + * expected, i.e. all items from the cache load. + */ + +var gImplicitWindow = null; +var gCompleteTimeout = null; +var gGotExplicitVersion = 0; +var gGotImplicitVersion = 0; +var gGotDynamicVersion = 0; +var gGotOnError = false; + +function createURI(urispec) +{ + var ioServ = Components.classes["@mozilla.org/network/io-service;1"] + .getService(Components.interfaces.nsIIOService); + return ioServ.newURI(urispec, null, null); +} + +// test + +function manifestUpdated() +{ + applicationCache.mozAdd("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/notonwhitelist.html"); + OfflineTest.waitForAdd("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/notonwhitelist.html", dynamicAdded); +} + +function dynamicAdded() +{ + aFrame.location = "http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/notonwhitelist.html"; +} + +// Called by the dynamically added iframe on load +function notwhitelistOnLoad() +{ + gGotDynamicVersion = 1; + aFrame.location = "http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingIframe.sjs"; +} + +// Called by the explicit iframe on load +function frameLoad(version) +{ + gGotExplicitVersion = version; + gImplicitWindow = window.open("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingImplicit.html"); +} + +// Called by the implicit window on load +function implicitLoaded(aWindow, errorOccured) +{ + aWindow.close(); + + gGotImplicitVersion = 1; + OfflineTest.waitForAdd("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingImplicit.html", implicitAdded); +} + +function implicitAdded() +{ + OfflineTest.priv(finalize)(); +} + +function finalize() +{ + window.clearTimeout(gCompleteTimeout); + + var ioserv = Cc["@mozilla.org/network/io-service;1"] + .getService(Ci.nsIIOService); + + if (!ioserv.offline) + { + OfflineTest.is(gGotExplicitVersion, 1, "Explicit entry loaded"); + OfflineTest.is(gGotImplicitVersion, 1, "Implicit entry loaded"); + OfflineTest.is(gGotDynamicVersion, 1, "Dynamic entry loaded"); + + gGotExplicitVersion = 0; + gGotImplicitVersion = 0; + gGotDynamicVersion = 0; + + var entries = [ + ["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/notonwhitelist.html", true], + ["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingIframe.sjs", true], + ["http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingImplicit.html", true] + ]; + OfflineTest.checkCacheEntries(entries, goOffline); + } + else + { + gImplicitWindow.close(); + + ioserv.offline = false; + + OfflineTest.is(gGotExplicitVersion, 1, "Explicit entry loaded"); + OfflineTest.is(gGotImplicitVersion, 1, "Bug 461325 - Implicit entry loaded"); + OfflineTest.is(gGotDynamicVersion, 1, "Dynamic entry loaded"); + OfflineTest.ok(gGotOnError, "Got onerror event invoked by implicit page load in offline mode"); + + OfflineTest.teardownAndFinish(); + } +} + +function goOffline() +{ + var listener = { + onCacheEntryDoomed: function (status) { + OfflineTest.priv(goOfflineContinue)(); + } + }; + + // Delete HTTP cache to ensure we are going from offline cache + var cache = Cc["@mozilla.org/network/cache-storage-service;1"] + .getService(Ci.nsICacheStorageService); + var storage = cache.diskCacheStorage(LoadContextInfo.default, false); + storage.asyncDoomURI(createURI("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/notonwhitelist.html"), "", null); + storage.asyncDoomURI(createURI("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingIframe.sjs"), "", null); + storage.asyncDoomURI(createURI("http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/updatingImplicit.html"), "", listener); +} + +function goOfflineContinue() +{ + var ioserv = Cc["@mozilla.org/network/io-service;1"] + .getService(Ci.nsIIOService); + + ioserv.offline = true; + + gCompleteTimeout = window.setTimeout(OfflineTest.priv(finalize), 10000); + + // remove error handling. in offline mode + // is correct to get error message + applicationCache.onerror = function() {gGotOnError = true;} + + aFrame.location = "http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/notonwhitelist.html"; + // Starts the chain all over again but in offline mode. +} + +SimpleTest.waitForExplicitFinish(); + +if (OfflineTest.setup()) { + applicationCache.onerror = OfflineTest.failEvent; + applicationCache.onupdateready = OfflineTest.failEvent; + applicationCache.oncached = OfflineTest.priv(manifestUpdated); +} + +</script> + +</head> + +<body> + +<iframe name="aFrame" src=""></iframe> + +</body> +</html> |