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 @@
#include "chromecast/browser/webview/proto/webview.pb.h"
#include "third_party/grpc/src/include/grpcpp/grpcpp.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"
namespace chromecast {
......@@ -444,46 +442,24 @@ void WebviewClient::SendKeyRequest(const std::vector<std::string>& tokens) {
int id;
if (tokens.size() != 3 || !base::StringToInt(tokens[0], &id) ||
tokens[2].empty()) {
LOG(ERROR) << "Usage: ID key [dom_code]";
LOG(ERROR) << "Usage: ID key [key_string]";
return;
}
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(),
dom_key, dom_code, keyboard_code, true);
tokens[2], true);
SendKeyEvent(webview.get(), base::Time::Now().ToDeltaSinceWindowsEpoch(),
dom_key, dom_code, keyboard_code, false);
tokens[2], false);
}
void WebviewClient::SendKeyEvent(const Webview* webview,
const base::TimeDelta& time,
ui::DomKey dom_key,
ui::DomCode dom_code,
ui::KeyboardCode keyboard_code,
const std::string& key_string,
bool down) {
auto key_input = std::make_unique<KeyInput>();
key_input->set_key_code(keyboard_code);
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);
key_input->set_key_string(key_string);
auto key_event = std::make_unique<InputEvent>();
key_event->set_event_type(down ? ui::EventType::ET_KEY_PRESSED
......
......@@ -16,9 +16,6 @@
#include "components/exo/wayland/clients/client_base.h"
#include "third_party/grpc/src/include/grpcpp/grpcpp.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/gfx/geometry/point.h"
......@@ -98,9 +95,7 @@ class WebviewClient : public exo::wayland::clients::ClientBase {
int32_t id);
void SendKeyEvent(const Webview* webview,
const base::TimeDelta& time,
ui::DomKey dom_key,
ui::DomCode dom_code,
ui::KeyboardCode keyboard_code,
const std::string& key_string,
bool down);
void SetPosition(const std::vector<std::string>& tokens);
......
......@@ -35,12 +35,11 @@ message WebviewCreateResponse {
AccessibilityTreeInfo accessibility_info = 1;
}
// These are a translation of ui::Event and children.
message KeyInput {
int32 key_code = 1;
int32 dom_code = 2;
int32 dom_key = 3;
bool is_char = 4;
// A string value representing the key character or descriptive key name.
// Values of non-character keys follow the web standard key names:
// https://www.w3.org/TR/uievents-key/#key-attr-values
string key_string = 1;
}
message TouchInput {
......
......@@ -30,6 +30,9 @@
#include "ui/base/ime/constants.h"
#include "ui/events/event.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 {
......@@ -323,14 +326,19 @@ void WebContentController::ProcessInputEvent(const webview::InputEvent& ev) {
case ui::ET_KEY_PRESSED:
case ui::ET_KEY_RELEASED:
if (ev.has_key()) {
ui::KeyEvent evt(
type, static_cast<ui::KeyboardCode>(ev.key().key_code()),
static_cast<ui::DomCode>(ev.key().dom_code()),
ev.flags() | ui::EF_IS_SYNTHESIZED, ui::DomKey(ev.key().dom_key()),
base::TimeTicks() +
base::TimeDelta::FromMicroseconds(ev.timestamp()),
ev.key().is_char());
ui::DomKey dom_key =
ui::KeycodeConverter::KeyStringToDomKey(ev.key().key_string());
bool is_char = dom_key.IsCharacter();
int32_t key_code = is_char ? dom_key.ToCharacter()
: NonPrintableDomKeyToKeyboardCode(dom_key);
ui::KeyboardCode keyboard_code =
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.
ui::Event::Properties properties;
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