diff options
Diffstat (limited to 'browser/base/content/test/test_offline_gzip.html')
-rw-r--r-- | browser/base/content/test/test_offline_gzip.html | 112 |
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> |