Home | History | Annotate | Download | only in extensions
      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 CHROME_BROWSER_CHROMEOS_EXTENSIONS_INPUT_METHOD_API_H_
      6 #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_INPUT_METHOD_API_H_
      7 
      8 #include "base/compiler_specific.h"
      9 #include "base/memory/scoped_ptr.h"
     10 #include "chrome/browser/extensions/api/profile_keyed_api_factory.h"
     11 #include "chrome/browser/extensions/event_router.h"
     12 #include "chrome/browser/extensions/extension_function.h"
     13 
     14 namespace chromeos {
     15 class ExtensionInputMethodEventRouter;
     16 }
     17 
     18 namespace extensions {
     19 
     20 // Implements the experimental.inputMethod.get method.
     21 class GetInputMethodFunction : public SyncExtensionFunction {
     22  public:
     23   GetInputMethodFunction();
     24 
     25  protected:
     26   virtual ~GetInputMethodFunction();
     27 
     28   virtual bool RunImpl() OVERRIDE;
     29 
     30  private:
     31   DECLARE_EXTENSION_FUNCTION("inputMethodPrivate.get", INPUTMETHODPRIVATE_GET)
     32 };
     33 
     34 // Notify the initialization is done to input method engine.
     35 // TODO(nona): remove this function.
     36 class StartImeFunction : public SyncExtensionFunction {
     37  public:
     38   StartImeFunction();
     39 
     40  protected:
     41   virtual ~StartImeFunction();
     42 
     43   virtual bool RunImpl() OVERRIDE;
     44 
     45  private:
     46   DECLARE_EXTENSION_FUNCTION("inputMethodPrivate.startIme",
     47                              INPUTMETHODPRIVATE_STARTIME)
     48 };
     49 
     50 class InputMethodAPI : public ProfileKeyedAPI,
     51                        public extensions::EventRouter::Observer {
     52  public:
     53   explicit InputMethodAPI(Profile* profile);
     54   virtual ~InputMethodAPI();
     55 
     56   // Returns input method name for the given XKB (X keyboard extensions in X
     57   // Window System) id.
     58   static std::string GetInputMethodForXkb(const std::string& xkb_id);
     59 
     60   // ProfileKeyedAPI implementation.
     61   static ProfileKeyedAPIFactory<InputMethodAPI>* GetFactoryInstance();
     62 
     63   // ProfileKeyedAPI implementation.
     64   virtual void Shutdown() OVERRIDE;
     65 
     66   // EventRouter::Observer implementation.
     67   virtual void OnListenerAdded(const extensions::EventListenerInfo& details)
     68       OVERRIDE;
     69 
     70  private:
     71   friend class ProfileKeyedAPIFactory<InputMethodAPI>;
     72 
     73   // ProfileKeyedAPI implementation.
     74   static const char* service_name() {
     75     return "InputMethodAPI";
     76   }
     77   static const bool kServiceIsNULLWhileTesting = true;
     78 
     79   Profile* const profile_;
     80 
     81   // Created lazily upon OnListenerAdded.
     82   scoped_ptr<chromeos::ExtensionInputMethodEventRouter>
     83       input_method_event_router_;
     84 
     85   DISALLOW_COPY_AND_ASSIGN(InputMethodAPI);
     86 };
     87 
     88 }  // namespace extensions
     89 
     90 #endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_INPUT_METHOD_API_H_
     91