Home | History | Annotate | Download | only in ime
      1 // Copyright (c) 2011 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 #ifndef UI_BASE_IME_INPUT_METHOD_FACTORY_H_
      6 #define UI_BASE_IME_INPUT_METHOD_FACTORY_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/compiler_specific.h"
     10 #include "base/memory/scoped_ptr.h"
     11 #include "ui/base/ime/input_method_initializer.h"
     12 #include "ui/base/ui_export.h"
     13 #include "ui/gfx/native_widget_types.h"
     14 
     15 template <typename T> struct DefaultSingletonTraits;
     16 
     17 namespace ui {
     18 namespace internal {
     19 class InputMethodDelegate;
     20 }  // namespace internal
     21 
     22 class InputMethod;
     23 
     24 class UI_EXPORT InputMethodFactory {
     25  public:
     26   // Returns the current active factory.
     27   // If no factory was set, sets the DefaultInputMethodFactory by default.  Once
     28   // a factory was set, you cannot change the factory, and always the same
     29   // factory is returned.
     30   static InputMethodFactory* GetInstance();
     31 
     32   // Sets an InputMethodFactory to be used.
     33   // This function must be called at most once.  |instance| is not owned by this
     34   // class or marked automatically as a leaky object.  It's a caller's duty to
     35   // destroy the object or mark it as leaky.
     36   static void SetInstance(InputMethodFactory* instance);
     37 
     38   virtual ~InputMethodFactory() {}
     39 
     40   // Creates and returns an input method implementation.
     41   virtual scoped_ptr<InputMethod> CreateInputMethod(
     42       internal::InputMethodDelegate* delegate,
     43       gfx::AcceleratedWidget widget) = 0;
     44 
     45  private:
     46   static void ClearInstance();
     47 
     48   friend UI_EXPORT void ShutdownInputMethod();
     49   friend UI_EXPORT void ShutdownInputMethodForTesting();
     50 };
     51 
     52 class DefaultInputMethodFactory : public InputMethodFactory {
     53  public:
     54   // For Singleton
     55   static DefaultInputMethodFactory* GetInstance();
     56 
     57   // Overridden from InputMethodFactory.
     58   virtual scoped_ptr<InputMethod> CreateInputMethod(
     59       internal::InputMethodDelegate* delegate,
     60       gfx::AcceleratedWidget widget) OVERRIDE;
     61 
     62  private:
     63   DefaultInputMethodFactory() {}
     64 
     65   friend struct DefaultSingletonTraits<DefaultInputMethodFactory>;
     66 
     67   DISALLOW_COPY_AND_ASSIGN(DefaultInputMethodFactory);
     68 };
     69 
     70 class MockInputMethodFactory : public InputMethodFactory {
     71  public:
     72   // For Singleton
     73   static MockInputMethodFactory* GetInstance();
     74 
     75   // Overridden from InputMethodFactory.
     76   virtual scoped_ptr<InputMethod> CreateInputMethod(
     77       internal::InputMethodDelegate* delegate,
     78       gfx::AcceleratedWidget widget) OVERRIDE;
     79 
     80  private:
     81   MockInputMethodFactory() {}
     82 
     83   friend struct DefaultSingletonTraits<MockInputMethodFactory>;
     84 
     85   DISALLOW_COPY_AND_ASSIGN(MockInputMethodFactory);
     86 };
     87 
     88 // Shorthand for
     89 // InputMethodFactory::GetInstance()->CreateInputMethod(delegate, widget).
     90 UI_EXPORT scoped_ptr<InputMethod> CreateInputMethod(
     91     internal::InputMethodDelegate* delegate,
     92     gfx::AcceleratedWidget widget);
     93 
     94 // Shorthand for InputMethodFactory::SetInstance(new MockInputMethodFactory()).
     95 // TODO(yukishiino): Retires this shorthand, and makes ui::InitializeInputMethod
     96 // and ui::InitializeInputMethodForTesting set the appropriate factory.
     97 UI_EXPORT void SetUpInputMethodFactoryForTesting();
     98 
     99 #if defined(OS_WIN)
    100 // Returns a shared input method object for the platform. Caller must not
    101 // delete the object. Currently supported only on Windows. This method is
    102 // for non-Aura environment, where only one input method object is created for
    103 // the browser process.
    104 UI_EXPORT InputMethod* GetSharedInputMethod();
    105 
    106 namespace internal {
    107 // Destroys the shared input method object returned by GetSharedInputMethod().
    108 // This function must be called only from input_method_initializer.cc.
    109 void DestroySharedInputMethod();
    110 }  // namespace internal
    111 #endif
    112 
    113 }  // namespace ui;
    114 
    115 #endif  // UI_BASE_IME_INPUT_METHOD_FACTORY_H_
    116