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 "extensions/browser/browser_context_keyed_api_factory.h"
     11 #include "extensions/browser/event_router.h"
     12 #include "extensions/browser/extension_function.h"
     13 
     14 namespace chromeos {
     15 class ExtensionInputMethodEventRouter;
     16 }
     17 
     18 namespace extensions {
     19 
     20 // Implements the inputMethodPrivate.getCurrentInputMethod method.
     21 class GetCurrentInputMethodFunction : public UIThreadExtensionFunction {
     22  public:
     23   GetCurrentInputMethodFunction() {}
     24 
     25  protected:
     26   virtual ~GetCurrentInputMethodFunction() {}
     27 
     28   virtual ResponseAction Run() OVERRIDE;
     29 
     30  private:
     31   DECLARE_EXTENSION_FUNCTION("inputMethodPrivate.getCurrentInputMethod",
     32                              INPUTMETHODPRIVATE_GETCURRENTINPUTMETHOD)
     33 };
     34 
     35 // Implements the inputMethodPrivate.setCurrentInputMethod method.
     36 class SetCurrentInputMethodFunction : public UIThreadExtensionFunction {
     37  public:
     38   SetCurrentInputMethodFunction() {}
     39 
     40  protected:
     41   virtual ~SetCurrentInputMethodFunction() {}
     42 
     43   virtual ResponseAction Run() OVERRIDE;
     44 
     45  private:
     46   DECLARE_EXTENSION_FUNCTION("inputMethodPrivate.setCurrentInputMethod",
     47                              INPUTMETHODPRIVATE_SETCURRENTINPUTMETHOD)
     48 };
     49 
     50 // Implements the inputMethodPrivate.getInputMethods method.
     51 class GetInputMethodsFunction : public UIThreadExtensionFunction {
     52  public:
     53   GetInputMethodsFunction() {}
     54 
     55  protected:
     56   virtual ~GetInputMethodsFunction() {}
     57 
     58   virtual ResponseAction Run() OVERRIDE;
     59 
     60  private:
     61   DECLARE_EXTENSION_FUNCTION("inputMethodPrivate.getInputMethods",
     62                              INPUTMETHODPRIVATE_GETINPUTMETHODS)
     63 };
     64 
     65 class InputMethodAPI : public BrowserContextKeyedAPI,
     66                        public extensions::EventRouter::Observer {
     67  public:
     68   static const char kOnInputMethodChanged[];
     69 
     70   explicit InputMethodAPI(content::BrowserContext* context);
     71   virtual ~InputMethodAPI();
     72 
     73   // Returns input method name for the given XKB (X keyboard extensions in X
     74   // Window System) id.
     75   static std::string GetInputMethodForXkb(const std::string& xkb_id);
     76 
     77   // BrowserContextKeyedAPI implementation.
     78   static BrowserContextKeyedAPIFactory<InputMethodAPI>* GetFactoryInstance();
     79 
     80   // BrowserContextKeyedAPI implementation.
     81   virtual void Shutdown() OVERRIDE;
     82 
     83   // EventRouter::Observer implementation.
     84   virtual void OnListenerAdded(const extensions::EventListenerInfo& details)
     85       OVERRIDE;
     86 
     87  private:
     88   friend class BrowserContextKeyedAPIFactory<InputMethodAPI>;
     89 
     90   // BrowserContextKeyedAPI implementation.
     91   static const char* service_name() {
     92     return "InputMethodAPI";
     93   }
     94   static const bool kServiceIsNULLWhileTesting = true;
     95 
     96   content::BrowserContext* const context_;
     97 
     98   // Created lazily upon OnListenerAdded.
     99   scoped_ptr<chromeos::ExtensionInputMethodEventRouter>
    100       input_method_event_router_;
    101 
    102   DISALLOW_COPY_AND_ASSIGN(InputMethodAPI);
    103 };
    104 
    105 }  // namespace extensions
    106 
    107 #endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_INPUT_METHOD_API_H_
    108