Annotation of /trunk/mozilla-firefox/patches/firefox-18.0-bug677092.patch
Parent Directory | Revision Log
Revision 2026 -
(hide 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 | niro | 2026 | 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] |