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 "ui/base/ime/input_method_factory.h" 6 7#include "ui/base/ime/mock_input_method.h" 8 9#if defined(OS_CHROMEOS) 10#include "ui/base/ime/input_method_chromeos.h" 11#elif defined(OS_WIN) 12#include "base/win/metro.h" 13#include "ui/base/ime/input_method_win.h" 14#include "ui/base/ime/remote_input_method_win.h" 15#elif defined(OS_MACOSX) 16#include "ui/base/ime/input_method_mac.h" 17#elif defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS) 18#include "ui/base/ime/input_method_auralinux.h" 19#else 20#include "ui/base/ime/input_method_minimal.h" 21#endif 22 23namespace { 24 25bool g_input_method_set_for_testing = false; 26 27bool g_create_input_method_called = false; 28 29} // namespace 30 31namespace ui { 32 33scoped_ptr<InputMethod> CreateInputMethod( 34 internal::InputMethodDelegate* delegate, 35 gfx::AcceleratedWidget widget) { 36 if (!g_create_input_method_called) 37 g_create_input_method_called = true; 38 39 if (g_input_method_set_for_testing) 40 return scoped_ptr<InputMethod>(new MockInputMethod(delegate)); 41 42#if defined(OS_CHROMEOS) 43 return scoped_ptr<InputMethod>(new InputMethodChromeOS(delegate)); 44#elif defined(OS_WIN) 45 if (IsRemoteInputMethodWinRequired(widget)) 46 return CreateRemoteInputMethodWin(delegate); 47 return scoped_ptr<InputMethod>(new InputMethodWin(delegate, widget)); 48#elif defined(OS_MACOSX) 49 return scoped_ptr<InputMethod>(new InputMethodMac(delegate)); 50#elif defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS) 51 return scoped_ptr<InputMethod>(new InputMethodAuraLinux(delegate)); 52#else 53 return scoped_ptr<InputMethod>(new InputMethodMinimal(delegate)); 54#endif 55} 56 57void SetUpInputMethodFactoryForTesting() { 58 if (g_input_method_set_for_testing) 59 return; 60 61 CHECK(!g_create_input_method_called) 62 << "ui::SetUpInputMethodFactoryForTesting was called after use of " 63 << "ui::CreateInputMethod. You must call " 64 << "ui::SetUpInputMethodFactoryForTesting earlier."; 65 66 g_input_method_set_for_testing = true; 67} 68 69} // namespace ui 70