Index: chrome/browser/chromeos/events/event_rewriter.cc |
diff --git a/chrome/browser/chromeos/events/event_rewriter.cc b/chrome/browser/chromeos/events/event_rewriter.cc |
index d532a8b375defbef81cbecf8646c09b35647033d..9bbc5d2a4515309cd1650eedbc29a85d88bfdaf4 100644 |
--- a/chrome/browser/chromeos/events/event_rewriter.cc |
+++ b/chrome/browser/chromeos/events/event_rewriter.cc |
@@ -17,12 +17,14 @@ |
#include "base/strings/string_split.h" |
#include "base/strings/string_util.h" |
#include "base/sys_info.h" |
+#include "chrome/browser/browser_process.h" |
#include "chrome/browser/chromeos/login/ui/login_display_host.h" |
#include "chrome/browser/extensions/extension_commands_global_registry.h" |
#include "chrome/browser/profiles/profile_manager.h" |
#include "chrome/common/pref_names.h" |
#include "chromeos/chromeos_switches.h" |
#include "components/prefs/pref_service.h" |
+#include "components/user_manager/known_user.h" |
#include "components/user_manager/user_manager.h" |
#include "ui/base/ime/chromeos/ime_keyboard.h" |
#include "ui/base/ime/chromeos/input_method_manager.h" |
@@ -132,14 +134,31 @@ const ModifierRemapping* kModifierRemappingNeoMod3 = &kModifierRemappings[1]; |
// prefs::kLanguageRemapSearchKeyTo. |
const ModifierRemapping* GetRemappedKey(const std::string& pref_name, |
const PrefService& pref_service) { |
- if (!pref_service.FindPreference(pref_name.c_str())) |
- return NULL; // The |pref_name| hasn't been registered. On login screen? |
- const int value = pref_service.GetInteger(pref_name.c_str()); |
+ int value = -1; |
+ // If we're at the login screen, try to get the pref from the global prefs |
+ // dictionary. |
+ if (LoginDisplayHost::default_host()) { |
+ PrefService* const global_prefs = g_browser_process->local_state(); |
+ if (global_prefs->HasPrefPath(prefs::kFocusedPodUserId)) { |
+ const std::string gaia_id = |
+ global_prefs->GetString(prefs::kFocusedPodUserId); |
+ user_manager::known_user::GetIntegerPref(AccountId::FromGaiaId(gaia_id), |
+ pref_name, &value); |
+ } |
+ } |
+ |
+ if (value == -1) { |
+ if (pref_service.FindPreference(pref_name)) |
+ value = pref_service.GetInteger(pref_name); |
+ else |
+ return nullptr; |
+ } |
+ |
for (size_t i = 0; i < arraysize(kModifierRemappings); ++i) { |
if (value == kModifierRemappings[i].remap_to) |
return &kModifierRemappings[i]; |
} |
- return NULL; |
+ return nullptr; |
} |
bool HasDiamondKey() { |