summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/ajax/offline/test_changingManifest.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/tests/mochitest/ajax/offline/test_changingManifest.html')
-rw-r--r--dom/tests/mochitest/ajax/offline/test_changingManifest.html116
1 files changed, 116 insertions, 0 deletions
diff --git a/dom/tests/mochitest/ajax/offline/test_changingManifest.html b/dom/tests/mochitest/ajax/offline/test_changingManifest.html
new file mode 100644
index 000000000..2ff365a4a
--- /dev/null
+++ b/dom/tests/mochitest/ajax/offline/test_changingManifest.html
@@ -0,0 +1,116 @@
+<html xmlns="http://www.w3.org/1999/xhtml" manifest="http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/changingManifest.sjs">
+<head>
+<title>changing 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;
+
+var g1SecUrl = "http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/changing1Sec.sjs";
+var g1HourUrl = "http://mochi.test:8888/tests/dom/tests/mochitest/ajax/offline/changing1Hour.sjs";
+
+var gCacheContents = null;
+
+function finish()
+{
+ OfflineTest.teardownAndFinish();
+}
+
+function manifestUpdatedAgain()
+{
+ OfflineTest.ok(gGotChecking, "Should get a checking event on the second update");
+ OfflineTest.ok(gGotDownloading, "Should get a downloading event on the second update");
+
+ // The second manifest has no NETWORK entry, but we are still
+ // associated with the first version of the manifest, so we should
+ // be able to access the whitelisted entry.
+ try {
+ var xhr = new XMLHttpRequest();
+ xhr.open("GET", "onwhitelist.html", false);
+ xhr.send();
+ OfflineTest.ok(true, "Fetched from the initial cache's whitelist.");
+ } catch (e) {
+ OfflineTest.ok(false, "Failed to fetch from the initial cache's whitelist.");
+ }
+
+ // Get the initial contents of the first two files.
+ fetcher = new OfflineCacheContents([g1SecUrl, g1HourUrl]);
+ fetcher.fetch(function(contents) {
+ // Make sure the contents of the 1-second-expiration file have changed,
+ // but that the 1-hour-expiration has not.
+ OfflineTest.isnot(gCacheContents[g1SecUrl], contents[g1SecUrl], "1-second expiration should have changed");
+ OfflineTest.is(gCacheContents[g1HourUrl], contents[g1HourUrl], "1-hour expiration should not have changed");
+
+ finish();
+ });
+}
+
+function failAndFinish(e) {
+ OfflineTest.ok(false, "Unexpected event: " + e.type);
+ finish();
+}
+
+function manifestUpdated()
+{
+ OfflineTest.ok(gGotChecking, "Should get a checking event");
+ OfflineTest.ok(gGotDownloading, "Should get a downloading event");
+
+ // Replace this manifest with a new one.
+ OfflineTest.setSJSState("changingManifest.sjs", "2");
+
+ // Get the initial contents of the first two files.
+ fetcher = new OfflineCacheContents([g1SecUrl, g1HourUrl]);
+ fetcher.fetch(function(contents) {
+ gCacheContents = contents;
+
+ // Now make sure applicationCache.update() does what we expect.
+ applicationCache.onchecking = function() {
+ OfflineTest.is(applicationCache.status, applicationCache.CHECKING,
+ "CHECKING state during update");
+ gGotChecking = true;
+ };
+ applicationCache.ondownloading = function() {
+ OfflineTest.is(applicationCache.status, applicationCache.DOWNLOADING,
+ "DOWNLOADING state during update");
+ gGotDownloading = true;
+ };
+
+ applicationCache.onupdateready = OfflineTest.priv(manifestUpdatedAgain);
+ applicationCache.onnoupdate = failAndFinish;
+ applicationCache.oncached = failAndFinish;
+
+ gGotChecking = false;
+ gGotDownloading = false;
+
+ // The changing versions give out a new version each second,
+ // make sure it has time to grab a new version, and for the
+ // 1-second cache timeout to pass.
+ window.setTimeout("applicationCache.update()", 5000);
+ });
+}
+
+if (OfflineTest.setup()) {
+ applicationCache.onerror = failAndFinish;
+ applicationCache.onnoupdate = failAndFinish;
+
+ applicationCache.onchecking = function() { gGotChecking = true; };
+ applicationCache.ondownloading = function() { gGotDownloading = true; };
+ applicationCache.oncached = OfflineTest.priv(manifestUpdated);
+}
+
+SimpleTest.waitForExplicitFinish();
+SimpleTest.requestFlakyTimeout("untriaged");
+
+</script>
+
+</head>
+
+<body>
+
+</body>
+</html>