Commit ca4420c7 authored by Yuichiro Hanada's avatar Yuichiro Hanada Committed by Commit Bot

Migrate KeyboardDrivenEventRewriter to new EventRewriter API.

Bug: None
Test: ash_unittests
Change-Id: I62e018e0898f032bc947862750e542c0da9f91cb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2025167
Commit-Queue: Yuichiro Hanada <yhanada@chromium.org>
Reviewed-by: default avatarSadrul Chowdhury <sadrul@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarKevin Schoedel <kpschoedel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#737192}
parent 021be458
...@@ -17,37 +17,30 @@ KeyboardDrivenEventRewriter::KeyboardDrivenEventRewriter() = default; ...@@ -17,37 +17,30 @@ KeyboardDrivenEventRewriter::KeyboardDrivenEventRewriter() = default;
KeyboardDrivenEventRewriter::~KeyboardDrivenEventRewriter() = default; KeyboardDrivenEventRewriter::~KeyboardDrivenEventRewriter() = default;
ui::EventRewriteStatus KeyboardDrivenEventRewriter::RewriteForTesting( ui::EventDispatchDetails KeyboardDrivenEventRewriter::RewriteForTesting(
const ui::Event& event, const ui::Event& event,
std::unique_ptr<ui::Event>* rewritten_event) { const Continuation continuation) {
return Rewrite(event, rewritten_event); return Rewrite(event, continuation);
} }
ui::EventRewriteStatus KeyboardDrivenEventRewriter::RewriteEvent( ui::EventDispatchDetails KeyboardDrivenEventRewriter::RewriteEvent(
const ui::Event& event, const ui::Event& event,
std::unique_ptr<ui::Event>* rewritten_event) { const Continuation continuation) {
if (!enabled_ || if (!enabled_ ||
Shell::Get()->session_controller()->IsActiveUserSessionStarted()) { Shell::Get()->session_controller()->IsActiveUserSessionStarted()) {
return ui::EVENT_REWRITE_CONTINUE; return SendEvent(continuation, &event);
} }
return Rewrite(event, rewritten_event); return Rewrite(event, continuation);
} }
ui::EventRewriteStatus KeyboardDrivenEventRewriter::NextDispatchEvent( ui::EventDispatchDetails KeyboardDrivenEventRewriter::Rewrite(
const ui::Event& last_event,
std::unique_ptr<ui::Event>* new_event) {
NOTREACHED();
return ui::EVENT_REWRITE_CONTINUE;
}
ui::EventRewriteStatus KeyboardDrivenEventRewriter::Rewrite(
const ui::Event& event, const ui::Event& event,
std::unique_ptr<ui::Event>* rewritten_event) { const Continuation continuation) {
int flags = event.flags(); int flags = event.flags();
const int kModifierMask = ui::EF_SHIFT_DOWN; const int kModifierMask = ui::EF_SHIFT_DOWN;
if ((flags & kModifierMask) != kModifierMask) if ((flags & kModifierMask) != kModifierMask)
return ui::EVENT_REWRITE_CONTINUE; return SendEvent(continuation, &event);
DCHECK(event.type() == ui::ET_KEY_PRESSED || DCHECK(event.type() == ui::ET_KEY_PRESSED ||
event.type() == ui::ET_KEY_RELEASED) event.type() == ui::ET_KEY_RELEASED)
...@@ -57,7 +50,7 @@ ui::EventRewriteStatus KeyboardDrivenEventRewriter::Rewrite( ...@@ -57,7 +50,7 @@ ui::EventRewriteStatus KeyboardDrivenEventRewriter::Rewrite(
if (!keyboard_util::IsArrowKeyCode(key_code) && key_code != ui::VKEY_RETURN && if (!keyboard_util::IsArrowKeyCode(key_code) && key_code != ui::VKEY_RETURN &&
key_code != ui::VKEY_F6) { key_code != ui::VKEY_F6) {
return ui::EVENT_REWRITE_CONTINUE; return SendEvent(continuation, &event);
} }
ui::EventRewriterChromeOS::MutableKeyState state = { ui::EventRewriterChromeOS::MutableKeyState state = {
...@@ -76,9 +69,10 @@ ui::EventRewriteStatus KeyboardDrivenEventRewriter::Rewrite( ...@@ -76,9 +69,10 @@ ui::EventRewriteStatus KeyboardDrivenEventRewriter::Rewrite(
} }
} }
std::unique_ptr<ui::Event> rewritten_event;
ui::EventRewriterChromeOS::BuildRewrittenKeyEvent(key_event, state, ui::EventRewriterChromeOS::BuildRewrittenKeyEvent(key_event, state,
rewritten_event); &rewritten_event);
return ui::EVENT_REWRITE_REWRITTEN; return SendEventFinally(continuation, rewritten_event.get());
} }
} // namespace ash } // namespace ash
...@@ -20,17 +20,13 @@ class ASH_EXPORT KeyboardDrivenEventRewriter : public ui::EventRewriter { ...@@ -20,17 +20,13 @@ class ASH_EXPORT KeyboardDrivenEventRewriter : public ui::EventRewriter {
~KeyboardDrivenEventRewriter() override; ~KeyboardDrivenEventRewriter() override;
// Calls Rewrite for testing. // Calls Rewrite for testing.
ui::EventRewriteStatus RewriteForTesting( ui::EventDispatchDetails RewriteForTesting(const ui::Event& event,
const ui::Event& event, const Continuation continuation);
std::unique_ptr<ui::Event>* new_event);
// EventRewriter overrides: // EventRewriter overrides:
ui::EventRewriteStatus RewriteEvent( ui::EventDispatchDetails RewriteEvent(
const ui::Event& event, const ui::Event& event,
std::unique_ptr<ui::Event>* new_event) override; const Continuation continuation) override;
ui::EventRewriteStatus NextDispatchEvent(
const ui::Event& last_event,
std::unique_ptr<ui::Event>* new_event) override;
void set_enabled(bool enabled) { enabled_ = enabled; } void set_enabled(bool enabled) { enabled_ = enabled; }
void set_arrow_to_tab_rewriting_enabled(bool enabled) { void set_arrow_to_tab_rewriting_enabled(bool enabled) {
...@@ -38,8 +34,8 @@ class ASH_EXPORT KeyboardDrivenEventRewriter : public ui::EventRewriter { ...@@ -38,8 +34,8 @@ class ASH_EXPORT KeyboardDrivenEventRewriter : public ui::EventRewriter {
} }
private: private:
ui::EventRewriteStatus Rewrite(const ui::Event& event, ui::EventDispatchDetails Rewrite(const ui::Event& event,
std::unique_ptr<ui::Event>* new_event); const Continuation continuation);
// If true, this rewriter is enabled. It is only active before user login. // If true, this rewriter is enabled. It is only active before user login.
bool enabled_ = false; bool enabled_ = false;
......
...@@ -12,32 +12,61 @@ ...@@ -12,32 +12,61 @@
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "ui/events/event.h" #include "ui/events/event.h"
#include "ui/events/test/test_event_rewriter_continuation.h"
namespace ash { namespace ash {
class TestEventRewriterContinuation
: public ui::test::TestEventRewriterContinuation {
public:
TestEventRewriterContinuation() = default;
~TestEventRewriterContinuation() override = default;
ui::EventDispatchDetails SendEvent(const ui::Event* event) override {
passthrough_event = ui::Event::Clone(*event);
return ui::EventDispatchDetails();
}
ui::EventDispatchDetails SendEventFinally(const ui::Event* event) override {
rewritten_event = ui::Event::Clone(*event);
return ui::EventDispatchDetails();
}
ui::EventDispatchDetails DiscardEvent() override {
return ui::EventDispatchDetails();
}
std::unique_ptr<ui::Event> passthrough_event;
std::unique_ptr<ui::Event> rewritten_event;
base::WeakPtrFactory<TestEventRewriterContinuation> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(TestEventRewriterContinuation);
};
class KeyboardDrivenEventRewriterTest : public testing::Test { class KeyboardDrivenEventRewriterTest : public testing::Test {
public: public:
KeyboardDrivenEventRewriterTest() {} KeyboardDrivenEventRewriterTest() = default;
~KeyboardDrivenEventRewriterTest() override {} ~KeyboardDrivenEventRewriterTest() override = default;
protected: protected:
std::string GetRewrittenEventAsString(ui::KeyboardCode ui_keycode, std::string GetRewrittenEventAsString(ui::KeyboardCode ui_keycode,
int ui_flags, int ui_flags,
ui::EventType ui_type) { ui::EventType ui_type) {
TestEventRewriterContinuation continuation;
ui::KeyEvent keyevent(ui_type, ui_keycode, ui_flags); ui::KeyEvent keyevent(ui_type, ui_keycode, ui_flags);
std::unique_ptr<ui::Event> rewritten_event; rewriter_.RewriteForTesting(keyevent,
ui::EventRewriteStatus status = continuation.weak_ptr_factory_.GetWeakPtr());
rewriter_.RewriteForTesting(keyevent, &rewritten_event);
return base::StringPrintf( std::string result = "No event is sent by RewriteEvent.";
"ui_flags=%d status=%d", if (continuation.passthrough_event) {
rewritten_event ? rewritten_event->flags() : keyevent.flags(), result = base::StringPrintf("PassThrough ui_flags=%d",
status); continuation.passthrough_event->flags());
} else if (continuation.rewritten_event) {
result = base::StringPrintf("Rewritten ui_flags=%d",
continuation.rewritten_event->flags());
} }
return result;
std::string GetExpectedResultAsString(int ui_flags,
ui::EventRewriteStatus status) {
return base::StringPrintf("ui_flags=%d status=%u", ui_flags, status);
} }
KeyboardDrivenEventRewriter rewriter_; KeyboardDrivenEventRewriter rewriter_;
...@@ -80,11 +109,9 @@ TEST_F(KeyboardDrivenEventRewriterTest, PassThrough) { ...@@ -80,11 +109,9 @@ TEST_F(KeyboardDrivenEventRewriterTest, PassThrough) {
}; };
for (size_t i = 0; i < base::size(kTests); ++i) { for (size_t i = 0; i < base::size(kTests); ++i) {
EXPECT_EQ(GetExpectedResultAsString(kTests[i].ui_flags, EXPECT_EQ(base::StringPrintf("PassThrough ui_flags=%d", kTests[i].ui_flags),
ui::EVENT_REWRITE_CONTINUE),
GetRewrittenEventAsString(kTests[i].ui_keycode, GetRewrittenEventAsString(kTests[i].ui_keycode,
kTests[i].ui_flags, kTests[i].ui_flags, ui::ET_KEY_PRESSED))
ui::ET_KEY_PRESSED))
<< "Test case " << i; << "Test case " << i;
} }
} }
...@@ -105,11 +132,9 @@ TEST_F(KeyboardDrivenEventRewriterTest, Rewrite) { ...@@ -105,11 +132,9 @@ TEST_F(KeyboardDrivenEventRewriterTest, Rewrite) {
}; };
for (size_t i = 0; i < base::size(kTests); ++i) { for (size_t i = 0; i < base::size(kTests); ++i) {
EXPECT_EQ(GetExpectedResultAsString(ui::EF_NONE, EXPECT_EQ("Rewritten ui_flags=0",
ui::EVENT_REWRITE_REWRITTEN),
GetRewrittenEventAsString(kTests[i].ui_keycode, GetRewrittenEventAsString(kTests[i].ui_keycode,
kTests[i].ui_flags, kTests[i].ui_flags, ui::ET_KEY_PRESSED))
ui::ET_KEY_PRESSED))
<< "Test case " << i; << "Test case " << i;
} }
} }
......
...@@ -457,6 +457,7 @@ jumbo_static_library("test_support") { ...@@ -457,6 +457,7 @@ jumbo_static_library("test_support") {
"test/test_event_processor.h", "test/test_event_processor.h",
"test/test_event_rewriter.cc", "test/test_event_rewriter.cc",
"test/test_event_rewriter.h", "test/test_event_rewriter.h",
"test/test_event_rewriter_continuation.h",
"test/test_event_source.cc", "test/test_event_source.cc",
"test/test_event_source.h", "test/test_event_source.h",
"test/test_event_target.cc", "test/test_event_target.cc",
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_EVENTS_TEST_TEST_EVENT_REWRITER_CONTINUATION_H_
#define UI_EVENTS_TEST_TEST_EVENT_REWRITER_CONTINUATION_H_
#include "ui/events/event_rewriter_continuation.h"
namespace ui {
namespace test {
// This interface exposes EventRewriterContinuation interface to
// test code outside of ui/events.
class TestEventRewriterContinuation : public ui::EventRewriterContinuation {
public:
TestEventRewriterContinuation() = default;
~TestEventRewriterContinuation() override = default;
private:
DISALLOW_COPY_AND_ASSIGN(TestEventRewriterContinuation);
};
} // namespace test
} // namespace ui
#endif // UI_EVENTS_TEST_TEST_EVENT_REWRITER_CONTINUATION_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment