Index: chromeos/ime/component_extension_ime_manager.h |
diff --git a/chromeos/ime/component_extension_ime_manager.h b/chromeos/ime/component_extension_ime_manager.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0fcaded1529e59b6146bb738399cb289941fe8a9 |
--- /dev/null |
+++ b/chromeos/ime/component_extension_ime_manager.h |
@@ -0,0 +1,131 @@ |
+// 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" |
+ |
+class Profile; |
+ |
+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::string indicator; // The indicator text. |
+ 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 void Load(Profile* profile, |
+ 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(Profile* profile, |
+ 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(Profile* profile, |
+ 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(Profile* profile, |
+ 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_ |