summaryrefslogtreecommitdiff
path: root/browser/base/content/test/test_offline_gzip.html
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/test_offline_gzip.html')
-rw-r--r--browser/base/content/test/test_offline_gzip.html112
1 files changed, 112 insertions, 0 deletions
diff --git a/browser/base/content/test/test_offline_gzip.html b/browser/base/content/test/test_offline_gzip.html
new file mode 100644
index 000000000..09713da92
--- /dev/null
+++ b/browser/base/content/test/test_offline_gzip.html
@@ -0,0 +1,112 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=501422
+
+When content which was transported over the network with
+Content-Type: gzip is added to the offline
+cache, it can be fetched from the cache successfully.
+-->
+<head>
+ <title>Test gzipped offline resources</title>
+ <script type="text/javascript"
+ src="/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript"
+ src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body onload="loaded()">
+<p id="display">
+<iframe name="testFrame" src="gZipOfflineChild.html"></iframe>
+
+<div id="content" style="display: none">
+</div>
+<pre id="test">
+<script class="testbody" type="text/javascript">
+
+var cacheCount = 0;
+var intervalID = 0;
+
+window.addEventListener("message", handleMessageEvents, false);
+SimpleTest.waitForExplicitFinish();
+
+function finishTest() {
+ // Clean up after ourselves.
+ var Cc = SpecialPowers.Cc;
+ var pm = Cc["@mozilla.org/permissionmanager;1"].
+ getService(SpecialPowers.Ci.nsIPermissionManager);
+
+ var uri = Cc["@mozilla.org/network/io-service;1"].getService(SpecialPowers.Ci.nsIIOService)
+ .newURI(window.frames[0].location, null, null);
+ var principal = Cc["@mozilla.org/scriptsecuritymanager;1"]
+ .getService(SpecialPowers.Ci.nsIScriptSecurityManager)
+ .getNoAppCodebasePrincipal(uri);
+
+ pm.removeFromPrincipal(principal, "offline-app");
+
+ window.removeEventListener("message", handleMessageEvents, false);
+
+ SimpleTest.finish();
+}
+
+////
+// Handle "message" events which are posted from the iframe upon
+// offline cache events.
+//
+function handleMessageEvents(event) {
+ cacheCount++;
+ switch (cacheCount) {
+ case 1:
+ // This is the initial caching off offline data.
+ is(event.data, "oncache", "Child was successfully cached.");
+ // Reload the frame; this will generate an error message
+ // in the case of bug 501422.
+ frames.testFrame.window.location.reload();
+ // Use setInterval to repeatedly call a function which
+ // checks that one of two things has occurred: either
+ // the offline cache is udpated (which means our iframe
+ // successfully reloaded), or the string "error" appears
+ // in the iframe, as in the case of bug 501422.
+ intervalID = setInterval(function() {
+ // Sometimes document.body may not exist, and trying to access
+ // it will throw an exception, so handle this case.
+ try {
+ var bodyInnerHTML = frames.testFrame.document.body.innerHTML;
+ }
+ catch (e) {
+ var bodyInnerHTML = "";
+ }
+ if (cacheCount == 2 || bodyInnerHTML.contains("error")) {
+ clearInterval(intervalID);
+ is(cacheCount, 2, "frame not reloaded successfully");
+ if (cacheCount != 2) {
+ finishTest();
+ }
+ }
+ }, 100);
+ break;
+ case 2:
+ is(event.data, "onupdate", "Child was successfully updated.");
+ finishTest();
+ break;
+ default:
+ // how'd we get here?
+ ok(false, "cacheCount not 1 or 2");
+ }
+}
+
+function loaded() {
+ // Click the notification panel's "Allow" button. This should kick
+ // off updates, which will eventually lead to getting messages from
+ // the iframe.
+ var wm = SpecialPowers.Cc["@mozilla.org/appshell/window-mediator;1"].
+ getService(SpecialPowers.Ci.nsIWindowMediator);
+ var win = wm.getMostRecentWindow("navigator:browser");
+ var panel = win.PopupNotifications.panel;
+ panel.firstElementChild.button.click();
+}
+
+</script>
+</pre>
+</body>
+</html>