1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 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 UI_BASE_IME_CHROMEOS_COMPONENT_EXTENSION_IME_MANAGER_H_
#define UI_BASE_IME_CHROMEOS_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 "ui/base/ime/chromeos/input_method_descriptor.h"
#include "ui/base/ui_base_export.h"
class Profile;
namespace chromeos {
// Represents an engine in component extension IME.
struct UI_BASE_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 UI_BASE_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 UI_BASE_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 UI_BASE_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 // UI_BASE_IME_CHROMEOS_COMPONENT_EXTENSION_IME_MANAGER_H_
|