| 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);
|
| + 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) {
|
| + 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)
|
| + engine->Enable(engine->GetActiveComponentId());
|
| +}
|
| +
|
| } // namespace extensions
|
|
|