browser/base/content/test/general/test_offline_gzip.html

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:a88c528075ec
1 <!DOCTYPE HTML>
2 <html>
3 <!--
4 https://bugzilla.mozilla.org/show_bug.cgi?id=501422
5
6 When content which was transported over the network with
7 Content-Type: gzip is added to the offline
8 cache, it can be fetched from the cache successfully.
9 -->
10 <head>
11 <title>Test gzipped offline resources</title>
12 <script type="text/javascript"
13 src="/MochiKit/MochiKit.js"></script>
14 <script type="text/javascript"
15 src="/tests/SimpleTest/SimpleTest.js"></script>
16 <script type="text/javascript" src="offlineByDefault.js"></script>
17 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
18 </head>
19 <body onload="loaded()">
20 <p id="display">
21 <iframe name="testFrame" src="gZipOfflineChild.html"></iframe>
22
23 <div id="content" style="display: none">
24 </div>
25 <pre id="test">
26 <script class="testbody" type="text/javascript">
27
28 var cacheCount = 0;
29 var intervalID = 0;
30
31 window.addEventListener("message", handleMessageEvents, false);
32 SimpleTest.waitForExplicitFinish();
33
34 function finishTest() {
35 // Clean up after ourselves.
36 var Cc = SpecialPowers.Cc;
37 var pm = Cc["@mozilla.org/permissionmanager;1"].
38 getService(SpecialPowers.Ci.nsIPermissionManager);
39
40 var uri = Cc["@mozilla.org/network/io-service;1"].getService(SpecialPowers.Ci.nsIIOService)
41 .newURI(window.frames[0].location, null, null);
42 var principal = Cc["@mozilla.org/scriptsecuritymanager;1"]
43 .getService(SpecialPowers.Ci.nsIScriptSecurityManager)
44 .getNoAppCodebasePrincipal(uri);
45
46 pm.removeFromPrincipal(principal, "offline-app");
47
48 window.removeEventListener("message", handleMessageEvents, false);
49
50 offlineByDefault.reset();
51 SimpleTest.finish();
52 }
53
54 ////
55 // Handle "message" events which are posted from the iframe upon
56 // offline cache events.
57 //
58 function handleMessageEvents(event) {
59 cacheCount++;
60 switch (cacheCount) {
61 case 1:
62 // This is the initial caching off offline data.
63 is(event.data, "oncache", "Child was successfully cached.");
64 // Reload the frame; this will generate an error message
65 // in the case of bug 501422.
66 frames.testFrame.window.location.reload();
67 // Use setInterval to repeatedly call a function which
68 // checks that one of two things has occurred: either
69 // the offline cache is udpated (which means our iframe
70 // successfully reloaded), or the string "error" appears
71 // in the iframe, as in the case of bug 501422.
72 intervalID = setInterval(function() {
73 // Sometimes document.body may not exist, and trying to access
74 // it will throw an exception, so handle this case.
75 try {
76 var bodyInnerHTML = frames.testFrame.document.body.innerHTML;
77 }
78 catch (e) {
79 var bodyInnerHTML = "";
80 }
81 if (cacheCount == 2 || bodyInnerHTML.contains("error")) {
82 clearInterval(intervalID);
83 is(cacheCount, 2, "frame not reloaded successfully");
84 if (cacheCount != 2) {
85 finishTest();
86 }
87 }
88 }, 100);
89 break;
90 case 2:
91 is(event.data, "onupdate", "Child was successfully updated.");
92 finishTest();
93 break;
94 default:
95 // how'd we get here?
96 ok(false, "cacheCount not 1 or 2");
97 }
98 }
99
100 function loaded() {
101 // Click the notification panel's "Allow" button. This should kick
102 // off updates, which will eventually lead to getting messages from
103 // the iframe.
104 var wm = SpecialPowers.Cc["@mozilla.org/appshell/window-mediator;1"].
105 getService(SpecialPowers.Ci.nsIWindowMediator);
106 var win = wm.getMostRecentWindow("navigator:browser");
107 var panel = win.PopupNotifications.panel;
108 panel.firstElementChild.button.click();
109 }
110
111 </script>
112 </pre>
113 </body>
114 </html>

mercurial