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