Contents of /trunk/mozilla-firefox/patches/firefox-18.0-bug677092.patch
Parent Directory | Revision Log
Revision 2026 -
(show annotations)
(download)
Fri Jan 11 09:36:19 2013 UTC (11 years, 8 months ago) by niro
File size: 11002 byte(s)
Fri Jan 11 09:36:19 2013 UTC (11 years, 8 months ago) by niro
File size: 11002 byte(s)
-aded upstream patch
1 | exporting patch: |
2 | # HG changeset patch |
3 | # User Axel Hecht <axel@pike.org> |
4 | # Date 1348128099 -7200 |
5 | # Node ID 812d0ba8317507c4026958a740960384eac1507a |
6 | # Parent 97e49e7a33266a0680e5af59289264a07e4321f8 |
7 | bug 677092, make language packs restartless, r=Unfocused |
8 | Make language packs just trigger the chrome registration hooks, and |
9 | disable picking up bootstrap.js, and declare them restartless. |
10 | |
11 | diff -r 97e49e7a3326 -r 812d0ba83175 toolkit/mozapps/extensions/XPIProvider.jsm |
12 | --- a/toolkit/mozapps/extensions/XPIProvider.jsm Wed Sep 26 13:08:50 2012 +0200 |
13 | +++ b/toolkit/mozapps/extensions/XPIProvider.jsm Thu Sep 20 10:01:39 2012 +0200 |
14 | @@ -740,8 +740,8 @@ |
15 | } |
16 | } |
17 | else { |
18 | - // spell check dictionaries never require a restart |
19 | - if (addon.type == "dictionary") |
20 | + // spell check dictionaries and language packs never require a restart |
21 | + if (addon.type == "dictionary" || addon.type == "locale") |
22 | addon.bootstrap = true; |
23 | |
24 | // Only extensions are allowed to provide an optionsURL, optionsType or aboutURL. For |
25 | @@ -3695,6 +3695,11 @@ |
26 | Components.manager.addBootstrappedManifestLocation(aFile); |
27 | |
28 | try { |
29 | + // Don't call bootstrap.js methods for language packs, |
30 | + // they only contain chrome. |
31 | + if (aType == "locale") |
32 | + return; |
33 | + |
34 | // Load the scope if it hasn't already been loaded |
35 | if (!(aId in this.bootstrapScopes)) |
36 | this.loadBootstrapScope(aId, aFile, aVersion, aType); |
37 | diff -r 97e49e7a3326 -r 812d0ba83175 toolkit/mozapps/extensions/test/addons/test_langpack/chrome.manifest |
38 | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 |
39 | +++ b/toolkit/mozapps/extensions/test/addons/test_langpack/chrome.manifest Thu Sep 20 10:01:39 2012 +0200 |
40 | @@ -0,0 +1,1 @@ |
41 | +locale test-langpack x-testing locale/x-testing |
42 | diff -r 97e49e7a3326 -r 812d0ba83175 toolkit/mozapps/extensions/test/addons/test_langpack/install.rdf |
43 | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 |
44 | +++ b/toolkit/mozapps/extensions/test/addons/test_langpack/install.rdf Thu Sep 20 10:01:39 2012 +0200 |
45 | @@ -0,0 +1,23 @@ |
46 | +<?xml version="1.0"?> |
47 | + |
48 | +<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
49 | + xmlns:em="http://www.mozilla.org/2004/em-rdf#"> |
50 | + |
51 | + <Description about="urn:mozilla:install-manifest"> |
52 | + <em:id>langpack-x-testing@tests.mozilla.org</em:id> |
53 | + <em:type>8</em:type> |
54 | + <em:version>1.0</em:version> |
55 | + |
56 | + <!-- Front End MetaData --> |
57 | + <em:name>Language Pack x-testing</em:name> |
58 | + |
59 | + <em:targetApplication> |
60 | + <Description> |
61 | + <em:id>xpcshell@tests.mozilla.org</em:id> |
62 | + <em:minVersion>1</em:minVersion> |
63 | + <em:maxVersion>2</em:maxVersion> |
64 | + </Description> |
65 | + </em:targetApplication> |
66 | + |
67 | + </Description> |
68 | +</RDF> |
69 | diff -r 97e49e7a3326 -r 812d0ba83175 toolkit/mozapps/extensions/test/xpcshell/test_langpack.js |
70 | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 |
71 | +++ b/toolkit/mozapps/extensions/test/xpcshell/test_langpack.js Thu Sep 20 10:01:39 2012 +0200 |
72 | @@ -0,0 +1,247 @@ |
73 | +/* Any copyright is dedicated to the Public Domain. |
74 | + * http://creativecommons.org/publicdomain/zero/1.0/ |
75 | + */ |
76 | + |
77 | +// This verifies that language packs can be used without restarts. |
78 | +Components.utils.import("resource://gre/modules/Services.jsm"); |
79 | + |
80 | +// Enable loading extensions from the user scopes |
81 | +Services.prefs.setIntPref("extensions.enabledScopes", |
82 | + AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_USER); |
83 | + |
84 | +createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); |
85 | + |
86 | +const profileDir = gProfD.clone(); |
87 | +profileDir.append("extensions"); |
88 | +const userExtDir = gProfD.clone(); |
89 | +userExtDir.append("extensions2"); |
90 | +userExtDir.append(gAppInfo.ID); |
91 | +registerDirectory("XREUSysExt", userExtDir.parent); |
92 | + |
93 | +var chrome = Components.classes["@mozilla.org/chrome/chrome-registry;1"] |
94 | + .getService(Components.interfaces.nsIXULChromeRegistry); |
95 | + |
96 | +function do_check_locale_not_registered(provider) { |
97 | + let didThrow = false; |
98 | + try { |
99 | + chrome.getSelectedLocale(provider); |
100 | + } catch (e) { |
101 | + didThrow = true; |
102 | + } |
103 | + do_check_true(didThrow); |
104 | +} |
105 | + |
106 | +function run_test() { |
107 | + do_test_pending(); |
108 | + |
109 | + startupManager(); |
110 | + |
111 | + run_test_1(); |
112 | +} |
113 | + |
114 | +// Tests that installing doesn't require a restart |
115 | +function run_test_1() { |
116 | + prepare_test({ }, [ |
117 | + "onNewInstall" |
118 | + ]); |
119 | + |
120 | + AddonManager.getInstallForFile(do_get_addon("test_langpack"), function(install) { |
121 | + ensure_test_completed(); |
122 | + |
123 | + do_check_neq(install, null); |
124 | + do_check_eq(install.type, "locale"); |
125 | + do_check_eq(install.version, "1.0"); |
126 | + do_check_eq(install.name, "Language Pack x-testing"); |
127 | + do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); |
128 | + do_check_true(install.addon.hasResource("install.rdf")); |
129 | + do_check_false(install.addon.hasResource("bootstrap.js")); |
130 | + do_check_eq(install.addon.operationsRequiringRestart & |
131 | + AddonManager.OP_NEEDS_RESTART_INSTALL, 0); |
132 | + |
133 | + let addon = install.addon; |
134 | + prepare_test({ |
135 | + "langpack-x-testing@tests.mozilla.org": [ |
136 | + ["onInstalling", false], |
137 | + "onInstalled" |
138 | + ] |
139 | + }, [ |
140 | + "onInstallStarted", |
141 | + "onInstallEnded", |
142 | + ], function() { |
143 | + do_check_true(addon.hasResource("install.rdf")); |
144 | + check_test_1(); |
145 | + }); |
146 | + install.install(); |
147 | + }); |
148 | +} |
149 | + |
150 | +function check_test_1() { |
151 | + AddonManager.getAllInstalls(function(installs) { |
152 | + // There should be no active installs now since the install completed and |
153 | + // doesn't require a restart. |
154 | + do_check_eq(installs.length, 0); |
155 | + |
156 | + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { |
157 | + do_check_neq(b1, null); |
158 | + do_check_eq(b1.version, "1.0"); |
159 | + do_check_false(b1.appDisabled); |
160 | + do_check_false(b1.userDisabled); |
161 | + do_check_true(b1.isActive); |
162 | + // check chrome reg that language pack is registered |
163 | + do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); |
164 | + do_check_true(b1.hasResource("install.rdf")); |
165 | + do_check_false(b1.hasResource("bootstrap.js")); |
166 | + |
167 | + let dir = do_get_addon_root_uri(profileDir, "langpack-x-testing@tests.mozilla.org"); |
168 | + |
169 | + AddonManager.getAddonsWithOperationsByTypes(null, function(list) { |
170 | + do_check_eq(list.length, 0); |
171 | + |
172 | + run_test_2(); |
173 | + }); |
174 | + }); |
175 | + }); |
176 | +} |
177 | + |
178 | +// Tests that disabling doesn't require a restart |
179 | +function run_test_2() { |
180 | + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { |
181 | + prepare_test({ |
182 | + "langpack-x-testing@tests.mozilla.org": [ |
183 | + ["onDisabling", false], |
184 | + "onDisabled" |
185 | + ] |
186 | + }); |
187 | + |
188 | + do_check_eq(b1.operationsRequiringRestart & |
189 | + AddonManager.OP_NEEDS_RESTART_DISABLE, 0); |
190 | + b1.userDisabled = true; |
191 | + ensure_test_completed(); |
192 | + |
193 | + do_check_neq(b1, null); |
194 | + do_check_eq(b1.version, "1.0"); |
195 | + do_check_false(b1.appDisabled); |
196 | + do_check_true(b1.userDisabled); |
197 | + do_check_false(b1.isActive); |
198 | + // check chrome reg that language pack is not registered |
199 | + do_check_locale_not_registered("test-langpack"); |
200 | + |
201 | + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) { |
202 | + do_check_neq(newb1, null); |
203 | + do_check_eq(newb1.version, "1.0"); |
204 | + do_check_false(newb1.appDisabled); |
205 | + do_check_true(newb1.userDisabled); |
206 | + do_check_false(newb1.isActive); |
207 | + |
208 | + run_test_3(); |
209 | + }); |
210 | + }); |
211 | +} |
212 | + |
213 | +// Test that restarting doesn't accidentally re-enable |
214 | +function run_test_3() { |
215 | + shutdownManager(); |
216 | + startupManager(false); |
217 | + // check chrome reg that language pack is not registered |
218 | + do_check_locale_not_registered("test-langpack"); |
219 | + |
220 | + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { |
221 | + do_check_neq(b1, null); |
222 | + do_check_eq(b1.version, "1.0"); |
223 | + do_check_false(b1.appDisabled); |
224 | + do_check_true(b1.userDisabled); |
225 | + do_check_false(b1.isActive); |
226 | + |
227 | + run_test_4(); |
228 | + }); |
229 | +} |
230 | + |
231 | +// Tests that enabling doesn't require a restart |
232 | +function run_test_4() { |
233 | + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { |
234 | + prepare_test({ |
235 | + "langpack-x-testing@tests.mozilla.org": [ |
236 | + ["onEnabling", false], |
237 | + "onEnabled" |
238 | + ] |
239 | + }); |
240 | + |
241 | + do_check_eq(b1.operationsRequiringRestart & |
242 | + AddonManager.OP_NEEDS_RESTART_ENABLE, 0); |
243 | + b1.userDisabled = false; |
244 | + ensure_test_completed(); |
245 | + |
246 | + do_check_neq(b1, null); |
247 | + do_check_eq(b1.version, "1.0"); |
248 | + do_check_false(b1.appDisabled); |
249 | + do_check_false(b1.userDisabled); |
250 | + do_check_true(b1.isActive); |
251 | + // check chrome reg that language pack is registered |
252 | + do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); |
253 | + |
254 | + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) { |
255 | + do_check_neq(newb1, null); |
256 | + do_check_eq(newb1.version, "1.0"); |
257 | + do_check_false(newb1.appDisabled); |
258 | + do_check_false(newb1.userDisabled); |
259 | + do_check_true(newb1.isActive); |
260 | + |
261 | + run_test_5(); |
262 | + }); |
263 | + }); |
264 | +} |
265 | + |
266 | +// Tests that a restart shuts down and restarts the add-on |
267 | +function run_test_5() { |
268 | + shutdownManager(); |
269 | + startupManager(false); |
270 | + // check chrome reg that language pack is registered |
271 | + do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); |
272 | + |
273 | + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { |
274 | + do_check_neq(b1, null); |
275 | + do_check_eq(b1.version, "1.0"); |
276 | + do_check_false(b1.appDisabled); |
277 | + do_check_false(b1.userDisabled); |
278 | + do_check_true(b1.isActive); |
279 | + do_check_false(isExtensionInAddonsList(profileDir, b1.id)); |
280 | + |
281 | + run_test_7(); |
282 | + }); |
283 | +} |
284 | + |
285 | +// Tests that uninstalling doesn't require a restart |
286 | +function run_test_7() { |
287 | + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { |
288 | + prepare_test({ |
289 | + "langpack-x-testing@tests.mozilla.org": [ |
290 | + ["onUninstalling", false], |
291 | + "onUninstalled" |
292 | + ] |
293 | + }); |
294 | + |
295 | + do_check_eq(b1.operationsRequiringRestart & |
296 | + AddonManager.OP_NEEDS_RESTART_UNINSTALL, 0); |
297 | + b1.uninstall(); |
298 | + |
299 | + check_test_7(); |
300 | + }); |
301 | +} |
302 | + |
303 | +function check_test_7() { |
304 | + ensure_test_completed(); |
305 | + // check chrome reg that language pack is not registered |
306 | + do_check_locale_not_registered("test-langpack"); |
307 | + |
308 | + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { |
309 | + do_check_eq(b1, null); |
310 | + |
311 | + restartManager(); |
312 | + |
313 | + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) { |
314 | + do_check_eq(newb1, null); |
315 | + |
316 | + do_test_finished(); |
317 | + }); |
318 | + }); |
319 | +} |
320 | diff -r 97e49e7a3326 -r 812d0ba83175 toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini |
321 | --- a/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini Wed Sep 26 13:08:50 2012 +0200 |
322 | +++ b/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini Thu Sep 20 10:01:39 2012 +0200 |
323 | @@ -139,6 +139,7 @@ |
324 | [test_corrupt_strictcompat.js] |
325 | [test_db_sanity.js] |
326 | [test_dictionary.js] |
327 | +[test_langpack.js] |
328 | [test_disable.js] |
329 | [test_distribution.js] |
330 | [test_dss.js] |