Chromium Code Reviews| Index: chrome/browser/extensions/api/input_ime/input_ime_api.cc |
| diff --git a/chrome/browser/extensions/api/input_ime/input_ime_api.cc b/chrome/browser/extensions/api/input_ime/input_ime_api.cc |
| index 07670feb37fe5f3c134fb6b35376749aeba97325..738c73ffc171988de0a205239cd74c315140a601 100644 |
| --- a/chrome/browser/extensions/api/input_ime/input_ime_api.cc |
| +++ b/chrome/browser/extensions/api/input_ime/input_ime_api.cc |
| @@ -164,9 +164,17 @@ class ImeObserver : public InputMethodEngineInterface::Observer { |
| if (profile_ == NULL || extension_id_.empty()) |
| return; |
| - std::string request_id = |
| - extensions::InputImeEventRouter::GetInstance()->AddRequest(engine_id, |
| - key_data); |
| + extensions::InputImeEventRouter* ime_event_router = |
| + extensions::InputImeEventRouter::GetInstance(); |
| + |
| + std::string request_id = ime_event_router->AddRequest(engine_id, key_data); |
|
Hiro Komatsu
2014/02/14 05:32:15
const.
Shu Chen
2014/02/14 05:41:57
Done.
|
| + |
| + // If there is no listener for the event, no need to dispatch the event to |
| + // extension. Instead, releases the key event for default system behavior. |
| + if (!HasKeyEventListener()) { |
| + ime_event_router->OnKeyEventHandled(extension_id_, request_id, false); |
| + return; |
| + } |
| input_ime::KeyboardEvent key_data_value; |
| key_data_value.type = input_ime::KeyboardEvent::ParseType(event.type); |
| @@ -268,6 +276,13 @@ class ImeObserver : public InputMethodEngineInterface::Observer { |
| } |
| private: |
| + bool HasKeyEventListener() const { |
| + return extensions::ExtensionSystem::Get(profile_) |
| + ->event_router() |
| + ->ExtensionHasEventListener(extension_id_, |
| + input_ime::OnKeyEvent::kEventName); |
| + } |
| + |
| Profile* profile_; |
| std::string extension_id_; |
| std::string engine_id_; |