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

Side by Side Diff: content/browser/devtools/protocol/input_handler.cc

Issue 1148803002: Synthesize proper keyIdentifier for devtools protocol key events. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Attempt to fix test flakiness. Created 5 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 unified diff | Download patch
« no previous file with comments | « content/browser/devtools/protocol/devtools_protocol_browsertest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/devtools/protocol/input_handler.h" 5 #include "content/browser/devtools/protocol/input_handler.h"
6 6
7 #include "base/strings/stringprintf.h" 7 #include "base/strings/stringprintf.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "cc/output/compositor_frame_metadata.h" 9 #include "cc/output/compositor_frame_metadata.h"
10 #include "content/browser/renderer_host/render_widget_host_impl.h" 10 #include "content/browser/renderer_host/render_widget_host_impl.h"
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 base::StringPrintf("Unexpected event type '%s'", type.c_str())); 170 base::StringPrintf("Unexpected event type '%s'", type.c_str()));
171 } 171 }
172 172
173 SetEventModifiers(&event, modifiers); 173 SetEventModifiers(&event, modifiers);
174 SetEventTimestamp(&event, timestamp); 174 SetEventTimestamp(&event, timestamp);
175 if (!SetKeyboardEventText(event.text, text)) 175 if (!SetKeyboardEventText(event.text, text))
176 return Response::InvalidParams("Invalid 'text' parameter"); 176 return Response::InvalidParams("Invalid 'text' parameter");
177 if (!SetKeyboardEventText(event.unmodifiedText, unmodified_text)) 177 if (!SetKeyboardEventText(event.unmodifiedText, unmodified_text))
178 return Response::InvalidParams("Invalid 'unmodifiedText' parameter"); 178 return Response::InvalidParams("Invalid 'unmodifiedText' parameter");
179 179
180 if (windows_virtual_key_code)
181 event.windowsKeyCode = *windows_virtual_key_code;
182 if (native_virtual_key_code)
183 event.nativeKeyCode = *native_virtual_key_code;
184 if (auto_repeat && *auto_repeat)
185 event.modifiers |= blink::WebInputEvent::IsAutoRepeat;
186 if (is_keypad && *is_keypad)
187 event.modifiers |= blink::WebInputEvent::IsKeyPad;
188 if (is_system_key)
189 event.isSystemKey = *is_system_key;
190
180 if (key_identifier) { 191 if (key_identifier) {
181 if (key_identifier->size() > 192 if (key_identifier->size() >
182 blink::WebKeyboardEvent::keyIdentifierLengthCap) { 193 blink::WebKeyboardEvent::keyIdentifierLengthCap) {
183 return Response::InvalidParams("Invalid 'keyIdentifier' parameter"); 194 return Response::InvalidParams("Invalid 'keyIdentifier' parameter");
184 } 195 }
185 for (size_t i = 0; i < key_identifier->size(); ++i) 196 for (size_t i = 0; i < key_identifier->size(); ++i)
186 event.keyIdentifier[i] = (*key_identifier)[i]; 197 event.keyIdentifier[i] = (*key_identifier)[i];
198 } else if (event.type != blink::WebInputEvent::Char) {
199 event.setKeyIdentifierFromWindowsKeyCode();
187 } 200 }
188 201
189 if (code) { 202 if (code) {
190 event.domCode = static_cast<int>( 203 event.domCode = static_cast<int>(
191 ui::KeycodeConverter::CodeStringToDomCode(code->c_str())); 204 ui::KeycodeConverter::CodeStringToDomCode(code->c_str()));
192 } 205 }
193 206
194 if (windows_virtual_key_code)
195 event.windowsKeyCode = *windows_virtual_key_code;
196 if (native_virtual_key_code)
197 event.nativeKeyCode = *native_virtual_key_code;
198 if (auto_repeat && *auto_repeat)
199 event.modifiers |= blink::WebInputEvent::IsAutoRepeat;
200 if (is_keypad && *is_keypad)
201 event.modifiers |= blink::WebInputEvent::IsKeyPad;
202 if (is_system_key)
203 event.isSystemKey = *is_system_key;
204
205 if (!host_) 207 if (!host_)
206 return Response::ServerError("Could not connect to view"); 208 return Response::ServerError("Could not connect to view");
207 209
208 host_->Focus(); 210 host_->Focus();
209 host_->ForwardKeyboardEvent(event); 211 host_->ForwardKeyboardEvent(event);
210 return Response::OK(); 212 return Response::OK();
211 } 213 }
212 214
213 Response InputHandler::DispatchMouseEvent( 215 Response InputHandler::DispatchMouseEvent(
214 const std::string& type, 216 const std::string& type,
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 } else { 457 } else {
456 client_->SendError(command_id, 458 client_->SendError(command_id,
457 Response::InternalError(base::StringPrintf( 459 Response::InternalError(base::StringPrintf(
458 "Synthetic tap failed, result was %d", result))); 460 "Synthetic tap failed, result was %d", result)));
459 } 461 }
460 } 462 }
461 463
462 } // namespace input 464 } // namespace input
463 } // namespace devtools 465 } // namespace devtools
464 } // namespace content 466 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/devtools/protocol/devtools_protocol_browsertest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698