- add sources.
[platform/framework/web/crosswalk.git] / src / ui / base / ime / input_method_initializer.cc
1 // Copyright 2013 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 "ui/base/ime/input_method_initializer.h"
6
7 #include "ui/base/ime/input_method_factory.h"
8
9 #if defined(OS_CHROMEOS)
10 #include "base/logging.h"
11 #include "chromeos/dbus/dbus_thread_manager.h"
12 #include "chromeos/ime/ibus_bridge.h"
13 #elif defined(USE_AURA) && defined(USE_X11)
14 #include "base/memory/scoped_ptr.h"
15 #include "ui/base/ime/linux/fake_input_method_context_factory.h"
16 #elif defined(OS_WIN)
17 #include "base/win/metro.h"
18 #include "ui/base/ime/win/tsf_bridge.h"
19 #endif
20
21 namespace {
22
23 #if defined(OS_CHROMEOS)
24 bool dbus_thread_manager_was_initialized = false;
25 #elif defined(USE_AURA) && defined(USE_X11)
26 const ui::LinuxInputMethodContextFactory* g_linux_input_method_context_factory;
27 #endif
28
29 }  // namespace
30
31 namespace ui {
32
33 void InitializeInputMethod() {
34 #if defined(OS_CHROMEOS)
35   chromeos::IBusBridge::Initialize();
36 #elif defined(OS_WIN)
37   if (base::win::IsTSFAwareRequired())
38     ui::TSFBridge::Initialize();
39 #endif
40 }
41
42 void ShutdownInputMethod() {
43 #if defined(OS_CHROMEOS)
44   chromeos::IBusBridge::Shutdown();
45 #elif defined(OS_WIN)
46   ui::internal::DestroySharedInputMethod();
47   if (base::win::IsTSFAwareRequired())
48     ui::TSFBridge::Shutdown();
49 #endif
50 }
51
52 void InitializeInputMethodForTesting() {
53 #if defined(OS_CHROMEOS)
54   chromeos::IBusBridge::Initialize();
55   // TODO(nona): Remove DBusThreadManager initialize.
56   if (!chromeos::DBusThreadManager::IsInitialized()) {
57     chromeos::DBusThreadManager::InitializeWithStub();
58     dbus_thread_manager_was_initialized = true;
59   }
60 #elif defined(USE_AURA) && defined(USE_X11)
61   if (!g_linux_input_method_context_factory)
62     g_linux_input_method_context_factory = new FakeInputMethodContextFactory();
63   const LinuxInputMethodContextFactory* factory =
64       LinuxInputMethodContextFactory::instance();
65   CHECK(!factory || factory == g_linux_input_method_context_factory)
66       << "LinuxInputMethodContextFactory was already initialized somewhere "
67       << "else.";
68   LinuxInputMethodContextFactory::SetInstance(
69       g_linux_input_method_context_factory);
70 #elif defined(OS_WIN)
71   if (base::win::IsTSFAwareRequired()) {
72     // Make sure COM is initialized because TSF depends on COM.
73     CoInitialize(NULL);
74     ui::TSFBridge::Initialize();
75   }
76 #endif
77 }
78
79 void ShutdownInputMethodForTesting() {
80 #if defined(OS_CHROMEOS)
81   chromeos::IBusBridge::Shutdown();
82   // TODO(nona): Remove DBusThreadManager finalize.
83   if (dbus_thread_manager_was_initialized) {
84     chromeos::DBusThreadManager::Shutdown();
85     dbus_thread_manager_was_initialized = false;
86   }
87 #elif defined(USE_AURA) && defined(USE_X11)
88   const LinuxInputMethodContextFactory* factory =
89       LinuxInputMethodContextFactory::instance();
90   CHECK(!factory || factory == g_linux_input_method_context_factory)
91       << "An unknown LinuxInputMethodContextFactory was set.";
92   LinuxInputMethodContextFactory::SetInstance(NULL);
93   delete g_linux_input_method_context_factory;
94   g_linux_input_method_context_factory = NULL;
95 #elif defined(OS_WIN)
96   ui::internal::DestroySharedInputMethod();
97   if (base::win::IsTSFAwareRequired()) {
98     ui::TSFBridge::Shutdown();
99     CoUninitialize();
100   }
101 #endif
102 }
103
104 }  // namespace ui