Index: chrome/browser/chromeos/login/login_utils.cc |
diff --git a/chrome/browser/chromeos/login/login_utils.cc b/chrome/browser/chromeos/login/login_utils.cc |
index 708f2e4ba98b9ca6235ca34bf02197bcad872a6c..8ab5fbd3272ebb943b9ec6b32131813f955f3e2d 100644 |
--- a/chrome/browser/chromeos/login/login_utils.cc |
+++ b/chrome/browser/chromeos/login/login_utils.cc |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -330,25 +330,51 @@ void LoginUtilsImpl::FetchTokens( |
} |
void LoginUtilsImpl::RespectLocalePreference(PrefService* pref) { |
+ std::string pref_locale_override = |
whywhat
2011/01/12 16:33:16
Add DCHECK for pref?
Denis Lagno
2011/01/12 20:27:34
Done.
|
+ pref->GetString(prefs::kApplicationLocaleOverride); |
+ if (!pref_locale_override.empty()) { |
+ LanguageSwitchMenu::SwitchLanguage(pref_locale_override); |
+ return; |
+ } |
+ |
+ if (g_browser_process == NULL) |
+ return; |
+ std::string cur_locale = g_browser_process->GetApplicationLocale(); |
+ |
std::string pref_locale = pref->GetString(prefs::kApplicationLocale); |
- if (pref_locale.empty()) { |
- // Profile synchronization takes time and is not completed at that moment |
- // at first login. So we initialize locale preference in steps: |
- // (1) first save it to temporary backup; |
- // (2) on next login we assume that synchronization is already completed |
- // and we may finalize initialization. |
- std::string pref_locale_backup = |
- pref->GetString(prefs::kApplicationLocaleBackup); |
- if (pref_locale_backup.empty()) { |
- pref->SetString(prefs::kApplicationLocaleBackup, |
- g_browser_process->GetApplicationLocale()); |
- return; |
+ if (!pref_locale.empty()) { |
+ if (pref->GetString(prefs::kApplicationLocaleAccepted) == pref_locale) { |
+ // If locale is accepted then we do not want to show LocaleChangeInfoBar. |
whywhat
2011/01/12 16:33:16
Info Bar -> notification?
Denis Lagno
2011/01/12 20:27:34
Done.
|
+ // LocaleChangeInfoBar is triggered by different values of |
+ // kApplicationLocaleBackup and kApplicationLocale preferences, |
+ // so make them identical. |
+ pref->SetString(prefs::kApplicationLocaleBackup, pref_locale); |
} else { |
- pref_locale.swap(pref_locale_backup); |
- pref->SetString(prefs::kApplicationLocale, pref_locale); |
+ std::string pref_locale_backup = |
+ pref->GetString(prefs::kApplicationLocaleBackup); |
+ if (pref_locale_backup != cur_locale) { |
+ if (pref_locale_backup == pref_locale || pref_locale_backup.empty()) { |
+ pref->SetString(prefs::kApplicationLocaleBackup, cur_locale); |
+ } |
+ } |
} |
+ LanguageSwitchMenu::SwitchLanguage(pref_locale); |
+ return; |
+ } |
+ // Profile synchronization takes time and is not completed at that moment |
+ // at first login. So we initialize locale preference in steps: |
+ // (1) first save it to temporary backup; |
+ // (2) on next login we assume that synchronization is already completed |
+ // and we may finalize initialization. |
+ std::string pref_locale_backup = |
+ pref->GetString(prefs::kApplicationLocaleBackup); |
+ pref->SetString(prefs::kApplicationLocaleBackup, cur_locale); |
+ pref->ScheduleSavePersistentPrefs(); |
+ if (!pref_locale_backup.empty()) { |
+ pref->SetString(prefs::kApplicationLocale, pref_locale_backup); |
+ pref->ScheduleSavePersistentPrefs(); |
+ LanguageSwitchMenu::SwitchLanguage(pref_locale_backup); |
} |
- LanguageSwitchMenu::SwitchLanguage(pref_locale); |
} |
void LoginUtilsImpl::CompleteOffTheRecordLogin(const GURL& start_url) { |