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.
5 #include "ui/base/ime/input_method_initializer.h"
7 #include "ui/base/ime/input_method_factory.h"
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"
17 #include "base/win/metro.h"
18 #include "ui/base/ime/win/tsf_bridge.h"
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;
33 void InitializeInputMethod() {
34 #if defined(OS_CHROMEOS)
35 chromeos::IBusBridge::Initialize();
37 if (base::win::IsTSFAwareRequired())
38 ui::TSFBridge::Initialize();
42 void ShutdownInputMethod() {
43 #if defined(OS_CHROMEOS)
44 chromeos::IBusBridge::Shutdown();
46 ui::internal::DestroySharedInputMethod();
47 if (base::win::IsTSFAwareRequired())
48 ui::TSFBridge::Shutdown();
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;
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 "
68 LinuxInputMethodContextFactory::SetInstance(
69 g_linux_input_method_context_factory);
71 if (base::win::IsTSFAwareRequired()) {
72 // Make sure COM is initialized because TSF depends on COM.
74 ui::TSFBridge::Initialize();
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;
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;
96 ui::internal::DestroySharedInputMethod();
97 if (base::win::IsTSFAwareRequired()) {
98 ui::TSFBridge::Shutdown();