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

Side by Side Diff: chrome/browser/extensions/extension_input_api.cc

Issue 6264020: Fix key identifier conversion. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review comments Created 9 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/extensions/extension_input_api.h" 5 #include "chrome/browser/extensions/extension_input_api.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "base/values.h" 10 #include "base/values.h"
11 #include "chrome/browser/browser_window.h" 11 #include "chrome/browser/browser_window.h"
12 #include "chrome/browser/extensions/extension_tabs_module.h" 12 #include "chrome/browser/extensions/extension_tabs_module.h"
13 #include "chrome/browser/extensions/key_identifier_conversion_views.h"
13 #include "chrome/browser/renderer_host/render_view_host.h" 14 #include "chrome/browser/renderer_host/render_view_host.h"
14 #include "chrome/browser/ui/browser.h" 15 #include "chrome/browser/ui/browser.h"
15 #include "chrome/browser/ui/views/frame/browser_view.h" 16 #include "chrome/browser/ui/views/frame/browser_view.h"
16 #include "chrome/common/native_web_keyboard_event.h" 17 #include "chrome/common/native_web_keyboard_event.h"
17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
18 #include "ui/base/keycodes/keyboard_code_conversion.h"
19 #include "views/event.h" 19 #include "views/event.h"
20 #include "views/widget/root_view.h" 20 #include "views/widget/root_view.h"
21 21
22 namespace { 22 namespace {
23 23
24 // Keys. 24 // Keys.
25 const char kType[] = "type"; 25 const char kType[] = "type";
26 const char kKeyIdentifier[] = "keyIdentifier"; 26 const char kKeyIdentifier[] = "keyIdentifier";
27 const char kAlt[] = "altKey"; 27 const char kAlt[] = "altKey";
28 const char kCtrl[] = "ctrlKey"; 28 const char kCtrl[] = "ctrlKey";
29 const char kMeta[] = "metaKey"; 29 const char kMeta[] = "metaKey";
30 const char kShift[] = "shiftKey"; 30 const char kShift[] = "shiftKey";
31 const char kKeyDown[] = "keydown"; 31 const char kKeyDown[] = "keydown";
32 const char kKeyUp[] = "keyup"; 32 const char kKeyUp[] = "keyup";
33 33
34 // Errors. 34 // Errors.
35 const char kUnknownEventTypeError[] = "Unknown event type."; 35 const char kUnknownEventTypeError[] = "Unknown event type.";
36 const char kUnknownOrUnsupportedKeyIdentiferError[] = "Unknown or unsupported " 36 const char kUnknownOrUnsupportedKeyIdentiferError[] = "Unknown or unsupported "
37 "key identifier."; 37 "key identifier.";
38 const char kUnsupportedModifier[] = "Unsupported modifier.";
38 const char kNoValidRecipientError[] = "No valid recipient for event."; 39 const char kNoValidRecipientError[] = "No valid recipient for event.";
39 const char kKeyEventUnprocessedError[] = "Event was not handled."; 40 const char kKeyEventUnprocessedError[] = "Event was not handled.";
40 41
41 views::Event::EventType GetTypeFromString(const std::string& type) { 42 views::Event::EventType GetTypeFromString(const std::string& type) {
42 if (type == kKeyDown) { 43 if (type == kKeyDown) {
43 return views::Event::ET_KEY_PRESSED; 44 return views::Event::ET_KEY_PRESSED;
44 } else if (type == kKeyUp) { 45 } else if (type == kKeyUp) {
45 return views::Event::ET_KEY_RELEASED; 46 return views::Event::ET_KEY_RELEASED;
46 } 47 }
47 return views::Event::ET_UNKNOWN; 48 return views::Event::ET_UNKNOWN;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 views::Event::EventType type = GetTypeFromString(type_name); 80 views::Event::EventType type = GetTypeFromString(type_name);
80 if (type == views::Event::ET_UNKNOWN) { 81 if (type == views::Event::ET_UNKNOWN) {
81 error_ = kUnknownEventTypeError; 82 error_ = kUnknownEventTypeError;
82 return false; 83 return false;
83 } 84 }
84 85
85 std::string identifier; 86 std::string identifier;
86 EXTENSION_FUNCTION_VALIDATE(args->GetString(kKeyIdentifier, &identifier)); 87 EXTENSION_FUNCTION_VALIDATE(args->GetString(kKeyIdentifier, &identifier));
87 TrimWhitespaceASCII(identifier, TRIM_ALL, &identifier); 88 TrimWhitespaceASCII(identifier, TRIM_ALL, &identifier);
88 89
89 ui::KeyboardCode code = ui::KeyCodeFromKeyIdentifier(identifier); 90 const views::KeyEvent& prototype_event =
90 if (code == ui::VKEY_UNKNOWN) { 91 KeyEventFromKeyIdentifier(identifier);
92 if (prototype_event.GetKeyCode() == ui::VKEY_UNKNOWN) {
91 error_ = kUnknownOrUnsupportedKeyIdentiferError; 93 error_ = kUnknownOrUnsupportedKeyIdentiferError;
92 return false; 94 return false;
93 } 95 }
94 96
95 int flags = 0; 97 int flags = prototype_event.GetFlags();
96 bool alt = false; 98 bool alt = false;
97 if (args->GetBoolean(kAlt, &alt)) 99 if (args->GetBoolean(kAlt, &alt))
98 flags |= alt ? WebKit::WebInputEvent::AltKey : 0; 100 flags |= alt ? views::Event::EF_ALT_DOWN : 0;
99 bool ctrl = false; 101 bool ctrl = false;
100 if (args->GetBoolean(kCtrl, &ctrl)) 102 if (args->GetBoolean(kCtrl, &ctrl))
101 flags |= ctrl ? WebKit::WebInputEvent::ControlKey : 0; 103 flags |= ctrl ? views::Event::EF_CONTROL_DOWN : 0;
102 bool meta = false;
103 if (args->GetBoolean(kMeta, &meta))
104 flags |= meta ? WebKit::WebInputEvent::MetaKey : 0;
105 bool shift = false; 104 bool shift = false;
106 if (args->GetBoolean(kShift, &shift)) 105 if (args->GetBoolean(kShift, &shift))
107 flags |= shift ? WebKit::WebInputEvent::ShiftKey : 0; 106 flags |= shift ? views::Event::EF_SHIFT_DOWN : 0;
107 bool meta = false;
108 if (args->GetBoolean(kMeta, &meta)) {
109 // Views does not have a Meta event flag, so return an error for now.
110 if (meta) {
111 error_ = kUnsupportedModifier;
112 return false;
113 }
114 }
108 115
109 views::RootView* root_view = GetRootView(); 116 views::RootView* root_view = GetRootView();
110 if (!root_view) { 117 if (!root_view) {
111 error_ = kNoValidRecipientError; 118 error_ = kNoValidRecipientError;
112 return false; 119 return false;
113 } 120 }
114 121
115 views::KeyEvent event(type, code, flags, 0, 0); 122 views::KeyEvent event(type, prototype_event.GetKeyCode(), flags, 0, 0);
116 if (!root_view->ProcessKeyEvent(event)) { 123 if (!root_view->ProcessKeyEvent(event)) {
117 error_ = kKeyEventUnprocessedError; 124 error_ = kKeyEventUnprocessedError;
118 return false; 125 return false;
119 } 126 }
120 127
121 return true; 128 return true;
122 } 129 }
OLDNEW
« no previous file with comments | « chrome/browser/autofill/autofill_browsertest.cc ('k') | chrome/browser/extensions/key_identifier_conversion_views.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698