Commit 0ef9d928 authored by Shawn Gallea's avatar Shawn Gallea Committed by Chromium LUCI CQ

Change KeyInput to only have key_string field

This removes the burden of parsing from the client.

Bug: b/169054926
Test: On device
Change-Id: If02b37169aca921429658305284e94738350a822
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2574999Reviewed-by: default avatarKevin Schoedel <kpschoedel@chromium.org>
Reviewed-by: default avatarDaniel Nicoara <dnicoara@chromium.org>
Commit-Queue: Shawn Gallea <sagallea@google.com>
Cr-Commit-Position: refs/heads/master@{#834349}
parent a4a731e2
...@@ -17,8 +17,6 @@ ...@@ -17,8 +17,6 @@
#include "chromecast/browser/webview/proto/webview.pb.h" #include "chromecast/browser/webview/proto/webview.pb.h"
#include "third_party/grpc/src/include/grpcpp/grpcpp.h" #include "third_party/grpc/src/include/grpcpp/grpcpp.h"
#include "third_party/skia/include/gpu/GrDirectContext.h" #include "third_party/skia/include/gpu/GrDirectContext.h"
#include "ui/events/keycodes/dom/keycode_converter.h"
#include "ui/events/keycodes/keyboard_code_conversion.h"
#include "ui/gl/gl_bindings.h" #include "ui/gl/gl_bindings.h"
namespace chromecast { namespace chromecast {
...@@ -444,46 +442,24 @@ void WebviewClient::SendKeyRequest(const std::vector<std::string>& tokens) { ...@@ -444,46 +442,24 @@ void WebviewClient::SendKeyRequest(const std::vector<std::string>& tokens) {
int id; int id;
if (tokens.size() != 3 || !base::StringToInt(tokens[0], &id) || if (tokens.size() != 3 || !base::StringToInt(tokens[0], &id) ||
tokens[2].empty()) { tokens[2].empty()) {
LOG(ERROR) << "Usage: ID key [dom_code]"; LOG(ERROR) << "Usage: ID key [key_string]";
return; return;
} }
const auto& webview = webviews_[id]; const auto& webview = webviews_[id];
ui::DomCode dom_code = ui::KeycodeConverter::CodeStringToDomCode(tokens[2]);
if (dom_code == ui::DomCode::NONE) {
LOG(ERROR) << "Unknown DomCode CodeString: " << tokens[2];
return;
}
ui::DomKey dom_key;
ui::KeyboardCode keyboard_code;
if (!ui::DomCodeToUsLayoutDomKey(dom_code, 0 /* flags */, &dom_key,
&keyboard_code)) {
LOG(ERROR) << "Could not convert DomCode to US Layout key: " << tokens[2];
return;
}
SendKeyEvent(webview.get(), base::Time::Now().ToDeltaSinceWindowsEpoch(), SendKeyEvent(webview.get(), base::Time::Now().ToDeltaSinceWindowsEpoch(),
dom_key, dom_code, keyboard_code, true); tokens[2], true);
SendKeyEvent(webview.get(), base::Time::Now().ToDeltaSinceWindowsEpoch(), SendKeyEvent(webview.get(), base::Time::Now().ToDeltaSinceWindowsEpoch(),
dom_key, dom_code, keyboard_code, false); tokens[2], false);
} }
void WebviewClient::SendKeyEvent(const Webview* webview, void WebviewClient::SendKeyEvent(const Webview* webview,
const base::TimeDelta& time, const base::TimeDelta& time,
ui::DomKey dom_key, const std::string& key_string,
ui::DomCode dom_code,
ui::KeyboardCode keyboard_code,
bool down) { bool down) {
auto key_input = std::make_unique<KeyInput>(); auto key_input = std::make_unique<KeyInput>();
key_input->set_key_code(keyboard_code); key_input->set_key_string(key_string);
key_input->set_dom_code(static_cast<int32_t>(dom_code));
key_input->set_dom_key(static_cast<int32_t>(dom_key));
// Hardcoded to true for our purposes, as IsCharacter doesn't seem to work
// here. Just means we can't test with modifier keys.
key_input->set_is_char(true);
auto key_event = std::make_unique<InputEvent>(); auto key_event = std::make_unique<InputEvent>();
key_event->set_event_type(down ? ui::EventType::ET_KEY_PRESSED key_event->set_event_type(down ? ui::EventType::ET_KEY_PRESSED
......
...@@ -16,9 +16,6 @@ ...@@ -16,9 +16,6 @@
#include "components/exo/wayland/clients/client_base.h" #include "components/exo/wayland/clients/client_base.h"
#include "third_party/grpc/src/include/grpcpp/grpcpp.h" #include "third_party/grpc/src/include/grpcpp/grpcpp.h"
#include "ui/events/event_constants.h" #include "ui/events/event_constants.h"
#include "ui/events/keycodes/dom/dom_code.h"
#include "ui/events/keycodes/dom/dom_key.h"
#include "ui/events/keycodes/keyboard_codes.h"
#include "ui/events/types/event_type.h" #include "ui/events/types/event_type.h"
#include "ui/gfx/geometry/point.h" #include "ui/gfx/geometry/point.h"
...@@ -98,9 +95,7 @@ class WebviewClient : public exo::wayland::clients::ClientBase { ...@@ -98,9 +95,7 @@ class WebviewClient : public exo::wayland::clients::ClientBase {
int32_t id); int32_t id);
void SendKeyEvent(const Webview* webview, void SendKeyEvent(const Webview* webview,
const base::TimeDelta& time, const base::TimeDelta& time,
ui::DomKey dom_key, const std::string& key_string,
ui::DomCode dom_code,
ui::KeyboardCode keyboard_code,
bool down); bool down);
void SetPosition(const std::vector<std::string>& tokens); void SetPosition(const std::vector<std::string>& tokens);
......
...@@ -35,12 +35,11 @@ message WebviewCreateResponse { ...@@ -35,12 +35,11 @@ message WebviewCreateResponse {
AccessibilityTreeInfo accessibility_info = 1; AccessibilityTreeInfo accessibility_info = 1;
} }
// These are a translation of ui::Event and children.
message KeyInput { message KeyInput {
int32 key_code = 1; // A string value representing the key character or descriptive key name.
int32 dom_code = 2; // Values of non-character keys follow the web standard key names:
int32 dom_key = 3; // https://www.w3.org/TR/uievents-key/#key-attr-values
bool is_char = 4; string key_string = 1;
} }
message TouchInput { message TouchInput {
......
...@@ -30,6 +30,9 @@ ...@@ -30,6 +30,9 @@
#include "ui/base/ime/constants.h" #include "ui/base/ime/constants.h"
#include "ui/events/event.h" #include "ui/events/event.h"
#include "ui/events/event_constants.h" #include "ui/events/event_constants.h"
#include "ui/events/keycodes/dom/dom_code.h"
#include "ui/events/keycodes/dom/keycode_converter.h"
#include "ui/events/keycodes/keyboard_code_conversion.h"
namespace chromecast { namespace chromecast {
...@@ -323,14 +326,19 @@ void WebContentController::ProcessInputEvent(const webview::InputEvent& ev) { ...@@ -323,14 +326,19 @@ void WebContentController::ProcessInputEvent(const webview::InputEvent& ev) {
case ui::ET_KEY_PRESSED: case ui::ET_KEY_PRESSED:
case ui::ET_KEY_RELEASED: case ui::ET_KEY_RELEASED:
if (ev.has_key()) { if (ev.has_key()) {
ui::KeyEvent evt( ui::DomKey dom_key =
type, static_cast<ui::KeyboardCode>(ev.key().key_code()), ui::KeycodeConverter::KeyStringToDomKey(ev.key().key_string());
static_cast<ui::DomCode>(ev.key().dom_code()), bool is_char = dom_key.IsCharacter();
ev.flags() | ui::EF_IS_SYNTHESIZED, ui::DomKey(ev.key().dom_key()), int32_t key_code = is_char ? dom_key.ToCharacter()
base::TimeTicks() + : NonPrintableDomKeyToKeyboardCode(dom_key);
base::TimeDelta::FromMicroseconds(ev.timestamp()), ui::KeyboardCode keyboard_code =
ev.key().is_char()); static_cast<ui::KeyboardCode>(key_code);
ui::KeyEvent evt(type, keyboard_code,
UsLayoutKeyboardCodeToDomCode(keyboard_code),
ev.flags() | ui::EF_IS_SYNTHESIZED, dom_key,
base::TimeTicks() +
base::TimeDelta::FromMicroseconds(ev.timestamp()),
is_char);
// Marks the simulated key event is from a Virtual Keyboard. // Marks the simulated key event is from a Virtual Keyboard.
ui::Event::Properties properties; ui::Event::Properties properties;
properties[ui::kPropertyFromVK] = properties[ui::kPropertyFromVK] =
......
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