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