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/api/input_ime/input_ime_api.h" | 5 #include "chrome/browser/extensions/api/input_ime/input_ime_api.h" |
6 | 6 |
7 #include "base/strings/string_number_conversions.h" | 7 #include "base/strings/string_number_conversions.h" |
8 #include "base/values.h" | 8 #include "base/values.h" |
9 #include "chrome/browser/chromeos/input_method/input_method_engine.h" | 9 #include "chrome/browser/chromeos/input_method/input_method_engine.h" |
10 #include "chrome/browser/chromeos/login/lock/screen_locker.h" | 10 #include "chrome/browser/chromeos/login/lock/screen_locker.h" |
| 11 #include "chrome/browser/chromeos/login/session/user_session_manager.h" |
11 #include "chrome/browser/chromeos/login/ui/user_adding_screen.h" | 12 #include "chrome/browser/chromeos/login/ui/user_adding_screen.h" |
12 #include "chrome/browser/chromeos/profiles/profile_helper.h" | 13 #include "chrome/browser/chromeos/profiles/profile_helper.h" |
13 #include "chrome/browser/extensions/extension_service.h" | 14 #include "chrome/browser/extensions/extension_service.h" |
14 #include "chrome/browser/profiles/profile_manager.h" | 15 #include "chrome/browser/profiles/profile_manager.h" |
15 #include "chrome/common/extensions/api/input_ime.h" | 16 #include "chrome/common/extensions/api/input_ime.h" |
16 #include "chrome/common/extensions/api/input_ime/input_components_handler.h" | 17 #include "chrome/common/extensions/api/input_ime/input_components_handler.h" |
17 #include "chromeos/ime/component_extension_ime_manager.h" | 18 #include "chromeos/ime/component_extension_ime_manager.h" |
18 #include "chromeos/ime/extension_ime_util.h" | 19 #include "chromeos/ime/extension_ime_util.h" |
19 #include "chromeos/ime/input_method_manager.h" | 20 #include "chromeos/ime/input_method_manager.h" |
20 #include "extensions/browser/event_router.h" | 21 #include "extensions/browser/event_router.h" |
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 } // namespace chromeos | 334 } // namespace chromeos |
334 | 335 |
335 namespace extensions { | 336 namespace extensions { |
336 | 337 |
337 InputImeEventRouter* | 338 InputImeEventRouter* |
338 InputImeEventRouter::GetInstance() { | 339 InputImeEventRouter::GetInstance() { |
339 return Singleton<InputImeEventRouter>::get(); | 340 return Singleton<InputImeEventRouter>::get(); |
340 } | 341 } |
341 | 342 |
342 bool InputImeEventRouter::RegisterImeExtension( | 343 bool InputImeEventRouter::RegisterImeExtension( |
| 344 Profile* profile, |
343 const std::string& extension_id, | 345 const std::string& extension_id, |
344 const std::vector<extensions::InputComponentInfo>& input_components) { | 346 const std::vector<extensions::InputComponentInfo>& input_components) { |
345 VLOG(1) << "RegisterImeExtension: " << extension_id; | 347 VLOG(1) << "RegisterImeExtension: " << extension_id; |
346 | 348 |
347 if (engine_map_[extension_id]) | 349 if (engine_map_[extension_id]) |
348 return false; | 350 return false; |
349 | 351 |
350 chromeos::input_method::InputMethodManager* manager = | 352 chromeos::input_method::InputMethodManager* manager = |
351 chromeos::input_method::InputMethodManager::Get(); | 353 chromeos::input_method::InputMethodManager::Get(); |
352 chromeos::ComponentExtensionIMEManager* comp_ext_ime_manager = | 354 chromeos::ComponentExtensionIMEManager* comp_ext_ime_manager = |
(...skipping 28 matching lines...) Expand all Loading... |
381 component.options_page_url, | 383 component.options_page_url, |
382 component.input_view_url)); | 384 component.input_view_url)); |
383 } | 385 } |
384 } | 386 } |
385 | 387 |
386 scoped_ptr<chromeos::InputMethodEngineInterface::Observer> observer( | 388 scoped_ptr<chromeos::InputMethodEngineInterface::Observer> observer( |
387 new chromeos::ImeObserver(extension_id)); | 389 new chromeos::ImeObserver(extension_id)); |
388 chromeos::InputMethodEngine* engine = new chromeos::InputMethodEngine(); | 390 chromeos::InputMethodEngine* engine = new chromeos::InputMethodEngine(); |
389 engine->Initialize(observer.Pass(), extension_id.c_str()); | 391 engine->Initialize(observer.Pass(), extension_id.c_str()); |
390 engine_map_[extension_id] = engine; | 392 engine_map_[extension_id] = engine; |
391 manager->GetActiveIMEState()->AddInputMethodExtension( | 393 chromeos::UserSessionManager::GetInstance() |
392 extension_id, descriptors, engine); | 394 ->GetDefaultIMEState(profile) |
| 395 ->AddInputMethodExtension(extension_id, descriptors, engine); |
393 | 396 |
394 return true; | 397 return true; |
395 } | 398 } |
396 | 399 |
397 void InputImeEventRouter::UnregisterAllImes(const std::string& extension_id) { | 400 void InputImeEventRouter::UnregisterAllImes(const std::string& extension_id) { |
398 std::map<std::string, InputMethodEngineInterface*>::iterator it = | 401 std::map<std::string, InputMethodEngineInterface*>::iterator it = |
399 engine_map_.find(extension_id); | 402 engine_map_.find(extension_id); |
400 if (it != engine_map_.end()) { | 403 if (it != engine_map_.end()) { |
401 chromeos::input_method::InputMethodManager::Get() | 404 chromeos::input_method::InputMethodManager::Get() |
402 ->GetActiveIMEState() | 405 ->GetActiveIMEState() |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
818 // static | 821 // static |
819 BrowserContextKeyedAPIFactory<InputImeAPI>* InputImeAPI::GetFactoryInstance() { | 822 BrowserContextKeyedAPIFactory<InputImeAPI>* InputImeAPI::GetFactoryInstance() { |
820 return g_factory.Pointer(); | 823 return g_factory.Pointer(); |
821 } | 824 } |
822 | 825 |
823 void InputImeAPI::OnExtensionLoaded(content::BrowserContext* browser_context, | 826 void InputImeAPI::OnExtensionLoaded(content::BrowserContext* browser_context, |
824 const Extension* extension) { | 827 const Extension* extension) { |
825 const std::vector<InputComponentInfo>* input_components = | 828 const std::vector<InputComponentInfo>* input_components = |
826 extensions::InputComponents::GetInputComponents(extension); | 829 extensions::InputComponents::GetInputComponents(extension); |
827 if (input_components) | 830 if (input_components) |
828 input_ime_event_router()->RegisterImeExtension(extension->id(), | 831 input_ime_event_router()->RegisterImeExtension( |
829 *input_components); | 832 Profile::FromBrowserContext(browser_context), |
| 833 extension->id(), |
| 834 *input_components); |
830 } | 835 } |
831 | 836 |
832 void InputImeAPI::OnExtensionUnloaded(content::BrowserContext* browser_context, | 837 void InputImeAPI::OnExtensionUnloaded(content::BrowserContext* browser_context, |
833 const Extension* extension, | 838 const Extension* extension, |
834 UnloadedExtensionInfo::Reason reason) { | 839 UnloadedExtensionInfo::Reason reason) { |
835 const std::vector<InputComponentInfo>* input_components = | 840 const std::vector<InputComponentInfo>* input_components = |
836 extensions::InputComponents::GetInputComponents(extension); | 841 extensions::InputComponents::GetInputComponents(extension); |
837 if (!input_components) | 842 if (!input_components) |
838 return; | 843 return; |
839 if (input_components->size() > 0) | 844 if (input_components->size() > 0) |
840 input_ime_event_router()->UnregisterAllImes(extension->id()); | 845 input_ime_event_router()->UnregisterAllImes(extension->id()); |
841 } | 846 } |
842 | 847 |
843 void InputImeAPI::OnListenerAdded(const EventListenerInfo& details) { | 848 void InputImeAPI::OnListenerAdded(const EventListenerInfo& details) { |
844 InputMethodEngineInterface* engine = | 849 InputMethodEngineInterface* engine = |
845 input_ime_event_router()->GetActiveEngine(details.extension_id); | 850 input_ime_event_router()->GetActiveEngine(details.extension_id); |
846 // Notifies the IME extension for IME ready with onActivate/onFocus events. | 851 // Notifies the IME extension for IME ready with onActivate/onFocus events. |
847 if (engine) | 852 if (engine) |
848 engine->Enable(engine->GetActiveComponentId()); | 853 engine->Enable(engine->GetActiveComponentId()); |
849 } | 854 } |
850 | 855 |
851 InputImeEventRouter* InputImeAPI::input_ime_event_router() { | 856 InputImeEventRouter* InputImeAPI::input_ime_event_router() { |
852 return InputImeEventRouter::GetInstance(); | 857 return InputImeEventRouter::GetInstance(); |
853 } | 858 } |
854 | 859 |
855 } // namespace extensions | 860 } // namespace extensions |
OLD | NEW |