Bug 1394661 - Use user locale instead of system locale for font fallback. r?gandalf draft
authorMakoto Kato <m_kato@ga2.so-net.ne.jp>
Wed, 30 Aug 2017 17:33:12 +0900
changeset 655669 3ed9b10414b71dda16da8c882f46f667b1768516
parent 655385 db7f19e26e571ae1dd309f5d2f387b06ba670c30
child 728900 735b4c5b91a883b41ae02c6bd90935db01e0620d
push id76947
push userbmo:m_kato@ga2.so-net.ne.jp
push dateWed, 30 Aug 2017 08:51:26 +0000
reviewersgandalf
bugs1394661, 1346674, 1348259
milestone57.0a1
Bug 1394661 - Use user locale instead of system locale for font fallback. r?gandalf Until Firefox 54, font fallback uses user locale. Example, OS is Windows 10 JA with JA UI, Firefox uses JA font for fallback even if Firefox is US version. But since we changed some locale code on Firefox 55 development cycle, there were some regressions such as bug 1346674. So we changed fallback locale to system locale (instead of Firefox UX locale) for font selection by bug 1348259. It isn't good for old compatibility, so we should use user locale for font fallback like Firefox 54. Now we can get user locale by OSPreferences::GetRegionalPrefsLocales, use it for font fallback MozReview-Commit-ID: 7qwDDeU1ZPt
intl/locale/nsLanguageAtomService.cpp
--- a/intl/locale/nsLanguageAtomService.cpp
+++ b/intl/locale/nsLanguageAtomService.cpp
@@ -59,21 +59,29 @@ nsLanguageAtomService::LookupCharSet(Not
   return NS_Atomize(group);
 }
 
 nsIAtom*
 nsLanguageAtomService::GetLocaleLanguage()
 {
   do {
     if (!mLocaleLanguage) {
-      nsAutoCString locale;
-      OSPreferences::GetInstance()->GetSystemLocale(locale);
+      AutoTArray<nsCString, 10> regionalPrefsLocales;
+      if (OSPreferences::GetInstance()->GetRegionalPrefsLocales(
+                                          regionalPrefsLocales)) {
+        // use lowercase for all language atoms
+        ToLowerCase(regionalPrefsLocales[0]);
+        mLocaleLanguage = NS_Atomize(regionalPrefsLocales[0]);
+      } else {
+        nsAutoCString locale;
+        OSPreferences::GetInstance()->GetSystemLocale(locale);
 
-      ToLowerCase(locale); // use lowercase for all language atoms
-      mLocaleLanguage = NS_Atomize(locale);
+        ToLowerCase(locale); // use lowercase for all language atoms
+        mLocaleLanguage = NS_Atomize(locale);
+      }
     }
   } while (0);
 
   return mLocaleLanguage;
 }
 
 nsIAtom*
 nsLanguageAtomService::GetLanguageGroup(nsIAtom *aLanguage, bool* aNeedsToCache)