Index: chrome/browser/chromeos/preferences.cc |
diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc |
index 60f7bae8923f291e742665542e3a7325bc430c41..06b4030279312c0a73765bc12b9d69b948d3feb6 100644 |
--- a/chrome/browser/chromeos/preferences.cc |
+++ b/chrome/browser/chromeos/preferences.cc |
@@ -25,6 +25,7 @@ |
#include "chrome/browser/chromeos/drive/file_system_util.h" |
#include "chrome/browser/chromeos/input_method/input_method_util.h" |
#include "chrome/browser/chromeos/login/session/user_session_manager.h" |
+#include "chrome/browser/chromeos/profiles/profile_helper.h" |
#include "chrome/browser/chromeos/system/input_device_settings.h" |
#include "chrome/browser/download/download_prefs.h" |
#include "chrome/browser/prefs/pref_service_syncable.h" |
@@ -349,9 +350,10 @@ void Preferences::InitUserPrefs(PrefServiceSyncable* prefs) { |
prefs::kLanguageXkbAutoRepeatInterval, prefs, callback); |
} |
-void Preferences::Init(PrefServiceSyncable* prefs, |
- const user_manager::User* user) { |
+void Preferences::Init(Profile* profile, const user_manager::User* user) { |
+ DCHECK(profile); |
DCHECK(user); |
+ PrefServiceSyncable* prefs = PrefServiceSyncable::FromProfile(profile); |
user_ = user; |
user_is_primary_ = |
user_manager::UserManager::Get()->GetPrimaryUser() == user_; |
@@ -363,6 +365,12 @@ void Preferences::Init(PrefServiceSyncable* prefs, |
// PrefService::IsSyncing() changes. |
prefs->AddObserver(this); |
+ UserSessionManager* session_manager = UserSessionManager::GetInstance(); |
+ DCHECK(session_manager); |
+ ime_state_ = session_manager->GetDefaultIMEState( |
+ ProfileHelper::Get()->GetProfileByUser(user_)); |
+ input_method_manager_->SetState(ime_state_); |
+ |
// Initialize preferences to currently saved state. |
ApplyPreferences(REASON_INITIALIZATION, ""); |
@@ -370,12 +378,19 @@ void Preferences::Init(PrefServiceSyncable* prefs, |
// login. For a regular user this is done in |
// UserSessionManager::InitProfilePreferences(). |
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession)) |
- UserSessionManager::SetFirstLoginPrefs(prefs, std::string(), std::string()); |
+ session_manager->SetFirstLoginPrefs(profile, std::string(), std::string()); |
} |
-void Preferences::InitUserPrefsForTesting(PrefServiceSyncable* prefs, |
- const user_manager::User* user) { |
+void Preferences::InitUserPrefsForTesting( |
+ PrefServiceSyncable* prefs, |
+ const user_manager::User* user, |
+ scoped_refptr<input_method::InputMethodManager::State> ime_state) { |
user_ = user; |
+ ime_state_ = ime_state; |
+ |
+ if (ime_state) |
+ input_method_manager_->SetState(ime_state); |
+ |
InitUserPrefs(prefs); |
} |
@@ -537,25 +552,26 @@ void Preferences::ApplyPreferences(ApplyReason reason, |
UpdateAutoRepeatRate(); |
} |
- if (reason != REASON_PREF_CHANGED && user_is_active) { |
+ if (reason == REASON_INITIALIZATION) |
SetInputMethodList(); |
- } else if (pref_name == prefs::kLanguagePreloadEngines && user_is_active) { |
+ |
+ if (pref_name == prefs::kLanguagePreloadEngines && |
+ reason == REASON_PREF_CHANGED) { |
SetLanguageConfigStringListAsCSV(language_prefs::kGeneralSectionName, |
language_prefs::kPreloadEnginesConfigName, |
preload_engines_.GetValue()); |
} |
- if (reason != REASON_PREF_CHANGED || |
- pref_name == prefs::kLanguageEnabledExtensionImes) { |
- if (user_is_active) { |
- std::string value(enabled_extension_imes_.GetValue()); |
+ if ((reason == REASON_INITIALIZATION) || |
+ (pref_name == prefs::kLanguageEnabledExtensionImes && |
+ reason == REASON_PREF_CHANGED)) { |
+ std::string value(enabled_extension_imes_.GetValue()); |
- std::vector<std::string> split_values; |
- if (!value.empty()) |
- base::SplitString(value, ',', &split_values); |
+ std::vector<std::string> split_values; |
+ if (!value.empty()) |
+ base::SplitString(value, ',', &split_values); |
- input_method_manager_->SetEnabledExtensionImes(&split_values); |
- } |
+ ime_state_->SetEnabledExtensionImes(&split_values); |
} |
if (user_is_active) { |
@@ -597,7 +613,7 @@ void Preferences::SetLanguageConfigStringListAsCSV(const char* section, |
if (section == std::string(language_prefs::kGeneralSectionName) && |
name == std::string(language_prefs::kPreloadEnginesConfigName)) { |
- input_method_manager_->ReplaceEnabledInputMethods(split_values); |
+ ime_state_->ReplaceEnabledInputMethods(split_values); |
return; |
} |
} |
@@ -622,9 +638,11 @@ void Preferences::SetInputMethodList() { |
// which could have been modified by the SetLanguageConfigStringListAsCSV call |
// above to the original state. |
if (!previous_input_method_id.empty()) |
- input_method_manager_->ChangeInputMethod(previous_input_method_id); |
+ ime_state_->ChangeInputMethod(previous_input_method_id, |
+ false /* show_message */); |
if (!current_input_method_id.empty()) |
- input_method_manager_->ChangeInputMethod(current_input_method_id); |
+ ime_state_->ChangeInputMethod(current_input_method_id, |
+ false /* show_message */); |
} |
void Preferences::UpdateAutoRepeatRate() { |