| |
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> |