Index: ui/chromeos/events/event_rewriter_chromeos.cc |
diff --git a/chrome/browser/chromeos/events/event_rewriter.cc b/ui/chromeos/events/event_rewriter_chromeos.cc |
similarity index 82% |
rename from chrome/browser/chromeos/events/event_rewriter.cc |
rename to ui/chromeos/events/event_rewriter_chromeos.cc |
index d622d52f11b2bf35d87509c276640b6c40a715a7..65c908087e5530874e019ec5c3e80a280164b3b4 100644 |
--- a/chrome/browser/chromeos/events/event_rewriter.cc |
+++ b/ui/chromeos/events/event_rewriter_chromeos.cc |
@@ -2,7 +2,7 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "chrome/browser/chromeos/events/event_rewriter.h" |
+#include "ui/chromeos/events/event_rewriter_chromeos.h" |
#include <stddef.h> |
@@ -11,20 +11,14 @@ |
#include "base/command_line.h" |
#include "base/logging.h" |
#include "base/macros.h" |
+#include "base/memory/ptr_util.h" |
#include "base/strings/string_split.h" |
#include "base/strings/string_util.h" |
#include "base/sys_info.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/browser/ui/webui/chromeos/login/oobe_ui.h" |
-#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" |
-#include "chrome/common/pref_names.h" |
#include "chromeos/chromeos_switches.h" |
-#include "components/prefs/pref_service.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" |
+#include "ui/chromeos/events/pref_names.h" |
#include "ui/events/devices/input_device_manager.h" |
#include "ui/events/event.h" |
#include "ui/events/event_utils.h" |
@@ -34,8 +28,8 @@ |
#include "ui/events/keycodes/keyboard_code_conversion.h" |
#if defined(USE_X11) |
-#include <X11/extensions/XInput2.h> |
#include <X11/Xlib.h> |
+#include <X11/extensions/XInput2.h> |
// Get rid of macros from Xlib.h that conflicts with other parts of the code. |
#undef RootWindow |
@@ -45,7 +39,7 @@ |
#include "ui/events/keycodes/keyboard_code_conversion_x.h" |
#endif |
-namespace chromeos { |
+namespace ui { |
namespace { |
@@ -76,49 +70,49 @@ const struct ModifierRemapping { |
int flag; |
int remap_to; |
const char* pref_name; |
- EventRewriter::MutableKeyState result; |
+ EventRewriterChromeOS::MutableKeyState result; |
} kModifierRemappings[] = { |
{// kModifierRemappingCtrl references this entry by index. |
ui::EF_CONTROL_DOWN, |
- input_method::kControlKey, |
+ ::chromeos::input_method::kControlKey, |
prefs::kLanguageRemapControlKeyTo, |
{ui::EF_CONTROL_DOWN, ui::DomCode::CONTROL_LEFT, ui::DomKey::CONTROL, |
ui::VKEY_CONTROL}}, |
{// kModifierRemappingNeoMod3 references this entry by index. |
ui::EF_MOD3_DOWN | ui::EF_ALTGR_DOWN, |
- input_method::kNumModifierKeys, |
+ ::chromeos::input_method::kNumModifierKeys, |
nullptr, |
{ui::EF_MOD3_DOWN | ui::EF_ALTGR_DOWN, ui::DomCode::CAPS_LOCK, |
ui::DomKey::ALT_GRAPH, ui::VKEY_ALTGR}}, |
{ui::EF_COMMAND_DOWN, |
- input_method::kSearchKey, |
+ ::chromeos::input_method::kSearchKey, |
prefs::kLanguageRemapSearchKeyTo, |
{ui::EF_COMMAND_DOWN, ui::DomCode::META_LEFT, ui::DomKey::META, |
ui::VKEY_LWIN}}, |
{ui::EF_ALT_DOWN, |
- input_method::kAltKey, |
+ ::chromeos::input_method::kAltKey, |
prefs::kLanguageRemapAltKeyTo, |
{ui::EF_ALT_DOWN, ui::DomCode::ALT_LEFT, ui::DomKey::ALT, ui::VKEY_MENU}}, |
{ui::EF_NONE, |
- input_method::kVoidKey, |
+ ::chromeos::input_method::kVoidKey, |
nullptr, |
{ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::NONE, ui::VKEY_UNKNOWN}}, |
{ui::EF_MOD3_DOWN, |
- input_method::kCapsLockKey, |
+ ::chromeos::input_method::kCapsLockKey, |
prefs::kLanguageRemapCapsLockKeyTo, |
{ui::EF_MOD3_DOWN, ui::DomCode::CAPS_LOCK, ui::DomKey::CAPS_LOCK, |
ui::VKEY_CAPITAL}}, |
{ui::EF_NONE, |
- input_method::kEscapeKey, |
+ ::chromeos::input_method::kEscapeKey, |
prefs::kLanguageRemapEscapeKeyTo, |
{ui::EF_NONE, ui::DomCode::ESCAPE, ui::DomKey::ESCAPE, ui::VKEY_ESCAPE}}, |
{ui::EF_NONE, |
- input_method::kBackspaceKey, |
+ ::chromeos::input_method::kBackspaceKey, |
prefs::kLanguageRemapBackspaceKeyTo, |
{ui::EF_NONE, ui::DomCode::BACKSPACE, ui::DomKey::BACKSPACE, |
ui::VKEY_BACK}}, |
{ui::EF_NONE, |
- input_method::kNumModifierKeys, |
+ ::chromeos::input_method::kNumModifierKeys, |
prefs::kLanguageRemapDiamondKeyTo, |
{ui::EF_NONE, ui::DomCode::F15, ui::DomKey::F15, ui::VKEY_F15}}}; |
@@ -128,20 +122,15 @@ const ModifierRemapping* kModifierRemappingNeoMod3 = &kModifierRemappings[1]; |
// Gets a remapped key for |pref_name| key. For example, to find out which |
// key Search is currently remapped to, call the function with |
// prefs::kLanguageRemapSearchKeyTo. |
-const ModifierRemapping* GetRemappedKey(const std::string& pref_name, |
- const PrefService& pref_service) { |
+const ModifierRemapping* GetRemappedKey( |
+ const std::string& pref_name, |
+ EventRewriterChromeOS::Delegate* delegate) { |
+ if (!delegate) |
+ return nullptr; |
+ |
int value = -1; |
- // If we're at the login screen, try to get the pref from the global prefs |
- // dictionary. |
- if (!LoginDisplayHost::default_host() || |
- !LoginDisplayHost::default_host() |
- ->GetOobeUI() |
- ->signin_screen_handler() |
- ->GetKeyboardRemappedPrefValue(pref_name, &value)) { |
- if (!pref_service.FindPreference(pref_name)) |
- return nullptr; |
- value = pref_service.GetInteger(pref_name); |
- } |
+ if (!delegate->GetKeyboardRemappedPrefValue(pref_name, &value)) |
+ return nullptr; |
for (size_t i = 0; i < arraysize(kModifierRemappings); ++i) { |
if (value == kModifierRemappings[i].remap_to) |
@@ -152,7 +141,7 @@ const ModifierRemapping* GetRemappedKey(const std::string& pref_name, |
bool HasDiamondKey() { |
return base::CommandLine::ForCurrentProcess()->HasSwitch( |
- chromeos::switches::kHasChromeOSDiamondKey); |
+ ::chromeos::switches::kHasChromeOSDiamondKey); |
} |
bool IsISOLevel5ShiftUsedByCurrentInputMethod() { |
@@ -160,43 +149,21 @@ bool IsISOLevel5ShiftUsedByCurrentInputMethod() { |
// it's not possible to make both features work. For now, we don't remap |
// Mod3Mask when Neo2 is in use. |
// TODO(yusukes): Remove the restriction. |
- input_method::InputMethodManager* manager = |
- input_method::InputMethodManager::Get(); |
+ ::chromeos::input_method::InputMethodManager* manager = |
+ ::chromeos::input_method::InputMethodManager::Get(); |
return manager->IsISOLevel5ShiftUsedByCurrentInputMethod(); |
} |
-bool IsExtensionCommandRegistered(ui::KeyboardCode key_code, int flags) { |
- // Some keyboard events for ChromeOS get rewritten, such as: |
- // Search+Shift+Left gets converted to Shift+Home (BeginDocument). |
- // This doesn't make sense if the user has assigned that shortcut |
- // to an extension. Because: |
- // 1) The extension would, upon seeing a request for Ctrl+Shift+Home have |
- // to register for Shift+Home, instead. |
- // 2) The conversion is unnecessary, because Shift+Home (BeginDocument) isn't |
- // going to be executed. |
- // Therefore, we skip converting the accelerator if an extension has |
- // registered for this shortcut. |
- Profile* profile = ProfileManager::GetActiveUserProfile(); |
- if (!profile || !extensions::ExtensionCommandsGlobalRegistry::Get(profile)) |
- return false; |
- |
- int modifiers = flags & (ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
- ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN); |
- ui::Accelerator accelerator(key_code, modifiers); |
- return extensions::ExtensionCommandsGlobalRegistry::Get(profile) |
- ->IsRegistered(accelerator); |
-} |
- |
-EventRewriter::DeviceType GetDeviceType(const std::string& device_name, |
- int vendor_id, |
- int product_id) { |
+EventRewriterChromeOS::DeviceType GetDeviceType(const std::string& device_name, |
+ int vendor_id, |
+ int product_id) { |
if (vendor_id == kHotrodRemoteVendorId && |
product_id == kHotrodRemoteProductId) { |
- return EventRewriter::kDeviceHotrodRemote; |
+ return EventRewriterChromeOS::kDeviceHotrodRemote; |
} |
if (base::LowerCaseEqualsASCII(device_name, "virtual core keyboard")) |
- return EventRewriter::kDeviceVirtualCoreKeyboard; |
+ return EventRewriterChromeOS::kDeviceVirtualCoreKeyboard; |
std::vector<std::string> tokens = base::SplitString( |
device_name, " .", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); |
@@ -211,10 +178,10 @@ EventRewriter::DeviceType GetDeviceType(const std::string& device_name, |
if (!found_keyboard && base::LowerCaseEqualsASCII(tokens[i], "keyboard")) |
found_keyboard = true; |
if (found_apple && found_keyboard) |
- return EventRewriter::kDeviceAppleKeyboard; |
+ return EventRewriterChromeOS::kDeviceAppleKeyboard; |
} |
- return EventRewriter::kDeviceUnknown; |
+ return EventRewriterChromeOS::kDeviceUnknown; |
} |
struct KeyboardRemapping { |
@@ -231,18 +198,19 @@ struct KeyboardRemapping { |
// - |dom_key| and |character| are set if |result.dom_key| is not NONE. |
// -|key_code| is set if |result.key_code| is not VKEY_UNKNOWN. |
// - |flags| are always set from |result.flags|, but this can be |EF_NONE|. |
- EventRewriter::MutableKeyState result; |
+ EventRewriterChromeOS::MutableKeyState result; |
}; |
-bool MatchKeyboardRemapping(const EventRewriter::MutableKeyState& suspect, |
- const KeyboardRemapping::Condition& test) { |
+bool MatchKeyboardRemapping( |
+ const EventRewriterChromeOS::MutableKeyState& suspect, |
+ const KeyboardRemapping::Condition& test) { |
return ((test.key_code == ui::VKEY_UNKNOWN) || |
(test.key_code == suspect.key_code)) && |
((suspect.flags & test.flags) == test.flags); |
} |
-void ApplyRemapping(const EventRewriter::MutableKeyState& changes, |
- EventRewriter::MutableKeyState* state) { |
+void ApplyRemapping(const EventRewriterChromeOS::MutableKeyState& changes, |
+ EventRewriterChromeOS::MutableKeyState* state) { |
state->flags |= changes.flags; |
if (changes.code != ui::DomCode::NONE) |
state->code = changes.code; |
@@ -258,8 +226,8 @@ void ApplyRemapping(const EventRewriter::MutableKeyState& changes, |
bool RewriteWithKeyboardRemappings( |
const KeyboardRemapping* mappings, |
size_t num_mappings, |
- const EventRewriter::MutableKeyState& input_state, |
- EventRewriter::MutableKeyState* remapped_state) { |
+ const EventRewriterChromeOS::MutableKeyState& input_state, |
+ EventRewriterChromeOS::MutableKeyState* remapped_state) { |
for (size_t i = 0; i < num_mappings; ++i) { |
const KeyboardRemapping& map = mappings[i]; |
if (MatchKeyboardRemapping(input_state, map.condition)) { |
@@ -272,7 +240,7 @@ bool RewriteWithKeyboardRemappings( |
} |
void SetMeaningForLayout(ui::EventType type, |
- EventRewriter::MutableKeyState* state) { |
+ EventRewriterChromeOS::MutableKeyState* state) { |
// Currently layout is applied by creating a temporary key event with the |
// current physical state, and extracting the layout results. |
ui::KeyEvent key(type, state->key_code, state->code, state->flags); |
@@ -302,18 +270,21 @@ ui::DomCode RelocateModifier(ui::DomCode code, ui::DomKeyLocation location) { |
} // namespace |
-EventRewriter::EventRewriter(ui::EventRewriter* sticky_keys_controller) |
+EventRewriterChromeOS::EventRewriterChromeOS( |
+ Delegate* delegate, |
+ ui::EventRewriter* sticky_keys_controller) |
: last_keyboard_device_id_(ui::ED_UNKNOWN_DEVICE), |
- ime_keyboard_for_testing_(NULL), |
- pref_service_for_testing_(NULL), |
+ ime_keyboard_for_testing_(nullptr), |
+ delegate_(delegate), |
sticky_keys_controller_(sticky_keys_controller), |
pressed_modifier_latches_(ui::EF_NONE), |
latched_modifier_latches_(ui::EF_NONE), |
used_modifier_latches_(ui::EF_NONE) {} |
-EventRewriter::~EventRewriter() {} |
+EventRewriterChromeOS::~EventRewriterChromeOS() {} |
-EventRewriter::DeviceType EventRewriter::KeyboardDeviceAddedForTesting( |
+EventRewriterChromeOS::DeviceType |
+EventRewriterChromeOS::KeyboardDeviceAddedForTesting( |
int device_id, |
const std::string& device_name) { |
// Tests must avoid XI2 reserved device IDs. |
@@ -322,13 +293,13 @@ EventRewriter::DeviceType EventRewriter::KeyboardDeviceAddedForTesting( |
kUnknownProductId); |
} |
-void EventRewriter::RewriteMouseButtonEventForTesting( |
+void EventRewriterChromeOS::RewriteMouseButtonEventForTesting( |
const ui::MouseEvent& event, |
std::unique_ptr<ui::Event>* rewritten_event) { |
RewriteMouseButtonEvent(event, rewritten_event); |
} |
-ui::EventRewriteStatus EventRewriter::RewriteEvent( |
+ui::EventRewriteStatus EventRewriterChromeOS::RewriteEvent( |
const ui::Event& event, |
std::unique_ptr<ui::Event>* rewritten_event) { |
if ((event.type() == ui::ET_KEY_PRESSED) || |
@@ -357,7 +328,7 @@ ui::EventRewriteStatus EventRewriter::RewriteEvent( |
return ui::EVENT_REWRITE_CONTINUE; |
} |
-ui::EventRewriteStatus EventRewriter::NextDispatchEvent( |
+ui::EventRewriteStatus EventRewriterChromeOS::NextDispatchEvent( |
const ui::Event& last_event, |
std::unique_ptr<ui::Event>* new_event) { |
if (sticky_keys_controller_) { |
@@ -372,7 +343,7 @@ ui::EventRewriteStatus EventRewriter::NextDispatchEvent( |
return ui::EVENT_REWRITE_CONTINUE; |
} |
-void EventRewriter::BuildRewrittenKeyEvent( |
+void EventRewriterChromeOS::BuildRewrittenKeyEvent( |
const ui::KeyEvent& key_event, |
const MutableKeyState& state, |
std::unique_ptr<ui::Event>* rewritten_event) { |
@@ -382,7 +353,7 @@ void EventRewriter::BuildRewrittenKeyEvent( |
rewritten_event->reset(rewritten_key_event); |
} |
-void EventRewriter::DeviceKeyPressedOrReleased(int device_id) { |
+void EventRewriterChromeOS::DeviceKeyPressedOrReleased(int device_id) { |
std::map<int, DeviceType>::const_iterator iter = |
device_id_to_type_.find(device_id); |
DeviceType type; |
@@ -400,22 +371,15 @@ void EventRewriter::DeviceKeyPressedOrReleased(int device_id) { |
last_keyboard_device_id_ = device_id; |
} |
-const PrefService* EventRewriter::GetPrefService() const { |
- if (pref_service_for_testing_) |
- return pref_service_for_testing_; |
- Profile* profile = ProfileManager::GetActiveUserProfile(); |
- return profile ? profile->GetPrefs() : NULL; |
-} |
- |
-bool EventRewriter::IsAppleKeyboard() const { |
+bool EventRewriterChromeOS::IsAppleKeyboard() const { |
return IsLastKeyboardOfType(kDeviceAppleKeyboard); |
} |
-bool EventRewriter::IsHotrodRemote() const { |
+bool EventRewriterChromeOS::IsHotrodRemote() const { |
return IsLastKeyboardOfType(kDeviceHotrodRemote); |
} |
-bool EventRewriter::IsLastKeyboardOfType(DeviceType device_type) const { |
+bool EventRewriterChromeOS::IsLastKeyboardOfType(DeviceType device_type) const { |
if (last_keyboard_device_id_ == ui::ED_UNKNOWN_DEVICE) |
return false; |
@@ -431,20 +395,13 @@ bool EventRewriter::IsLastKeyboardOfType(DeviceType device_type) const { |
return type == device_type; |
} |
-bool EventRewriter::TopRowKeysAreFunctionKeys(const ui::KeyEvent& event) const { |
- const PrefService* prefs = GetPrefService(); |
- return prefs && prefs->FindPreference(prefs::kLanguageSendFunctionKeys) && |
- prefs->GetBoolean(prefs::kLanguageSendFunctionKeys); |
-} |
- |
-int EventRewriter::GetRemappedModifierMasks(const PrefService& pref_service, |
- const ui::Event& event, |
- int original_flags) const { |
+int EventRewriterChromeOS::GetRemappedModifierMasks(const ui::Event& event, |
+ int original_flags) const { |
int unmodified_flags = original_flags; |
int rewritten_flags = pressed_modifier_latches_ | latched_modifier_latches_; |
for (size_t i = 0; unmodified_flags && (i < arraysize(kModifierRemappings)); |
++i) { |
- const ModifierRemapping* remapped_key = NULL; |
+ const ModifierRemapping* remapped_key = nullptr; |
if (!(unmodified_flags & kModifierRemappings[i].flag)) |
continue; |
switch (kModifierRemappings[i].flag) { |
@@ -477,7 +434,7 @@ int EventRewriter::GetRemappedModifierMasks(const PrefService& pref_service, |
} |
if (!remapped_key && kModifierRemappings[i].pref_name) { |
remapped_key = |
- GetRemappedKey(kModifierRemappings[i].pref_name, pref_service); |
+ GetRemappedKey(kModifierRemappings[i].pref_name, delegate_); |
oshima
2017/03/16 18:51:08
optional: I slightly prefer to handle delegate_ ==
Peng
2017/03/16 20:33:27
GetRemappedKey() is called so many places. It is h
|
} |
if (remapped_key) { |
unmodified_flags &= ~kModifierRemappings[i].flag; |
@@ -487,10 +444,11 @@ int EventRewriter::GetRemappedModifierMasks(const PrefService& pref_service, |
return rewritten_flags | unmodified_flags; |
} |
-ui::EventRewriteStatus EventRewriter::RewriteKeyEvent( |
+ui::EventRewriteStatus EventRewriterChromeOS::RewriteKeyEvent( |
const ui::KeyEvent& key_event, |
std::unique_ptr<ui::Event>* rewritten_event) { |
- if (IsExtensionCommandRegistered(key_event.key_code(), key_event.flags())) |
+ if (delegate_ && delegate_->IsExtensionCommandRegistered(key_event.key_code(), |
+ key_event.flags())) |
return ui::EVENT_REWRITE_CONTINUE; |
if (key_event.source_device_id() != ui::ED_UNKNOWN_DEVICE) |
DeviceKeyPressedOrReleased(key_event.source_device_id()); |
@@ -530,7 +488,8 @@ ui::EventRewriteStatus EventRewriter::RewriteKeyEvent( |
if (status == ui::EVENT_REWRITE_DISCARD) |
return ui::EVENT_REWRITE_DISCARD; |
is_sticky_key_extension_command = |
- IsExtensionCommandRegistered(state.key_code, state.flags); |
+ delegate_ && |
+ delegate_->IsExtensionCommandRegistered(state.key_code, state.flags); |
} |
// If flags have changed, this may change the interpretation of the key, |
@@ -569,7 +528,7 @@ ui::EventRewriteStatus EventRewriter::RewriteKeyEvent( |
return status; |
} |
-ui::EventRewriteStatus EventRewriter::RewriteMouseButtonEvent( |
+ui::EventRewriteStatus EventRewriterChromeOS::RewriteMouseButtonEvent( |
const ui::MouseEvent& mouse_event, |
std::unique_ptr<ui::Event>* rewritten_event) { |
int flags = mouse_event.flags(); |
@@ -610,7 +569,7 @@ ui::EventRewriteStatus EventRewriter::RewriteMouseButtonEvent( |
return status; |
} |
-ui::EventRewriteStatus EventRewriter::RewriteMouseWheelEvent( |
+ui::EventRewriteStatus EventRewriterChromeOS::RewriteMouseWheelEvent( |
const ui::MouseWheelEvent& wheel_event, |
std::unique_ptr<ui::Event>* rewritten_event) { |
if (!sticky_keys_controller_) |
@@ -625,7 +584,7 @@ ui::EventRewriteStatus EventRewriter::RewriteMouseWheelEvent( |
switch (status) { |
case ui::EVENT_REWRITE_REWRITTEN: |
case ui::EVENT_REWRITE_DISPATCH_ANOTHER: |
- // whell event has been rewritten and stored in |rewritten_event|. |
+ // whell event has been rewritten and stored in |rewritten_event|. |
#if defined(USE_X11) |
ui::UpdateX11EventForFlags(rewritten_event->get()); |
#endif |
@@ -648,7 +607,7 @@ ui::EventRewriteStatus EventRewriter::RewriteMouseWheelEvent( |
return status; |
} |
-ui::EventRewriteStatus EventRewriter::RewriteTouchEvent( |
+ui::EventRewriteStatus EventRewriterChromeOS::RewriteTouchEvent( |
const ui::TouchEvent& touch_event, |
std::unique_ptr<ui::Event>* rewritten_event) { |
int flags = touch_event.flags(); |
@@ -664,7 +623,7 @@ ui::EventRewriteStatus EventRewriter::RewriteTouchEvent( |
return ui::EVENT_REWRITE_REWRITTEN; |
} |
-ui::EventRewriteStatus EventRewriter::RewriteScrollEvent( |
+ui::EventRewriteStatus EventRewriterChromeOS::RewriteScrollEvent( |
const ui::ScrollEvent& scroll_event, |
std::unique_ptr<ui::Event>* rewritten_event) { |
if (!sticky_keys_controller_) |
@@ -680,25 +639,12 @@ ui::EventRewriteStatus EventRewriter::RewriteScrollEvent( |
return status; |
} |
-bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, |
- MutableKeyState* state) { |
+bool EventRewriterChromeOS::RewriteModifierKeys(const ui::KeyEvent& key_event, |
+ MutableKeyState* state) { |
DCHECK(key_event.type() == ui::ET_KEY_PRESSED || |
key_event.type() == ui::ET_KEY_RELEASED); |
- // Do nothing if we have just logged in as guest but have not restarted chrome |
- // process yet (so we are still on the login screen). In this situations we |
- // have no user profile so can not do anything useful. |
- // Note that currently, unlike other accounts, when user logs in as guest, we |
- // restart chrome process. In future this is to be changed. |
- // TODO(glotov): remove the following condition when we do not restart chrome |
- // when user logs in as guest. |
- // TODO(kpschoedel): check whether this is still necessary. |
- if (user_manager::UserManager::Get()->IsLoggedInAsGuest() && |
- LoginDisplayHost::default_host()) |
- return false; |
- |
- const PrefService* pref_service = GetPrefService(); |
- if (!pref_service) |
+ if (!delegate_ || !delegate_->RewriteModifierKeys()) |
return false; |
// Preserve a copy of the original before rewriting |state| based on |
@@ -709,7 +655,7 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, |
bool exact_event = false; |
// First, remap the key code. |
- const ModifierRemapping* remapped_key = NULL; |
+ const ModifierRemapping* remapped_key = nullptr; |
// Remapping based on DomKey. |
switch (incoming.key) { |
// On Chrome OS, F15 (XF86XK_Launch6) with NumLock (Mod2Mask) is sent |
@@ -720,7 +666,7 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, |
// syncable pref. |
if (HasDiamondKey()) |
remapped_key = |
- GetRemappedKey(prefs::kLanguageRemapDiamondKeyTo, *pref_service); |
+ GetRemappedKey(prefs::kLanguageRemapDiamondKeyTo, delegate_); |
// Default behavior of F15 is Control, even if --has-chromeos-diamond-key |
// is absent, according to unit test comments. |
if (!remapped_key) { |
@@ -738,11 +684,11 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, |
if (incoming.code == ui::DomCode::CAPS_LOCK) { |
characteristic_flag = ui::EF_ALTGR_DOWN | ui::EF_MOD3_DOWN; |
remapped_key = |
- GetRemappedKey(prefs::kLanguageRemapCapsLockKeyTo, *pref_service); |
+ GetRemappedKey(prefs::kLanguageRemapCapsLockKeyTo, delegate_); |
} else { |
characteristic_flag = ui::EF_ALTGR_DOWN; |
remapped_key = |
- GetRemappedKey(prefs::kLanguageRemapSearchKeyTo, *pref_service); |
+ GetRemappedKey(prefs::kLanguageRemapSearchKeyTo, delegate_); |
} |
} |
if (remapped_key && remapped_key->result.key_code == ui::VKEY_CAPITAL) |
@@ -783,7 +729,7 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, |
case ui::DomCode::CAPS_LOCK: |
characteristic_flag = ui::EF_CAPS_LOCK_ON; |
remapped_key = |
- GetRemappedKey(prefs::kLanguageRemapCapsLockKeyTo, *pref_service); |
+ GetRemappedKey(prefs::kLanguageRemapCapsLockKeyTo, delegate_); |
break; |
case ui::DomCode::META_LEFT: |
case ui::DomCode::META_RIGHT: |
@@ -794,7 +740,7 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, |
remapped_key = kModifierRemappingCtrl; |
} else { |
remapped_key = |
- GetRemappedKey(prefs::kLanguageRemapSearchKeyTo, *pref_service); |
+ GetRemappedKey(prefs::kLanguageRemapSearchKeyTo, delegate_); |
} |
// Default behavior is Super key, hence don't remap the event if the pref |
// is unavailable. |
@@ -803,22 +749,21 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, |
case ui::DomCode::CONTROL_RIGHT: |
characteristic_flag = ui::EF_CONTROL_DOWN; |
remapped_key = |
- GetRemappedKey(prefs::kLanguageRemapControlKeyTo, *pref_service); |
+ GetRemappedKey(prefs::kLanguageRemapControlKeyTo, delegate_); |
break; |
case ui::DomCode::ALT_LEFT: |
case ui::DomCode::ALT_RIGHT: |
// ALT key |
characteristic_flag = ui::EF_ALT_DOWN; |
- remapped_key = |
- GetRemappedKey(prefs::kLanguageRemapAltKeyTo, *pref_service); |
+ remapped_key = GetRemappedKey(prefs::kLanguageRemapAltKeyTo, delegate_); |
break; |
case ui::DomCode::ESCAPE: |
remapped_key = |
- GetRemappedKey(prefs::kLanguageRemapEscapeKeyTo, *pref_service); |
+ GetRemappedKey(prefs::kLanguageRemapEscapeKeyTo, delegate_); |
break; |
case ui::DomCode::BACKSPACE: |
remapped_key = |
- GetRemappedKey(prefs::kLanguageRemapBackspaceKeyTo, *pref_service); |
+ GetRemappedKey(prefs::kLanguageRemapBackspaceKeyTo, delegate_); |
break; |
default: |
break; |
@@ -830,15 +775,14 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, |
state->key = remapped_key->result.key; |
incoming.flags |= characteristic_flag; |
characteristic_flag = remapped_key->flag; |
- if (remapped_key->remap_to == input_method::kCapsLockKey) |
+ if (remapped_key->remap_to == ::chromeos::input_method::kCapsLockKey) |
characteristic_flag |= ui::EF_CAPS_LOCK_ON; |
state->code = RelocateModifier( |
state->code, ui::KeycodeConverter::DomCodeToLocation(incoming.code)); |
} |
// Next, remap modifier bits. |
- state->flags |= |
- GetRemappedModifierMasks(*pref_service, key_event, incoming.flags); |
+ state->flags |= GetRemappedModifierMasks(key_event, incoming.flags); |
// If the DomKey is not a modifier before remapping but is after, set the |
// modifier latches for the later non-modifier key's modifier states. |
@@ -871,10 +815,10 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, |
&& incoming.key_code != ui::VKEY_CAPITAL |
#endif |
) { |
- chromeos::input_method::ImeKeyboard* ime_keyboard = |
+ ::chromeos::input_method::ImeKeyboard* ime_keyboard = |
ime_keyboard_for_testing_ |
? ime_keyboard_for_testing_ |
- : chromeos::input_method::InputMethodManager::Get() |
+ : ::chromeos::input_method::InputMethodManager::Get() |
->GetImeKeyboard(); |
ime_keyboard->SetCapsLockEnabled(!ime_keyboard->CapsLockIsEnabled()); |
} |
@@ -882,13 +826,13 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, |
return exact_event; |
} |
-void EventRewriter::RewriteNumPadKeys(const ui::KeyEvent& key_event, |
- MutableKeyState* state) { |
+void EventRewriterChromeOS::RewriteNumPadKeys(const ui::KeyEvent& key_event, |
+ MutableKeyState* state) { |
DCHECK(key_event.type() == ui::ET_KEY_PRESSED || |
key_event.type() == ui::ET_KEY_RELEASED); |
static const struct NumPadRemapping { |
ui::KeyboardCode input_key_code; |
- EventRewriter::MutableKeyState result; |
+ MutableKeyState result; |
} kNumPadRemappings[] = { |
{ui::VKEY_DELETE, |
{ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::Constant<'.'>::Character, |
@@ -934,8 +878,8 @@ void EventRewriter::RewriteNumPadKeys(const ui::KeyEvent& key_event, |
} |
} |
-void EventRewriter::RewriteExtendedKeys(const ui::KeyEvent& key_event, |
- MutableKeyState* state) { |
+void EventRewriterChromeOS::RewriteExtendedKeys(const ui::KeyEvent& key_event, |
+ MutableKeyState* state) { |
DCHECK(key_event.type() == ui::ET_KEY_PRESSED || |
key_event.type() == ui::ET_KEY_RELEASED); |
MutableKeyState incoming = *state; |
@@ -1021,8 +965,8 @@ void EventRewriter::RewriteExtendedKeys(const ui::KeyEvent& key_event, |
} |
} |
-void EventRewriter::RewriteFunctionKeys(const ui::KeyEvent& key_event, |
- MutableKeyState* state) { |
+void EventRewriterChromeOS::RewriteFunctionKeys(const ui::KeyEvent& key_event, |
+ MutableKeyState* state) { |
CHECK(key_event.type() == ui::ET_KEY_PRESSED || |
key_event.type() == ui::ET_KEY_RELEASED); |
@@ -1030,8 +974,9 @@ void EventRewriter::RewriteFunctionKeys(const ui::KeyEvent& key_event, |
// By default the top row (F1-F12) keys are system keys for back, forward, |
// brightness, volume, etc. However, windows for v2 apps can optionally |
// request raw function keys for these keys. |
- bool top_row_keys_are_function_keys = TopRowKeysAreFunctionKeys(key_event); |
- bool search_is_pressed = (state->flags & ui::EF_COMMAND_DOWN) != 0; |
+ const bool top_row_keys_are_function_keys = |
+ delegate_ && delegate_->TopRowKeysAreFunctionKeys(); |
+ const bool search_is_pressed = (state->flags & ui::EF_COMMAND_DOWN) != 0; |
// Search? Top Row Result |
// ------- -------- ------ |
@@ -1093,7 +1038,7 @@ void EventRewriter::RewriteFunctionKeys(const ui::KeyEvent& key_event, |
// have different |KeyboardCode|s when modifiers are pressed, such as shift. |
static const struct { |
ui::DomCode input_dom_code; |
- EventRewriter::MutableKeyState result; |
+ MutableKeyState result; |
} kNumberKeysToFkeys[] = { |
{ui::DomCode::DIGIT1, |
{ui::EF_NONE, ui::DomCode::F1, ui::DomKey::F1, ui::VKEY_F1}}, |
@@ -1129,15 +1074,16 @@ void EventRewriter::RewriteFunctionKeys(const ui::KeyEvent& key_event, |
} |
} |
-void EventRewriter::RewriteLocatedEvent(const ui::Event& event, int* flags) { |
- const PrefService* pref_service = GetPrefService(); |
- if (!pref_service) |
+void EventRewriterChromeOS::RewriteLocatedEvent(const ui::Event& event, |
+ int* flags) { |
+ if (!delegate_) |
return; |
- *flags = GetRemappedModifierMasks(*pref_service, event, *flags); |
+ *flags = GetRemappedModifierMasks(event, *flags); |
} |
-int EventRewriter::RewriteModifierClick(const ui::MouseEvent& mouse_event, |
- int* flags) { |
+int EventRewriterChromeOS::RewriteModifierClick( |
+ const ui::MouseEvent& mouse_event, |
+ int* flags) { |
// Remap Alt+Button1 to Button3. |
const int kAltLeftButton = (ui::EF_ALT_DOWN | ui::EF_LEFT_MOUSE_BUTTON); |
if (((*flags & kAltLeftButton) == kAltLeftButton) && |
@@ -1154,7 +1100,8 @@ int EventRewriter::RewriteModifierClick(const ui::MouseEvent& mouse_event, |
return ui::EF_NONE; |
} |
-EventRewriter::DeviceType EventRewriter::KeyboardDeviceAddedInternal( |
+EventRewriterChromeOS::DeviceType |
+EventRewriterChromeOS::KeyboardDeviceAddedInternal( |
int device_id, |
const std::string& device_name, |
int vendor_id, |
@@ -1179,7 +1126,8 @@ EventRewriter::DeviceType EventRewriter::KeyboardDeviceAddedInternal( |
return type; |
} |
-EventRewriter::DeviceType EventRewriter::KeyboardDeviceAdded(int device_id) { |
+EventRewriterChromeOS::DeviceType EventRewriterChromeOS::KeyboardDeviceAdded( |
+ int device_id) { |
if (!ui::InputDeviceManager::HasInstance()) |
return kDeviceUnknown; |
const std::vector<ui::InputDevice>& keyboard_devices = |
@@ -1193,4 +1141,4 @@ EventRewriter::DeviceType EventRewriter::KeyboardDeviceAdded(int device_id) { |
return kDeviceUnknown; |
} |
-} // namespace chromeos |
+} // namespace ui |