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 3 // found in the LICENSE file. 4 5 #include "chrome/browser/chromeos/input_method/input_method_configuration.h" 6 7 #include "base/bind.h" 8 #include "base/logging.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "chrome/browser/chromeos/input_method/accessibility.h" 11 #include "chrome/browser/chromeos/input_method/browser_state_monitor.h" 12 #include "chrome/browser/chromeos/input_method/input_method_delegate_impl.h" 13 #include "chrome/browser/chromeos/input_method/input_method_manager_impl.h" 14 #include "chrome/browser/chromeos/input_method/input_method_persistence.h" 15 #include "ui/base/ime/chromeos/ime_bridge.h" 16 17 namespace chromeos { 18 namespace input_method { 19 20 namespace { 21 void OnSessionStateChange(InputMethodManagerImpl* input_method_manager_impl, 22 InputMethodPersistence* input_method_persistence, 23 InputMethodManager::UISessionState new_ui_session) { 24 input_method_persistence->OnSessionStateChange(new_ui_session); 25 input_method_manager_impl->SetUISessionState(new_ui_session); 26 } 27 28 bool g_disable_extension_loading = false; 29 30 class InputMethodConfiguration { 31 public: 32 InputMethodConfiguration() {} 33 virtual ~InputMethodConfiguration() {} 34 35 void Initialize() { 36 IMEBridge::Initialize(); 37 38 InputMethodManagerImpl* impl = new InputMethodManagerImpl( 39 scoped_ptr<InputMethodDelegate>(new InputMethodDelegateImpl), 40 !g_disable_extension_loading); 41 InputMethodManager::Initialize(impl); 42 43 DCHECK(InputMethodManager::Get()); 44 45 accessibility_.reset(new Accessibility(impl)); 46 input_method_persistence_.reset(new InputMethodPersistence(impl)); 47 browser_state_monitor_.reset(new BrowserStateMonitor( 48 base::Bind(&OnSessionStateChange, 49 impl, 50 input_method_persistence_.get()))); 51 52 DVLOG(1) << "InputMethodManager initialized"; 53 } 54 55 void InitializeForTesting(InputMethodManager* mock_manager) { 56 InputMethodManager::Initialize(mock_manager); 57 DVLOG(1) << "InputMethodManager for testing initialized"; 58 } 59 60 void Shutdown() { 61 accessibility_.reset(); 62 browser_state_monitor_.reset(); 63 input_method_persistence_.reset(); 64 65 InputMethodManager::Shutdown(); 66 67 IMEBridge::Shutdown(); 68 69 DVLOG(1) << "InputMethodManager shutdown"; 70 } 71 72 private: 73 scoped_ptr<Accessibility> accessibility_; 74 scoped_ptr<BrowserStateMonitor> browser_state_monitor_; 75 scoped_ptr<InputMethodPersistence> input_method_persistence_; 76 }; 77 78 InputMethodConfiguration* g_input_method_configuration = NULL; 79 80 } // namespace 81 82 void Initialize() { 83 if (!g_input_method_configuration) 84 g_input_method_configuration = new InputMethodConfiguration(); 85 g_input_method_configuration->Initialize(); 86 } 87 88 void InitializeForTesting(InputMethodManager* mock_manager) { 89 if (!g_input_method_configuration) 90 g_input_method_configuration = new InputMethodConfiguration(); 91 g_input_method_configuration->InitializeForTesting(mock_manager); 92 } 93 94 void DisableExtensionLoading() { 95 g_disable_extension_loading = true; 96 } 97 98 void Shutdown() { 99 if (!g_input_method_configuration) 100 return; 101 102 g_input_method_configuration->Shutdown(); 103 delete g_input_method_configuration; 104 g_input_method_configuration = NULL; 105 } 106 107 } // namespace input_method 108 } // namespace chromeos 109