Merge EventRewriterAshTest into EventRewriterTest
Most of them are overlapped, so unify them to avoid maintaining
duplication.
BUG=1440147
TEST=Tryjob
Change-Id: I10d823dbb96ede3d5e918799a7a8089bdbd239f2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4997405
Commit-Queue: Hidehiko Abe <hidehiko@chromium.org>
Reviewed-by: David Padlipsky <dpad@google.com>
Cr-Commit-Position: refs/heads/main@{#1218595}
diff --git a/chrome/browser/ash/events/event_rewriter_unittest.cc b/chrome/browser/ash/events/event_rewriter_unittest.cc
index 1320aafe..289d4987 100644
--- a/chrome/browser/ash/events/event_rewriter_unittest.cc
+++ b/chrome/browser/ash/events/event_rewriter_unittest.cc
@@ -267,8 +267,8 @@
std::make_unique<ui::KeyboardDeviceIdEventRewriter>(
keyboard_capability_.get());
event_rewriter_ash_ = std::make_unique<ui::EventRewriterAsh>(
- delegate_.get(), keyboard_capability_.get(), nullptr, false,
- &fake_ime_keyboard_);
+ delegate_.get(), keyboard_capability_.get(),
+ Shell::Get()->sticky_keys_controller(), false, &fake_ime_keyboard_);
source_.AddEventRewriter(keyboard_device_id_event_rewriter_.get());
source_.AddEventRewriter(event_rewriter_ash_.get());
@@ -278,6 +278,9 @@
source_.RemoveEventRewriter(event_rewriter_ash_.get());
source_.RemoveEventRewriter(keyboard_device_id_event_rewriter_.get());
+ event_rewriter_ash_.reset();
+ keyboard_device_id_event_rewriter_.reset();
+
input_device_settings_controller_mock_.reset();
input_device_settings_controller_resetter_.reset();
ChromeAshTestBase::TearDown();
@@ -371,6 +374,27 @@
return keyboard;
}
+ std::vector<std::unique_ptr<ui::Event>> TakeEvents() {
+ return sink_.TakeEvents();
+ }
+
+ void SendKeyEvent(ui::EventType type,
+ ui::KeyboardCode key_code,
+ ui::DomCode code,
+ ui::DomKey key,
+ int flags) {
+ ui::KeyEvent press(type, key_code, code, flags, key, ui::EventTimeForNow());
+ ui::EventDispatchDetails details = source_.Send(&press);
+ CHECK(!details.dispatcher_destroyed);
+ }
+
+ void SendActivateStickyKeyPattern(ui::KeyboardCode key_code,
+ ui::DomCode code,
+ ui::DomKey key) {
+ SendKeyEvent(ui::ET_KEY_PRESSED, key_code, code, key, ui::EF_NONE);
+ SendKeyEvent(ui::ET_KEY_RELEASED, key_code, code, key, ui::EF_NONE);
+ }
+
void TestKeyboard(const std::string& name,
const std::string& layout,
ui::InputDeviceType type,
@@ -4423,8 +4447,7 @@
ui::DomCode::CONTROL_LEFT, ui::EF_FINAL,
ui::DomKey::CONTROL, ui::EventTimeForNow());
source().Send(&keyevent);
- auto events =
- static_cast<TestEventSink*>(source().GetEventSink())->TakeEvents();
+ auto events = TakeEvents();
// Control should NOT be remapped to Alt if EF_FINAL is set.
ASSERT_EQ(1u, events.size());
ASSERT_TRUE(events[0]->IsKeyEvent());
@@ -4450,141 +4473,15 @@
press.set_flags(ui::EF_CONTROL_DOWN);
source().Send(&press);
- auto events =
- static_cast<TestEventSink*>(source().GetEventSink())->TakeEvents();
+ auto events = TakeEvents();
ASSERT_EQ(1u, events.size());
// Control should be remapped to Alt.
EXPECT_EQ(ui::EF_ALT_DOWN,
events[0]->flags() & (ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN));
}
-// Tests of event rewriting that depend on the Ash window manager.
-class EventRewriterAshTest : public ChromeAshTestBase {
- public:
- EventRewriterAshTest()
- : source_(&sink_),
- fake_user_manager_(new FakeChromeUserManager),
- user_manager_enabler_(base::WrapUnique(fake_user_manager_.get())) {}
-
- EventRewriterAshTest(const EventRewriterAshTest&) = delete;
- EventRewriterAshTest& operator=(const EventRewriterAshTest&) = delete;
-
- ~EventRewriterAshTest() override {}
-
- ui::EventDispatchDetails Send(ui::Event* event) {
- return source_.Send(event);
- }
-
- void SendKeyEvent(ui::EventType type,
- ui::KeyboardCode key_code,
- ui::DomCode code,
- ui::DomKey key) {
- SendKeyEvent(type, key_code, code, key, ui::EF_NONE);
- }
-
- void SendKeyEvent(ui::EventType type,
- ui::KeyboardCode key_code,
- ui::DomCode code,
- ui::DomKey key,
- int flags) {
- ui::KeyEvent press(type, key_code, code, flags, key, ui::EventTimeForNow());
- ui::EventDispatchDetails details = Send(&press);
- CHECK(!details.dispatcher_destroyed);
- }
-
- void SendActivateStickyKeyPattern(ui::KeyboardCode key_code,
- ui::DomCode code,
- ui::DomKey key) {
- SendKeyEvent(ui::ET_KEY_PRESSED, key_code, code, key);
- SendKeyEvent(ui::ET_KEY_RELEASED, key_code, code, key);
- }
-
- protected:
- sync_preferences::TestingPrefServiceSyncable* prefs() { return &prefs_; }
-
- void InitModifierKeyPref(IntegerPrefMember* int_pref,
- const std::string& pref_name,
- ui::mojom::ModifierKey remap_from,
- ui::mojom::ModifierKey remap_to) {
- if (!features::IsInputDeviceSettingsSplitEnabled()) {
- if (int_pref->GetPrefName() !=
- pref_name) { // skip if already initialized.
- int_pref->Init(pref_name, prefs());
- }
- int_pref->SetValue(static_cast<int>(remap_to));
- return;
- }
-
- if (remap_from == remap_to) {
- keyboard_settings->modifier_remappings.erase(remap_from);
- return;
- }
-
- keyboard_settings->modifier_remappings[remap_from] = remap_to;
- }
-
- std::vector<std::unique_ptr<ui::Event>> TakeEvents() {
- return sink_.TakeEvents();
- }
-
- void SetUp() override {
- ChromeAshTestBase::SetUp();
-
- input_device_settings_controller_resetter_ = std::make_unique<
- InputDeviceSettingsController::ScopedResetterForTest>();
- input_device_settings_controller_mock_ =
- std::make_unique<MockInputDeviceSettingsController>();
- keyboard_settings = mojom::KeyboardSettings::New();
- EXPECT_CALL(*input_device_settings_controller_mock_,
- GetKeyboardSettings(testing::_))
- .WillRepeatedly(testing::Return(keyboard_settings.get()));
-
- sticky_keys_controller_ = Shell::Get()->sticky_keys_controller();
- delegate_ = std::make_unique<EventRewriterDelegateImpl>(nullptr);
- delegate_->set_pref_service_for_testing(prefs());
- rewriter_ = std::make_unique<ui::EventRewriterAsh>(
- delegate_.get(), keyboard_capability_.get(), sticky_keys_controller_,
- false, &fake_ime_keyboard_);
- Preferences::RegisterProfilePrefs(prefs_.registry());
- source_.AddEventRewriter(rewriter_.get());
- sticky_keys_controller_->Enable(true);
- }
-
- void TearDown() override {
- input_device_settings_controller_mock_.reset();
- input_device_settings_controller_resetter_.reset();
- rewriter_.reset();
- ChromeAshTestBase::TearDown();
- }
-
- ui::test::TestEventSource& source() { return source_; }
- EventRewriterDelegateImpl* delegate() { return delegate_.get(); }
-
- protected:
- raw_ptr<StickyKeysController, DanglingUntriaged | ExperimentalAsh>
- sticky_keys_controller_;
- std::unique_ptr<MockInputDeviceSettingsController>
- input_device_settings_controller_mock_;
- mojom::KeyboardSettingsPtr keyboard_settings;
-
- private:
- std::unique_ptr<EventRewriterDelegateImpl> delegate_;
- std::unique_ptr<ui::KeyboardCapability> keyboard_capability_;
- input_method::FakeImeKeyboard fake_ime_keyboard_;
- std::unique_ptr<ui::EventRewriterAsh> rewriter_;
- std::unique_ptr<InputDeviceSettingsController::ScopedResetterForTest>
- input_device_settings_controller_resetter_;
-
- TestEventSink sink_;
- ui::test::TestEventSource source_;
-
- raw_ptr<FakeChromeUserManager, DanglingUntriaged | ExperimentalAsh>
- fake_user_manager_; // Not owned.
- user_manager::ScopedUserManager user_manager_enabler_;
- sync_preferences::TestingPrefServiceSyncable prefs_;
-};
-
-TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) {
+TEST_F(EventRewriterTest, TopRowKeysAreFunctionKeys) {
+ Preferences::RegisterProfilePrefs(prefs()->registry());
std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(1));
wm::ActivateWindow(window.get());
@@ -4598,7 +4495,7 @@
send_function_keys_pref.Init(prefs::kSendFunctionKeys, prefs());
send_function_keys_pref.SetValue(true);
keyboard_settings->top_row_are_fkeys = true;
- ui::EventDispatchDetails details = Send(&press_f1);
+ ui::EventDispatchDetails details = source().Send(&press_f1);
ASSERT_FALSE(details.dispatcher_destroyed);
{
auto events = TakeEvents();
@@ -4612,7 +4509,7 @@
// rewritten to the back key.
send_function_keys_pref.SetValue(false);
keyboard_settings->top_row_are_fkeys = false;
- details = Send(&press_f1);
+ details = source().Send(&press_f1);
ASSERT_FALSE(details.dispatcher_destroyed);
{
auto events = TakeEvents();
@@ -4904,7 +4801,8 @@
}
}
-TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) {
+TEST_F(EventRewriterTest, StickyKeyEventDispatchImpl) {
+ Shell::Get()->sticky_keys_controller()->Enable(true);
// Test the actual key event dispatch implementation.
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
ui::DomKey::CONTROL);
@@ -4920,7 +4818,7 @@
ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::DomCode::US_C,
ui::EF_NONE, ui::DomKey::Constant<'c'>::Character,
ui::EventTimeForNow());
- ui::EventDispatchDetails details = Send(&press);
+ ui::EventDispatchDetails details = source().Send(&press);
{
auto events = TakeEvents();
ASSERT_EQ(2u, events.size());
@@ -4936,7 +4834,7 @@
ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::DomCode::US_C,
ui::EF_NONE, ui::DomKey::Constant<'c'>::Character,
ui::EventTimeForNow());
- details = Send(&release);
+ details = source().Send(&release);
ASSERT_FALSE(details.dispatcher_destroyed);
{
auto events = TakeEvents();
@@ -4947,7 +4845,8 @@
}
}
-TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) {
+TEST_F(EventRewriterTest, MouseEventDispatchImpl) {
+ Shell::Get()->sticky_keys_controller()->Enable(true);
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
ui::DomKey::CONTROL);
std::ignore = TakeEvents();
@@ -4957,7 +4856,7 @@
ui::MouseEvent press(ui::ET_MOUSE_PRESSED, location, location,
ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON,
ui::EF_LEFT_MOUSE_BUTTON);
- ui::EventDispatchDetails details = Send(&press);
+ ui::EventDispatchDetails details = source().Send(&press);
ASSERT_FALSE(details.dispatcher_destroyed);
{
auto events = TakeEvents();
@@ -4971,7 +4870,7 @@
ui::MouseEvent release(ui::ET_MOUSE_RELEASED, location, location,
ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON,
ui::EF_LEFT_MOUSE_BUTTON);
- details = Send(&release);
+ details = source().Send(&release);
ASSERT_FALSE(details.dispatcher_destroyed);
{
auto events = TakeEvents();
@@ -4984,7 +4883,8 @@
}
}
-TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) {
+TEST_F(EventRewriterTest, MouseWheelEventDispatchImpl) {
+ Shell::Get()->sticky_keys_controller()->Enable(true);
// Test positive mouse wheel event is correctly modified and modifier release
// event is sent.
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
@@ -4996,7 +4896,7 @@
gfx::Vector2d(0, ui::MouseWheelEvent::kWheelDelta), location, location,
ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON,
ui::EF_LEFT_MOUSE_BUTTON);
- ui::EventDispatchDetails details = Send(&positive);
+ ui::EventDispatchDetails details = source().Send(&positive);
ASSERT_FALSE(details.dispatcher_destroyed);
{
auto events = TakeEvents();
@@ -5018,7 +4918,7 @@
gfx::Vector2d(0, -ui::MouseWheelEvent::kWheelDelta), location, location,
ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON,
ui::EF_LEFT_MOUSE_BUTTON);
- details = Send(&negative);
+ details = source().Send(&negative);
ASSERT_FALSE(details.dispatcher_destroyed);
{
auto events = TakeEvents();
@@ -5033,7 +4933,7 @@
// Tests that if modifier keys are remapped, the flags of a mouse wheel event
// will be rewritten properly.
-TEST_F(EventRewriterAshTest, MouseWheelEventModifiersRewritten) {
+TEST_F(EventRewriterTest, MouseWheelEventModifiersRewritten) {
// Generate a mouse wheel event that has a CONTROL_DOWN modifier flag and
// expect that no rewriting happens as no modifier remapping is active.
gfx::Point location(0, 0);
@@ -5041,7 +4941,7 @@
gfx::Vector2d(0, ui::MouseWheelEvent::kWheelDelta), location, location,
ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN,
ui::EF_LEFT_MOUSE_BUTTON);
- ui::EventDispatchDetails details = Send(&positive);
+ ui::EventDispatchDetails details = source().Send(&positive);
ASSERT_FALSE(details.dispatcher_destroyed);
{
auto events = TakeEvents();
@@ -5058,7 +4958,7 @@
// Sends the same events once again and expect that it will be rewritten to
// ALT_DOWN.
- details = Send(&positive);
+ details = source().Send(&positive);
ASSERT_FALSE(details.dispatcher_destroyed);
{
auto events = TakeEvents();
@@ -5070,7 +4970,9 @@
}
// Tests edge cases of key event rewriting (see https://crbug.com/913209).
-TEST_F(EventRewriterAshTest, KeyEventRewritingEdgeCases) {
+TEST_F(EventRewriterTest, KeyEventRewritingEdgeCases) {
+ Preferences::RegisterProfilePrefs(prefs()->registry());
+
base::test::ScopedFeatureList feature_list;
feature_list.InitAndDisableFeature(
features::kAltClickAndSixPackCustomization);
@@ -5078,7 +4980,7 @@
// Edge case 1: Press the Launcher button first. Then press the Up Arrow
// button.
SendKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_COMMAND, ui::DomCode::META_LEFT,
- ui::DomKey::META);
+ ui::DomKey::META, ui::EF_NONE);
SendKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_UP, ui::DomCode::ARROW_UP,
ui::DomKey::ARROW_UP, ui::EF_COMMAND_DOWN);
{
@@ -5089,7 +4991,7 @@
// When releasing the Launcher button, the rewritten event should be released
// as well.
SendKeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_COMMAND, ui::DomCode::META_LEFT,
- ui::DomKey::META);
+ ui::DomKey::META, ui::EF_NONE);
{
auto events = TakeEvents();
ASSERT_EQ(2u, events.size());
@@ -5099,9 +5001,9 @@
// Edge case 2: Press the Up Arrow button first. Then press the Launch button.
SendKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_UP, ui::DomCode::ARROW_UP,
- ui::DomKey::ARROW_UP);
+ ui::DomKey::ARROW_UP, ui::EF_NONE);
SendKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_COMMAND, ui::DomCode::META_LEFT,
- ui::DomKey::META);
+ ui::DomKey::META, ui::EF_NONE);
{
auto events = TakeEvents();
EXPECT_EQ(2u, events.size());
@@ -5117,7 +5019,8 @@
}
}
-TEST_F(EventRewriterAshTest, ScrollEventDispatchImpl) {
+TEST_F(EventRewriterTest, ScrollEventDispatchImpl) {
+ Shell::Get()->sticky_keys_controller()->Enable(true);
// Test scroll event is correctly modified.
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
ui::DomKey::CONTROL);
@@ -5128,7 +5031,7 @@
ui::EventTimeForNow(), 0 /* flag */, 0 /* x_offset */,
1 /* y_offset */, 0 /* x_offset_ordinal */,
1 /* y_offset_ordinal */, 2 /* finger */);
- ui::EventDispatchDetails details = Send(&scroll);
+ ui::EventDispatchDetails details = source().Send(&scroll);
ASSERT_FALSE(details.dispatcher_destroyed);
{
auto events = TakeEvents();
@@ -5142,7 +5045,7 @@
ui::ET_SCROLL_FLING_START, location, location, ui::EventTimeForNow(),
0 /* flag */, 0 /* x_offset */, 0 /* y_offset */,
0 /* x_offset_ordinal */, 0 /* y_offset_ordinal */, 2 /* finger */);
- details = Send(&fling_start);
+ details = source().Send(&fling_start);
{
auto events = TakeEvents();
ASSERT_EQ(2u, events.size());
@@ -5156,7 +5059,7 @@
// Test scroll direction change causes that modifier release event is sent.
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
ui::DomKey::CONTROL);
- details = Send(&scroll);
+ details = source().Send(&scroll);
ASSERT_FALSE(details.dispatcher_destroyed);
std::ignore = TakeEvents();
@@ -5164,7 +5067,7 @@
ui::EventTimeForNow(), 0 /* flag */, 0 /* x_offset */,
-1 /* y_offset */, 0 /* x_offset_ordinal */,
-1 /* y_offset_ordinal */, 2 /* finger */);
- details = Send(&scroll2);
+ details = source().Send(&scroll2);
ASSERT_FALSE(details.dispatcher_destroyed);
{
auto events = TakeEvents();
@@ -5177,15 +5080,17 @@
}
}
-class StickyKeysOverlayTest : public EventRewriterAshTest {
+class StickyKeysOverlayTest : public EventRewriterTest {
public:
StickyKeysOverlayTest() : overlay_(nullptr) {}
~StickyKeysOverlayTest() override {}
void SetUp() override {
- EventRewriterAshTest::SetUp();
- overlay_ = sticky_keys_controller_->GetOverlayForTest();
+ EventRewriterTest::SetUp();
+ auto* sticky_keys_controller = Shell::Get()->sticky_keys_controller();
+ sticky_keys_controller->Enable(true);
+ overlay_ = sticky_keys_controller->GetOverlayForTest();
ASSERT_TRUE(overlay_);
}
@@ -5367,7 +5272,8 @@
EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN));
// Turn all modifiers on.
- sticky_keys_controller_->SetModifiersEnabled(true, true);
+ auto* sticky_keys_controller = Shell::Get()->sticky_keys_controller();
+ sticky_keys_controller->SetModifiersEnabled(true, true);
EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_CONTROL_DOWN));
EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_SHIFT_DOWN));
EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_ALT_DOWN));
@@ -5376,22 +5282,22 @@
EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN));
// Turn off Mod3.
- sticky_keys_controller_->SetModifiersEnabled(false, true);
+ sticky_keys_controller->SetModifiersEnabled(false, true);
EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN));
EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN));
// Turn off AltGr.
- sticky_keys_controller_->SetModifiersEnabled(true, false);
+ sticky_keys_controller->SetModifiersEnabled(true, false);
EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN));
EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN));
// Turn off AltGr and Mod3.
- sticky_keys_controller_->SetModifiersEnabled(false, false);
+ sticky_keys_controller->SetModifiersEnabled(false, false);
EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN));
EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN));
}
-class ExtensionRewriterInputTest : public EventRewriterAshTest {
+class ExtensionRewriterInputTest : public EventRewriterTest {
public:
ExtensionRewriterInputTest() = default;
ExtensionRewriterInputTest(const ExtensionRewriterInputTest&) = delete;
@@ -5406,11 +5312,11 @@
void SetExtensionCommands(
base::flat_set<std::pair<ui::KeyboardCode, int>> commands) {
- delegate()->SetExtensionCommandsOverrideForTesting(std::move(commands));
+ delegate_->SetExtensionCommandsOverrideForTesting(std::move(commands));
}
void RemoveAllExtensionShortcuts() {
- delegate()->SetExtensionCommandsOverrideForTesting(absl::nullopt);
+ delegate_->SetExtensionCommandsOverrideForTesting(absl::nullopt);
}
void ExpectEventRewrittenTo(const KeyTestCase& test) {