Chromium Code Reviews| Index: chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.cc |
| diff --git a/chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.cc b/chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.cc |
| index db2ad970f82df0cc7c23f70e2ea121c094bc6eb5..0a51b00ebe8589042b6ae751b672fd388f635b3e 100644 |
| --- a/chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.cc |
| +++ b/chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.cc |
| @@ -286,6 +286,11 @@ class ImeObserverChromeOS : public ui::ImeObserver { |
| namespace extensions { |
| +InputImeEventRouter::InputImeEventRouter(Profile* profile) |
| + : InputImeEventRouterBase(profile) {} |
| + |
| +InputImeEventRouter::~InputImeEventRouter() {} |
| + |
| bool InputImeEventRouter::RegisterImeExtension( |
| const std::string& extension_id, |
| const std::vector<extensions::InputComponentInfo>& input_components) { |
| @@ -354,6 +359,25 @@ void InputImeEventRouter::UnregisterAllImes(const std::string& extension_id) { |
| } |
| } |
| +IMEEngineHandlerInterface* InputImeEventRouter::GetEngine( |
| + const std::string& extension_id, |
| + const std::string& component_id) { |
| + std::map<std::string, IMEEngineHandlerInterface*>::iterator it = |
| + engine_map_.find(extension_id); |
| + if (it != engine_map_.end()) |
| + return it->second; |
| + return NULL; |
| +} |
| + |
| +IMEEngineHandlerInterface* InputImeEventRouter::GetActiveEngine( |
| + const std::string& extension_id) { |
| + std::map<std::string, IMEEngineHandlerInterface*>::iterator it = |
| + engine_map_.find(extension_id); |
| + if (it != engine_map_.end() && it->second->IsActive()) |
| + return it->second; |
| + return NULL; |
| +} |
| + |
| bool InputImeSetCompositionFunction::RunSync() { |
| IMEEngineHandlerInterface* engine = |
| GetInputImeEventRouter(Profile::FromBrowserContext(browser_context())) |
| @@ -692,4 +716,38 @@ bool InputImeDeleteSurroundingTextFunction::RunSync() { |
| return true; |
| } |
| +void InputImeAPI::OnExtensionLoaded(content::BrowserContext* browser_context, |
| + const Extension* extension) { |
| + const std::vector<InputComponentInfo>* input_components = |
| + extensions::InputComponents::GetInputComponents(extension); |
|
Devlin
2016/01/07 23:08:29
no need for extensions:: prefix.
Azure Wei
2016/01/08 06:40:55
Done.
|
| + if (input_components) |
| + GetInputImeEventRouter(Profile::FromBrowserContext(browser_context)) |
| + ->RegisterImeExtension(extension->id(), *input_components); |
| +} |
| + |
| +void InputImeAPI::OnExtensionUnloaded(content::BrowserContext* browser_context, |
| + const Extension* extension, |
| + UnloadedExtensionInfo::Reason reason) { |
| + const std::vector<InputComponentInfo>* input_components = |
| + extensions::InputComponents::GetInputComponents(extension); |
| + if (!input_components) |
| + return; |
| + if (input_components->size() > 0) { |
|
Devlin
2016/01/07 23:08:29
cleaner as:
if (input_components && !input_compone
Azure Wei
2016/01/08 06:40:55
Done.
|
| + GetInputImeEventRouter(Profile::FromBrowserContext(browser_context)) |
| + ->UnregisterAllImes(extension->id()); |
| + } |
| +} |
| + |
| +void InputImeAPI::OnListenerAdded(const EventListenerInfo& details) { |
| + if (!details.browser_context) |
| + return; |
| + IMEEngineHandlerInterface* engine = |
| + GetInputImeEventRouter( |
| + Profile::FromBrowserContext(details.browser_context)) |
| + ->GetActiveEngine(details.extension_id); |
| + // Notifies the IME extension for IME ready with onActivate/onFocus events. |
| + if (engine) |
|
Devlin
2016/01/07 23:08:29
When is |engine| null?
Azure Wei
2016/01/08 06:40:55
The engine could be null if the current extension
|
| + engine->Enable(engine->GetActiveComponentId()); |
| +} |
| + |
| } // namespace extensions |