Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(37)

Unified Diff: chrome/browser/chromeos/events/event_rewriter_unittest.cc

Issue 255033003: Convert sticky keys to a chromeos::EventRewriter phase. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@x354034-er
Patch Set: address review comments from sadrul Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/events/event_rewriter_unittest.cc
diff --git a/chrome/browser/chromeos/events/event_rewriter_unittest.cc b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
index 6b350ee4d5f338228cb409670df49404e0a82b3f..5ac705102c886b555fe92770304f6da8ab0acff7 100644
--- a/chrome/browser/chromeos/events/event_rewriter_unittest.cc
+++ b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
@@ -4,15 +4,10 @@
#include "chrome/browser/chromeos/events/event_rewriter.h"
-#include <X11/keysym.h>
-#include <X11/XF86keysym.h>
-#include <X11/Xlib.h>
-#undef Bool
-#undef None
-#undef RootWindow
-
#include <vector>
+#include "ash/shell.h"
+#include "ash/sticky_keys/sticky_keys_controller.h"
#include "ash/test/ash_test_base.h"
#include "ash/wm/window_state.h"
#include "base/basictypes.h"
@@ -32,12 +27,21 @@
#include "ui/aura/window.h"
#include "ui/events/event.h"
#include "ui/events/event_rewriter.h"
+#include "ui/events/test/test_event_processor.h"
+
+#if defined(USE_X11)
+#include <X11/keysym.h>
+
#include "ui/events/test/events_test_utils_x11.h"
#include "ui/events/x/touch_factory_x11.h"
#include "ui/gfx/x/x11_types.h"
+#endif
namespace {
+// The device id of the test touchpad device.
+const unsigned int kTouchPadDeviceId = 1;
+
std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode,
int ui_flags,
ui::EventType ui_type) {
@@ -192,8 +196,7 @@ namespace chromeos {
class EventRewriterTest : public ash::test::AshTestBase {
public:
EventRewriterTest()
- : display_(gfx::GetXDisplay()),
- mock_user_manager_(new chromeos::MockUserManager),
+ : mock_user_manager_(new chromeos::MockUserManager),
user_manager_enabler_(mock_user_manager_),
input_method_manager_mock_(NULL) {}
virtual ~EventRewriterTest() {}
@@ -227,7 +230,6 @@ class EventRewriterTest : public ash::test::AshTestBase {
return flags;
}
- Display* display_;
chromeos::MockUserManager* mock_user_manager_; // Not owned.
chromeos::ScopedUserManagerEnabler user_manager_enabler_;
chromeos::input_method::MockInputMethodManager* input_method_manager_mock_;
@@ -236,7 +238,7 @@ class EventRewriterTest : public ash::test::AshTestBase {
TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
// First, test with a PC keyboard.
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.DeviceAddedForTesting(0, "PC Keyboard");
rewriter.set_last_device_id_for_testing(0);
rewriter.set_pref_service_for_testing(&prefs);
@@ -317,7 +319,7 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kAltKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
rewriter.DeviceAddedForTesting(0, "PC Keyboard");
rewriter.set_last_device_id_for_testing(0);
@@ -357,7 +359,7 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
void EventRewriterTest::TestRewriteNumPadKeys() {
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -499,7 +501,7 @@ TEST_F(EventRewriterTest, TestRewriteNumPadKeysWithDiamondKeyFlag) {
// Tests if the rewriter can handle a Command + Num Pad event.
void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() {
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.DeviceAddedForTesting(0, "Apple Keyboard");
rewriter.set_last_device_id_for_testing(0);
rewriter.set_pref_service_for_testing(&prefs);
@@ -541,7 +543,7 @@ TEST_F(EventRewriterTest,
TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) {
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -584,7 +586,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) {
TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) {
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -627,7 +629,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) {
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kVoidKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase disabled_modifier_tests[] = {
@@ -702,7 +704,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) {
search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
search.SetValue(chromeos::input_method::kControlKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase s_tests[] = {
@@ -766,7 +768,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) {
search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
search.SetValue(chromeos::input_method::kEscapeKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {// Press Search. Confirm the event is now VKEY_ESCAPE.
@@ -788,7 +790,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
search.SetValue(chromeos::input_method::kAltKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase s2a_tests[] = {
@@ -865,7 +867,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) {
search.SetValue(chromeos::input_method::kCapsLockKey);
chromeos::input_method::FakeImeKeyboard ime_keyboard;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
@@ -935,7 +937,7 @@ TEST_F(EventRewriterTest, TestRewriteCapsLock) {
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
chromeos::input_method::FakeImeKeyboard ime_keyboard;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
@@ -954,7 +956,7 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKey) {
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
chromeos::input_method::FakeImeKeyboard ime_keyboard;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
@@ -987,7 +989,7 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) {
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
chromeos::input_method::FakeImeKeyboard ime_keyboard;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
@@ -1039,7 +1041,7 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) {
control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs);
control.SetValue(chromeos::input_method::kControlKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -1075,7 +1077,7 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) {
control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs);
control.SetValue(chromeos::input_method::kControlKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
input_method_manager_mock_->set_mod3_used(true);
@@ -1092,7 +1094,7 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) {
TEST_F(EventRewriterTest, TestRewriteExtendedKeys) {
TestingPrefServiceSyncable prefs;
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.DeviceAddedForTesting(0, "PC Keyboard");
rewriter.set_last_device_id_for_testing(0);
rewriter.set_pref_service_for_testing(&prefs);
@@ -1201,7 +1203,7 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeys) {
TEST_F(EventRewriterTest, TestRewriteFunctionKeys) {
TestingPrefServiceSyncable prefs;
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
FunctionKeyTestCase tests[] = {
@@ -1529,7 +1531,7 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) {
search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
search.SetValue(chromeos::input_method::kControlKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
CommandLine::ForCurrentProcess()->AppendSwitchASCII(
@@ -1556,6 +1558,8 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) {
}
TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) {
+#if defined(USE_X11)
+ // TODO(kpschoedel): pending alternative to xevent.xany.send_event
// Remap Control to Alt.
TestingPrefServiceSyncable prefs;
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
@@ -1563,7 +1567,7 @@ TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) {
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kAltKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
// Send left control press.
@@ -1582,6 +1586,7 @@ TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) {
rewriter.RewriteEvent(keyevent, &new_event));
EXPECT_FALSE(new_event);
}
+#endif
}
TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) {
@@ -1592,7 +1597,7 @@ TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) {
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kAltKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
const int kTouchId = 2;
@@ -1609,6 +1614,63 @@ TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) {
new_event->flags() & (ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN));
}
+// Keeps a buffer of handled events.
+class EventBuffer : public ui::test::TestEventProcessor {
+ public:
+ EventBuffer() {}
+ virtual ~EventBuffer() {}
+
+ void PopEvents(ScopedVector<ui::Event>* events) {
+ events->clear();
+ events->swap(events_);
+ }
+
+ private:
+ // ui::EventProcessor overrides:
+ virtual ui::EventDispatchDetails OnEventFromSource(
+ ui::Event* event) OVERRIDE {
+ if (event->IsKeyEvent()) {
+ events_.push_back(new ui::KeyEvent(*static_cast<ui::KeyEvent*>(event)));
+ } else if (event->IsMouseWheelEvent()) {
+ events_.push_back(
+ new ui::MouseWheelEvent(*static_cast<ui::MouseWheelEvent*>(event)));
+ } else if (event->IsMouseEvent()) {
+ events_.push_back(
+ new ui::MouseEvent(*static_cast<ui::MouseEvent*>(event)));
+ }
+ return ui::EventDispatchDetails();
+ }
+
+ ScopedVector<ui::Event> events_;
+
+ DISALLOW_COPY_AND_ASSIGN(EventBuffer);
+};
+
+// Trivial EventSource that does nothing but send events.
+class TestEventSource : public ui::EventSource {
+ public:
+ explicit TestEventSource(ui::EventProcessor* processor)
+ : processor_(processor) {}
+ virtual ui::EventProcessor* GetEventProcessor() OVERRIDE {
+ return processor_;
+ }
+ ui::EventDispatchDetails Send(ui::Event* event) {
+ return SendEventToProcessor(event);
+ }
+
+ void SendActivateStickyKeyPattern(ui::KeyboardCode key_code) {
+ ui::KeyEvent press(ui::ET_KEY_PRESSED, key_code, ui::EF_NONE, false);
+ ui::EventDispatchDetails details = Send(&press);
+ CHECK(!details.dispatcher_destroyed);
+ ui::KeyEvent release(ui::ET_KEY_RELEASED, key_code, ui::EF_NONE, false);
+ details = Send(&release);
+ CHECK(!details.dispatcher_destroyed);
+ }
+
+ private:
+ ui::EventProcessor* processor_;
+};
+
// Tests of event rewriting that depend on the Ash window manager.
class EventRewriterAshTest : public ash::test::AshTestBase {
public:
@@ -1622,12 +1684,23 @@ class EventRewriterAshTest : public ash::test::AshTestBase {
return rewriter_->RewriteEvent(event, rewritten_event);
}
+ EventRewriter* rewriter() const { return rewriter_.get(); }
+
+ ash::StickyKeysController* sticky_keys_controller() const {
+ return sticky_keys_controller_;
+ }
+
protected:
virtual void SetUp() OVERRIDE {
AshTestBase::SetUp();
- rewriter_.reset(new EventRewriter());
+ sticky_keys_controller_ =
+ ash::Shell::GetInstance()->sticky_keys_controller();
+ rewriter_.reset(new EventRewriter(sticky_keys_controller_));
chromeos::Preferences::RegisterProfilePrefs(prefs_.registry());
rewriter_->set_pref_service_for_testing(&prefs_);
+#if defined(USE_X11)
+ ui::SetUpTouchPadForTest(kTouchPadDeviceId);
+#endif
}
virtual void TearDown() OVERRIDE {
@@ -1642,6 +1715,7 @@ class EventRewriterAshTest : public ash::test::AshTestBase {
chromeos::MockUserManager* mock_user_manager_; // Not owned.
chromeos::ScopedUserManagerEnabler user_manager_enabler_;
+ ash::StickyKeysController* sticky_keys_controller_;
DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest);
};
@@ -1699,7 +1773,7 @@ TEST_F(EventRewriterTest, TestRewrittenModifierClick) {
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kAltKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
// Check that Control + Left Button is converted (via Alt + Left Button)
@@ -1721,12 +1795,15 @@ TEST_F(EventRewriterTest, TestRewrittenModifierClick) {
TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) {
+#if defined(USE_X11)
+ // TODO(kpschoedel): pending changes for crbug.com/360377
+ // to |chromeos::EventRewriter::RewriteLocatedEvent()
std::vector<unsigned int> device_list;
device_list.push_back(10);
device_list.push_back(11);
ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list);
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
const int kLeftAndAltFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN;
{
@@ -1792,6 +1869,132 @@ TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) {
int flags = RewriteMouseEvent(&rewriter, release);
EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags);
}
+#endif
+}
+
+TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) {
+ // Test the actual key event dispatch implementation.
+ EventBuffer buffer;
+ TestEventSource source(&buffer);
+ source.AddEventRewriter(rewriter());
+ sticky_keys_controller()->Enable(true);
+ ScopedVector<ui::Event> events;
+
+ source.SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
+ buffer.PopEvents(&events);
+ EXPECT_EQ(1u, events.size());
+ EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type());
+ EXPECT_EQ(ui::VKEY_CONTROL,
+ static_cast<ui::KeyEvent*>(events[0])->key_code());
+
+ // Test key press event is correctly modified and modifier release
+ // event is sent.
+ ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::EF_NONE, false);
+ ui::EventDispatchDetails details = source.Send(&press);
+ buffer.PopEvents(&events);
+ EXPECT_EQ(2u, events.size());
+ EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type());
+ EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code());
+ EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
+ EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
+ EXPECT_EQ(ui::VKEY_CONTROL,
+ static_cast<ui::KeyEvent*>(events[1])->key_code());
+
+ // Test key release event is not modified.
+ ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::EF_NONE, false);
+ details = source.Send(&release);
+ ASSERT_FALSE(details.dispatcher_destroyed);
+ buffer.PopEvents(&events);
+ EXPECT_EQ(1u, events.size());
+ EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type());
+ EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code());
+ EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN);
+}
+
+TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) {
+ EventBuffer buffer;
+ TestEventSource source(&buffer);
+ source.AddEventRewriter(rewriter());
+ sticky_keys_controller()->Enable(true);
+ ScopedVector<ui::Event> events;
+
+ source.SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
+ buffer.PopEvents(&events);
+
+ // Test mouse press event is correctly modified.
+ gfx::Point location(0, 0);
+ ui::MouseEvent press(ui::ET_MOUSE_PRESSED,
+ location,
+ location,
+ ui::EF_LEFT_MOUSE_BUTTON,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ ui::EventDispatchDetails details = source.Send(&press);
+ ASSERT_FALSE(details.dispatcher_destroyed);
+ buffer.PopEvents(&events);
+ EXPECT_EQ(1u, events.size());
+ EXPECT_EQ(ui::ET_MOUSE_PRESSED, events[0]->type());
+ EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
+
+ // Test mouse release event is correctly modified and modifier release
+ // event is sent. The mouse event should have the correct DIP location.
+ ui::MouseEvent release(ui::ET_MOUSE_RELEASED,
+ location,
+ location,
+ ui::EF_LEFT_MOUSE_BUTTON,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ details = source.Send(&release);
+ ASSERT_FALSE(details.dispatcher_destroyed);
+ buffer.PopEvents(&events);
+ EXPECT_EQ(2u, events.size());
+ EXPECT_EQ(ui::ET_MOUSE_RELEASED, events[0]->type());
+ EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
+ EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
+ EXPECT_EQ(ui::VKEY_CONTROL,
+ static_cast<ui::KeyEvent*>(events[1])->key_code());
+}
+
+TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) {
+ EventBuffer buffer;
+ TestEventSource source(&buffer);
+ source.AddEventRewriter(rewriter());
+ sticky_keys_controller()->Enable(true);
+ ScopedVector<ui::Event> events;
+
+ // Test positive mouse wheel event is correctly modified and modifier release
+ // event is sent.
+ source.SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
+ buffer.PopEvents(&events);
+ gfx::Point location(0, 0);
+ ui::MouseEvent mev(ui::ET_MOUSEWHEEL,
+ location,
+ location,
+ ui::EF_LEFT_MOUSE_BUTTON,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ ui::MouseWheelEvent positive(mev, 0, ui::MouseWheelEvent::kWheelDelta);
+ ui::EventDispatchDetails details = source.Send(&positive);
+ ASSERT_FALSE(details.dispatcher_destroyed);
+ buffer.PopEvents(&events);
+ EXPECT_EQ(2u, events.size());
+ EXPECT_TRUE(events[0]->IsMouseWheelEvent());
+ EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
+ EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
+ EXPECT_EQ(ui::VKEY_CONTROL,
+ static_cast<ui::KeyEvent*>(events[1])->key_code());
+
+ // Test negative mouse wheel event is correctly modified and modifier release
+ // event is sent.
+ source.SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
+ buffer.PopEvents(&events);
+ ui::MouseWheelEvent negative(mev, 0, -ui::MouseWheelEvent::kWheelDelta);
+ details = source.Send(&negative);
+ ASSERT_FALSE(details.dispatcher_destroyed);
+ buffer.PopEvents(&events);
+ EXPECT_EQ(2u, events.size());
+ EXPECT_TRUE(events[0]->IsMouseWheelEvent());
+ EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
+ EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
+ EXPECT_EQ(ui::VKEY_CONTROL,
+ static_cast<ui::KeyEvent*>(events[1])->key_code());
}
} // namespace chromeos
« ash/sticky_keys/sticky_keys_controller.cc ('K') | « chrome/browser/chromeos/events/event_rewriter.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698