input_method_configuration.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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/ibus_bridge.h"
16
17namespace chromeos {
18namespace input_method {
19
20namespace {
21void OnSessionStateChange(InputMethodManagerImpl* input_method_manager_impl,
22                          InputMethodPersistence* input_method_persistence,
23                          InputMethodManager::State new_state) {
24  input_method_persistence->OnSessionStateChange(new_state);
25  input_method_manager_impl->SetState(new_state);
26}
27
28class InputMethodConfiguration {
29 public:
30  InputMethodConfiguration() {}
31  virtual ~InputMethodConfiguration() {}
32
33  void Initialize(
34      const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner) {
35    IBusBridge::Initialize();
36
37    InputMethodManagerImpl* impl = new InputMethodManagerImpl(
38        scoped_ptr<InputMethodDelegate>(new InputMethodDelegateImpl));
39    impl->Init(ui_task_runner.get());
40    InputMethodManager::Initialize(impl);
41
42    DCHECK(InputMethodManager::Get());
43
44    accessibility_.reset(new Accessibility(impl));
45    input_method_persistence_.reset(new InputMethodPersistence(impl));
46    browser_state_monitor_.reset(new BrowserStateMonitor(
47        base::Bind(&OnSessionStateChange,
48                   impl,
49                   input_method_persistence_.get())));
50
51    DVLOG(1) << "InputMethodManager initialized";
52  }
53
54  void InitializeForTesting(InputMethodManager* mock_manager) {
55    InputMethodManager::Initialize(mock_manager);
56    DVLOG(1) << "InputMethodManager for testing initialized";
57  }
58
59  void Shutdown() {
60    accessibility_.reset();
61    browser_state_monitor_.reset();
62    input_method_persistence_.reset();
63
64    InputMethodManager::Shutdown();
65
66    IBusBridge::Shutdown();
67
68    DVLOG(1) << "InputMethodManager shutdown";
69  }
70
71 private:
72  scoped_ptr<Accessibility> accessibility_;
73  scoped_ptr<BrowserStateMonitor> browser_state_monitor_;
74  scoped_ptr<InputMethodPersistence> input_method_persistence_;
75};
76
77InputMethodConfiguration* g_input_method_configuration = NULL;
78
79}  // namespace
80
81void Initialize(
82    const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner,
83    const scoped_refptr<base::SequencedTaskRunner>& file_task_runner) {
84  if (!g_input_method_configuration)
85    g_input_method_configuration = new InputMethodConfiguration();
86  g_input_method_configuration->Initialize(ui_task_runner);
87}
88
89void InitializeForTesting(InputMethodManager* mock_manager) {
90  if (!g_input_method_configuration)
91    g_input_method_configuration = new InputMethodConfiguration();
92  g_input_method_configuration->InitializeForTesting(mock_manager);
93}
94
95void Shutdown() {
96  if (!g_input_method_configuration)
97    return;
98
99  g_input_method_configuration->Shutdown();
100  delete g_input_method_configuration;
101  g_input_method_configuration = NULL;
102}
103
104}  // namespace input_method
105}  // namespace chromeos
106