12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/input_method/input_method_configuration.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/chromeos/input_method/accessibility.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/input_method/browser_state_monitor.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/input_method/input_method_delegate_impl.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/input_method/input_method_manager_impl.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/input_method/input_method_persistence.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/ime/chromeos/ime_bridge.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace input_method { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void OnSessionStateChange(InputMethodManagerImpl* input_method_manager_impl, 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InputMethodPersistence* input_method_persistence, 2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) InputMethodManager::UISessionState new_ui_session) { 2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) input_method_persistence->OnSessionStateChange(new_ui_session); 2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) input_method_manager_impl->SetUISessionState(new_ui_session); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool g_disable_extension_loading = false; 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class InputMethodConfiguration { 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InputMethodConfiguration() {} 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~InputMethodConfiguration() {} 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void Initialize() { 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEBridge::Initialize(); 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InputMethodManagerImpl* impl = new InputMethodManagerImpl( 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_ptr<InputMethodDelegate>(new InputMethodDelegateImpl), 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) !g_disable_extension_loading); 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InputMethodManager::Initialize(impl); 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DCHECK(InputMethodManager::Get()); 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) accessibility_.reset(new Accessibility(impl)); 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) input_method_persistence_.reset(new InputMethodPersistence(impl)); 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser_state_monitor_.reset(new BrowserStateMonitor( 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&OnSessionStateChange, 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) impl, 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) input_method_persistence_.get()))); 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DVLOG(1) << "InputMethodManager initialized"; 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void InitializeForTesting(InputMethodManager* mock_manager) { 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InputMethodManager::Initialize(mock_manager); 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DVLOG(1) << "InputMethodManager for testing initialized"; 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void Shutdown() { 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) accessibility_.reset(); 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser_state_monitor_.reset(); 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) input_method_persistence_.reset(); 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InputMethodManager::Shutdown(); 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMEBridge::Shutdown(); 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DVLOG(1) << "InputMethodManager shutdown"; 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<Accessibility> accessibility_; 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<BrowserStateMonitor> browser_state_monitor_; 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<InputMethodPersistence> input_method_persistence_; 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)InputMethodConfiguration* g_input_method_configuration = NULL; 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void Initialize() { 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!g_input_method_configuration) 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) g_input_method_configuration = new InputMethodConfiguration(); 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) g_input_method_configuration->Initialize(); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void InitializeForTesting(InputMethodManager* mock_manager) { 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!g_input_method_configuration) 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) g_input_method_configuration = new InputMethodConfiguration(); 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) g_input_method_configuration->InitializeForTesting(mock_manager); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void DisableExtensionLoading() { 956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) g_disable_extension_loading = true; 966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Shutdown() { 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!g_input_method_configuration) 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return; 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) g_input_method_configuration->Shutdown(); 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) delete g_input_method_configuration; 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) g_input_method_configuration = NULL; 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace input_method 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 109