| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_number_conversions.h" | 9 #include "base/string_number_conversions.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| 11 #include "base/values.h" | 11 #include "base/values.h" |
| 12 #include "chrome/browser/extensions/key_identifier_conversion_views.h" | 12 #include "chrome/browser/extensions/key_identifier_conversion_views.h" |
| 13 #include "chrome/browser/ui/browser.h" | 13 #include "chrome/browser/ui/top_level_widget.h" |
| 14 #include "chrome/browser/ui/browser_window.h" | |
| 15 #include "chrome/browser/ui/views/frame/browser_view.h" | |
| 16 #include "chrome/common/chrome_notification_types.h" | 14 #include "chrome/common/chrome_notification_types.h" |
| 17 #include "ui/base/event.h" | 15 #include "ui/base/event.h" |
| 18 #include "ui/views/ime/input_method.h" | 16 #include "ui/views/ime/input_method.h" |
| 19 #include "ui/views/views_delegate.h" | |
| 20 #include "ui/views/widget/widget.h" | 17 #include "ui/views/widget/widget.h" |
| 21 | 18 |
| 22 namespace { | 19 namespace { |
| 23 | 20 |
| 24 // Keys. | 21 // Keys. |
| 25 const char kType[] = "type"; | 22 const char kType[] = "type"; |
| 26 const char kKeyIdentifier[] = "keyIdentifier"; | 23 const char kKeyIdentifier[] = "keyIdentifier"; |
| 27 const char kAlt[] = "altKey"; | 24 const char kAlt[] = "altKey"; |
| 28 const char kCtrl[] = "ctrlKey"; | 25 const char kCtrl[] = "ctrlKey"; |
| 29 const char kMeta[] = "metaKey"; | 26 const char kMeta[] = "metaKey"; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 56 (key_identifier.substr(0, 2) == "U+") && | 53 (key_identifier.substr(0, 2) == "U+") && |
| 57 (key_identifier.substr(2).find_first_not_of("0123456789abcdefABCDEF") == | 54 (key_identifier.substr(2).find_first_not_of("0123456789abcdefABCDEF") == |
| 58 std::string::npos)) { | 55 std::string::npos)) { |
| 59 const bool result = | 56 const bool result = |
| 60 base::HexStringToInt(key_identifier.substr(2), &character); | 57 base::HexStringToInt(key_identifier.substr(2), &character); |
| 61 DCHECK(result) << key_identifier; | 58 DCHECK(result) << key_identifier; |
| 62 } | 59 } |
| 63 return character; | 60 return character; |
| 64 } | 61 } |
| 65 | 62 |
| 66 views::Widget* GetTopLevelWidget(Browser* browser) { | |
| 67 if (!browser) | |
| 68 return NULL; | |
| 69 | |
| 70 BrowserWindow* window = browser->window(); | |
| 71 if (!window) | |
| 72 return NULL; | |
| 73 | |
| 74 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser); | |
| 75 return browser_view ? browser_view->GetWidget() : NULL; | |
| 76 } | |
| 77 | |
| 78 } // namespace | 63 } // namespace |
| 79 | 64 |
| 80 bool SendKeyboardEventInputFunction::RunImpl() { | 65 bool SendKeyboardEventInputFunction::RunImpl() { |
| 81 DictionaryValue* args; | 66 DictionaryValue* args; |
| 82 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); | 67 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); |
| 83 | 68 |
| 84 std::string type_name; | 69 std::string type_name; |
| 85 EXTENSION_FUNCTION_VALIDATE(args->GetString(kType, &type_name)); | 70 EXTENSION_FUNCTION_VALIDATE(args->GetString(kType, &type_name)); |
| 86 ui::EventType type = GetTypeFromString(type_name); | 71 ui::EventType type = GetTypeFromString(type_name); |
| 87 if (type == ui::ET_UNKNOWN) { | 72 if (type == ui::ET_UNKNOWN) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 110 flags = prototype_event.flags(); | 95 flags = prototype_event.flags(); |
| 111 flags |= (args->GetBoolean(kAlt, &flag) && flag) ? ui::EF_ALT_DOWN : 0; | 96 flags |= (args->GetBoolean(kAlt, &flag) && flag) ? ui::EF_ALT_DOWN : 0; |
| 112 flags |= (args->GetBoolean(kCtrl, &flag) && flag) ? ui::EF_CONTROL_DOWN : 0; | 97 flags |= (args->GetBoolean(kCtrl, &flag) && flag) ? ui::EF_CONTROL_DOWN : 0; |
| 113 flags |= (args->GetBoolean(kShift, &flag) && flag) ? ui::EF_SHIFT_DOWN : 0; | 98 flags |= (args->GetBoolean(kShift, &flag) && flag) ? ui::EF_SHIFT_DOWN : 0; |
| 114 if (args->GetBoolean(kMeta, &flag) && flag) { | 99 if (args->GetBoolean(kMeta, &flag) && flag) { |
| 115 // Views does not have a Meta event flag, so return an error for now. | 100 // Views does not have a Meta event flag, so return an error for now. |
| 116 error_ = kUnsupportedModifier; | 101 error_ = kUnsupportedModifier; |
| 117 return false; | 102 return false; |
| 118 } | 103 } |
| 119 | 104 |
| 120 views::Widget* widget = GetTopLevelWidget(GetCurrentBrowser()); | 105 views::Widget* widget = |
| 106 chrome::GetTopLevelWidgetForBrowser(GetCurrentBrowser()); |
| 121 if (!widget) { | 107 if (!widget) { |
| 122 error_ = kNoValidRecipientError; | 108 error_ = kNoValidRecipientError; |
| 123 return false; | 109 return false; |
| 124 } | 110 } |
| 125 | 111 |
| 126 ui::KeyEvent event(type, prototype_event.key_code(), flags); | 112 ui::KeyEvent event(type, prototype_event.key_code(), flags); |
| 127 if (character) { | 113 if (character) { |
| 128 event.set_character(character); | 114 event.set_character(character); |
| 129 event.set_unmodified_character(character); | 115 event.set_unmodified_character(character); |
| 130 } | 116 } |
| 131 | 117 |
| 132 views::InputMethod* ime = widget->GetInputMethod(); | 118 views::InputMethod* ime = widget->GetInputMethod(); |
| 133 if (ime) { | 119 if (ime) { |
| 134 ime->DispatchKeyEvent(event); | 120 ime->DispatchKeyEvent(event); |
| 135 } else if (!widget->OnKeyEvent(event)) { | 121 } else if (!widget->OnKeyEvent(event)) { |
| 136 error_ = kKeyEventUnprocessedError; | 122 error_ = kKeyEventUnprocessedError; |
| 137 return false; | 123 return false; |
| 138 } | 124 } |
| 139 | 125 |
| 140 return true; | 126 return true; |
| 141 } | 127 } |
| OLD | NEW |