77f84e849e6ec2c2e5bbcf10cae8768422e8b61e
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / extensions / input_method_api.h
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_