| 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..895d35e351ed4c7e2d7d26cd9599de72aa98e90f 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,18 @@ 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();
|
| +
|
| + const std::string request_id =
|
| + ime_event_router->AddRequest(engine_id, key_data);
|
| +
|
| + // 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 +277,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_;
|
|
|