author | Wolfgang Rosenauer <wr@rosenauer.org> |
Wed, 07 Mar 2012 11:39:06 +0100 | |
branch | mozilla-1.9.2 |
changeset 406 | 290d5e871d9a |
parent 58 | e0951c708771 |
permissions | -rw-r--r-- |
57 | 1 |
diff --git a/chrome/src/nsChromeRegistry.cpp b/chrome/src/nsChromeRegistry.cpp |
2 |
--- a/chrome/src/nsChromeRegistry.cpp |
|
3 |
+++ b/chrome/src/nsChromeRegistry.cpp |
|
4 |
@@ -1267,20 +1267,21 @@ nsChromeRegistry::WrappersEnabled(nsIURI |
|
5 |
return PL_DHASH_ENTRY_IS_LIVE(entry) && |
|
6 |
entry->flags & PackageEntry::XPCNATIVEWRAPPERS; |
|
7 |
} |
|
8 |
||
9 |
nsresult |
|
10 |
nsChromeRegistry::SelectLocaleFromPref(nsIPrefBranch* prefs) |
|
11 |
{ |
|
12 |
nsresult rv; |
|
13 |
- PRBool matchOSLocale = PR_FALSE; |
|
14 |
+ PRBool matchOSLocale = PR_FALSE, userLocaleOverride = PR_FALSE; |
|
15 |
+ prefs->PrefHasUserValue(SELECTED_LOCALE_PREF, &userLocaleOverride); |
|
16 |
rv = prefs->GetBoolPref(MATCH_OS_LOCALE_PREF, &matchOSLocale); |
|
17 |
||
18 |
- if (NS_SUCCEEDED(rv) && matchOSLocale) { |
|
19 |
+ if (NS_SUCCEEDED(rv) && matchOSLocale && !userLocaleOverride) { |
|
20 |
// compute lang and region code only when needed! |
|
21 |
nsCAutoString uiLocale; |
|
22 |
rv = getUILangCountry(uiLocale); |
|
23 |
if (NS_SUCCEEDED(rv)) |
|
24 |
mSelectedLocale = uiLocale; |
|
25 |
} |
|
26 |
else { |
|
27 |
nsXPIDLCString provider; |
|
58
e0951c708771
Disable test because the relevant changes are not landed for it
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
57
diff
changeset
|
28 |
diff --git a/chrome/test/unit/data/test_bug519468.manifest b/chrome/test/unit/data/test_bug519468.manifest |
e0951c708771
Disable test because the relevant changes are not landed for it
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
57
diff
changeset
|
29 |
deleted file mode 100644 |
e0951c708771
Disable test because the relevant changes are not landed for it
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
57
diff
changeset
|
30 |
--- a/chrome/test/unit/data/test_bug519468.manifest |
e0951c708771
Disable test because the relevant changes are not landed for it
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
57
diff
changeset
|
31 |
+++ /dev/null |
e0951c708771
Disable test because the relevant changes are not landed for it
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
57
diff
changeset
|
32 |
@@ -1,2 +0,0 @@ |
e0951c708771
Disable test because the relevant changes are not landed for it
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
57
diff
changeset
|
33 |
-locale testmatchos en-US jar:en-US.jar!/locale/en-US/global/ |
e0951c708771
Disable test because the relevant changes are not landed for it
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
57
diff
changeset
|
34 |
-locale testmatchos fr-FR jar:en-US.jar!/locale/en-US/global/ |
57 | 35 |
diff --git a/chrome/test/unit/test_bug519468.js b/chrome/test/unit/test_bug519468.js |
36 |
--- a/chrome/test/unit/test_bug519468.js |
|
37 |
+++ b/chrome/test/unit/test_bug519468.js |
|
38 |
@@ -31,50 +31,90 @@ |
|
39 |
* decision by deleting the provisions above and replace them with the notice |
|
40 |
* and other provisions required by the GPL or the LGPL. If you do not delete |
|
41 |
* the provisions above, a recipient may use your version of this file under |
|
42 |
* the terms of any one of the MPL, the GPL or the LGPL. |
|
43 |
* |
|
44 |
* ***** END LICENSE BLOCK ***** |
|
45 |
*/ |
|
46 |
||
47 |
+function write_locale(stream, locale, package) { |
|
48 |
+ var s = "locale " + package + " " + locale + " jar:" + locale + ".jar!"; |
|
49 |
+ s += "/locale/" + locale + "/" + package +"/\n"; |
|
50 |
+ stream.write(s, s.length); |
|
51 |
+} |
|
52 |
+ |
|
53 |
+var localeService = Cc["@mozilla.org/intl/nslocaleservice;1"] |
|
54 |
+ .getService(Ci.nsILocaleService); |
|
55 |
+ |
|
56 |
+var systemLocale = localeService.getLocaleComponentForUserAgent(); |
|
57 |
+ |
|
58 |
+var locales; |
|
59 |
+ |
|
60 |
+if (systemLocale == "en-US") |
|
61 |
+ locales = [ "en-US", "fr-FR", "de-DE" ]; |
|
62 |
+else if (systemLocale == "fr-FR") |
|
63 |
+ locales = [ "en-US", systemLocale, "de-DE" ]; |
|
64 |
+else |
|
65 |
+ locales = [ "en-US", systemLocale, "fr-FR" ]; |
|
66 |
+ |
|
67 |
+var workingDir = Cc["@mozilla.org/file/directory_service;1"]. |
|
68 |
+ getService(Ci.nsIProperties).get("TmpD", Ci.nsIFile); |
|
69 |
+var manifest = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); |
|
70 |
+manifest.initWithFile(workingDir); |
|
71 |
+manifest.append("test_bug519468.manifest"); |
|
72 |
+manifest.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0600); |
|
73 |
+var stream = Cc["@mozilla.org/network/file-output-stream;1"]. |
|
74 |
+ createInstance(Ci.nsIFileOutputStream); |
|
75 |
+stream.init(manifest, 0x04 | 0x08 | 0x20, 0600, 0); // write, create, truncate |
|
76 |
+locales.slice(0,2).forEach(function(l) write_locale(stream, l, "testmatchos")); |
|
77 |
+write_locale(stream, locales[2], "testnomatchos"); |
|
78 |
+stream.close(); |
|
79 |
+ |
|
80 |
var MANIFESTS = [ |
|
81 |
- do_get_file("data/test_bug519468.manifest") |
|
82 |
+ manifest |
|
83 |
]; |
|
84 |
||
85 |
registerManifests(MANIFESTS); |
|
86 |
||
87 |
var chromeReg = Cc["@mozilla.org/chrome/chrome-registry;1"] |
|
88 |
.getService(Ci.nsIXULChromeRegistry) |
|
89 |
.QueryInterface(Ci.nsIToolkitChromeRegistry); |
|
90 |
||
91 |
-var localeService = Cc["@mozilla.org/intl/nslocaleservice;1"] |
|
92 |
- .getService(Ci.nsILocaleService); |
|
93 |
- |
|
94 |
var prefService = Cc["@mozilla.org/preferences-service;1"] |
|
95 |
.getService(Ci.nsIPrefService) |
|
96 |
.QueryInterface(Ci.nsIPrefBranch); |
|
97 |
||
98 |
function test_locale(aTest) { |
|
99 |
prefService.setBoolPref("intl.locale.matchOS", aTest.matchOS); |
|
100 |
- prefService.setCharPref("general.useragent.locale", aTest.selected || "en-US"); |
|
101 |
+ if (aTest.selected) |
|
102 |
+ prefService.setCharPref("general.useragent.locale", aTest.selected); |
|
103 |
+ else |
|
104 |
+ try { |
|
105 |
+ prefService.clearUserPref("general.useragent.locale"); |
|
106 |
+ } catch(e) {} |
|
107 |
||
108 |
- var selectedLocale = chromeReg.getSelectedLocale("testmatchos"); |
|
109 |
+ var selectedLocale = chromeReg.getSelectedLocale(aTest.package); |
|
110 |
do_check_eq(selectedLocale, aTest.locale); |
|
111 |
} |
|
112 |
||
113 |
function run_test() |
|
114 |
{ |
|
115 |
- var systemLocale = localeService.getLocaleComponentForUserAgent(); |
|
116 |
- |
|
117 |
var tests = [ |
|
118 |
- {matchOS: false, selected: null, locale: "en-US"}, |
|
119 |
{matchOS: true, selected: null, locale: systemLocale}, |
|
120 |
- {matchOS: true, selected: "fr-FR", locale: systemLocale}, |
|
121 |
- {matchOS: false, selected: "fr-FR", locale: "fr-FR"}, |
|
122 |
- {matchOS: true, selected: null, locale: systemLocale} |
|
123 |
+ {matchOS: true, selected: locales[0], locale: locales[0]}, |
|
124 |
+ {matchOS: true, selected: locales[1], locale: locales[1]}, |
|
125 |
+ {matchOS: true, selected: locales[2], locale: locales[0]}, |
|
126 |
+ {matchOS: true, selected: null, locale: locales[2], package: "testnomatchos"}, |
|
127 |
+ {matchOS: false, selected: null, locale: locales[0]}, |
|
128 |
+ {matchOS: false, selected: locales[0], locale: locales[0]}, |
|
129 |
+ {matchOS: false, selected: locales[1], locale: locales[1]}, |
|
130 |
+ {matchOS: false, selected: locales[2], locale: locales[0]}, |
|
131 |
]; |
|
132 |
||
133 |
for (var i = 0; i < tests.length; ++ i) { |
|
134 |
var test = tests[i]; |
|
135 |
+ if (!test.package) |
|
136 |
+ test.package = "testmatchos"; |
|
137 |
test_locale(test); |
|
138 |
} |
|
139 |
+ manifest.remove(false); |
|
140 |
} |