| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROMEOS_IME_COMPONENT_EXTENSION_IME_MANAGER_H_ |
| #define CHROMEOS_IME_COMPONENT_EXTENSION_IME_MANAGER_H_ |
| |
| #include <set> |
| |
| #include "base/files/file_path.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/observer_list.h" |
| #include "chromeos/chromeos_export.h" |
| #include "chromeos/ime/input_method_descriptor.h" |
| |
| namespace chromeos { |
| |
| // Represents an engine in component extension IME. |
| struct CHROMEOS_EXPORT ComponentExtensionEngine { |
| ComponentExtensionEngine(); |
| ~ComponentExtensionEngine(); |
| std::string engine_id; // The engine id. |
| std::string display_name; // The display name. |
| std::vector<std::string> language_codes; // The engine's language(ex. "en"). |
| std::string description; // The engine description. |
| std::vector<std::string> layouts; // The list of keyboard layout of engine. |
| GURL options_page_url; // an URL to option page. |
| GURL input_view_url; // an URL to input view page. |
| }; |
| |
| // Represents a component extension IME. |
| struct CHROMEOS_EXPORT ComponentExtensionIME { |
| ComponentExtensionIME(); |
| ~ComponentExtensionIME(); |
| std::string id; // extension id. |
| std::string manifest; // the contents of manifest.json |
| std::string description; // description of extension. |
| GURL options_page_url; // an URL to option page. |
| base::FilePath path; |
| std::vector<ComponentExtensionEngine> engines; |
| }; |
| |
| // Provides an interface to list/load/unload for component extension IME. |
| class CHROMEOS_EXPORT ComponentExtensionIMEManagerDelegate { |
| public: |
| ComponentExtensionIMEManagerDelegate(); |
| virtual ~ComponentExtensionIMEManagerDelegate(); |
| |
| // Lists installed component extension IMEs. |
| virtual std::vector<ComponentExtensionIME> ListIME() = 0; |
| |
| // Loads component extension IME associated with |extension_id|. |
| // Returns false if it fails, otherwise returns true. |
| virtual bool Load(const std::string& extension_id, |
| const std::string& manifest, |
| const base::FilePath& path) = 0; |
| |
| // Unloads component extension IME associated with |extension_id|. |
| virtual void Unload(const std::string& extension_id, |
| const base::FilePath& path) = 0; |
| }; |
| |
| // This class manages component extension input method. |
| class CHROMEOS_EXPORT ComponentExtensionIMEManager { |
| public: |
| class Observer { |
| public: |
| // Called when the initialization is done. |
| virtual void OnImeComponentExtensionInitialized() = 0; |
| }; |
| |
| ComponentExtensionIMEManager(); |
| virtual ~ComponentExtensionIMEManager(); |
| |
| // Initializes component extension manager. This function create internal |
| // mapping between input method id and engine components. This function must |
| // be called before using any other function. |
| void Initialize(scoped_ptr<ComponentExtensionIMEManagerDelegate> delegate); |
| |
| // Notifies the observers for the component extension IMEs are initialized. |
| void NotifyInitialized(); |
| |
| // Returns true if the initialization is done, otherwise returns false. |
| bool IsInitialized(); |
| |
| // Loads |input_method_id| component extension IME. This function returns true |
| // on success. This function is safe to call multiple times. Returns false if |
| // already corresponding component extension is loaded. |
| bool LoadComponentExtensionIME(const std::string& input_method_id); |
| |
| // Unloads |input_method_id| component extension IME. This function returns |
| // true on success. This function is safe to call multiple times. Returns |
| // false if already corresponding component extension is unloaded. |
| bool UnloadComponentExtensionIME(const std::string& input_method_id); |
| |
| // Returns true if |input_method_id| is whitelisted component extension input |
| // method. |
| bool IsWhitelisted(const std::string& input_method_id); |
| |
| // Returns true if |extension_id| is whitelisted component extension. |
| bool IsWhitelistedExtension(const std::string& extension_id); |
| |
| // Returns InputMethodId. This function returns empty string if |extension_id| |
| // and |engine_id| is not a whitelisted component extention IME. |
| std::string GetId(const std::string& extension_id, |
| const std::string& engine_id); |
| |
| // Returns localized name of |input_method_id|. |
| std::string GetName(const std::string& input_method_id); |
| |
| // Returns localized description of |input_method_id|. |
| std::string GetDescription(const std::string& input_method_id); |
| |
| // Returns list of input method id associated with |language|. |
| std::vector<std::string> ListIMEByLanguage(const std::string& language); |
| |
| // Returns all IME as InputMethodDescriptors. |
| input_method::InputMethodDescriptors GetAllIMEAsInputMethodDescriptor(); |
| |
| // Returns all XKB keyboard IME as InputMethodDescriptors. |
| input_method::InputMethodDescriptors GetXkbIMEAsInputMethodDescriptor(); |
| |
| void AddObserver(Observer* observer); |
| void RemoveObserver(Observer* observer); |
| |
| private: |
| // Finds ComponentExtensionIME and EngineDescription associated with |
| // |input_method_id|. This function retruns true if it is found, otherwise |
| // returns false. |out_extension| and |out_engine| can be NULL. |
| bool FindEngineEntry(const std::string& input_method_id, |
| ComponentExtensionIME* out_extension, |
| ComponentExtensionEngine* out_engine); |
| |
| bool IsInLoginLayoutWhitelist(const std::vector<std::string>& layouts); |
| |
| scoped_ptr<ComponentExtensionIMEManagerDelegate> delegate_; |
| |
| std::vector<ComponentExtensionIME> component_extension_imes_; |
| |
| ObserverList<Observer> observers_; |
| |
| bool is_initialized_; |
| |
| bool was_initialization_notified_; |
| |
| std::set<std::string> login_layout_set_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ComponentExtensionIMEManager); |
| }; |
| |
| } // namespace chromeos |
| |
| #endif // CHROMEOS_IME_COMPONENT_EXTENSION_IME_MANAGER_H_ |