| // 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 <map> |
| #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: |
| 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); |
| |
| // 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 all IME as InputMethodDescriptors. |
| input_method::InputMethodDescriptors GetAllIMEAsInputMethodDescriptor(); |
| |
| // Returns all XKB keyboard IME as InputMethodDescriptors. |
| input_method::InputMethodDescriptors GetXkbIMEAsInputMethodDescriptor(); |
| |
| 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); |
| |
| bool IsInLoginLayoutWhitelist(const std::vector<std::string>& layouts); |
| |
| scoped_ptr<ComponentExtensionIMEManagerDelegate> delegate_; |
| |
| // The map of extension_id to ComponentExtensionIME instance. |
| // It's filled by Initialize() method and never changed during runtime. |
| std::map<std::string, ComponentExtensionIME> component_extension_imes_; |
| |
| // For quick check the validity of a given input method id. |
| // It's filled by Initialize() method and never changed during runtime. |
| std::set<std::string> input_method_id_set_; |
| |
| std::set<std::string> login_layout_set_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ComponentExtensionIMEManager); |
| }; |
| |
| } // namespace chromeos |
| |
| #endif // CHROMEOS_IME_COMPONENT_EXTENSION_IME_MANAGER_H_ |