Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / input_method / input_method_configuration.cc
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