Home | History | Annotate | Download | only in ime
      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) && defined(USE_X11)
     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 
     23 namespace {
     24 
     25 bool g_input_method_set_for_testing = false;
     26 
     27 bool g_create_input_method_called = false;
     28 
     29 }  // namespace
     30 
     31 namespace ui {
     32 
     33 scoped_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) && defined(USE_X11)
     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 
     57 void 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