summaryrefslogtreecommitdiffstats
path: root/chrome/common
diff options
context:
space:
mode:
authorzork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-03 07:05:27 +0000
committerzork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-03 07:05:27 +0000
commitb0820375b172cd51bc3272941687a24350be4085 (patch)
tree3711477578d490650603cbfa8ddc6f40ba9f8b9e /chrome/common
parent8b8176670c5bd09a733c45b8a0967d5eb1b7dd2c (diff)
downloadchromium_src-b0820375b172cd51bc3272941687a24350be4085.zip
chromium_src-b0820375b172cd51bc3272941687a24350be4085.tar.gz
chromium_src-b0820375b172cd51bc3272941687a24350be4085.tar.bz2
Add input_components loading to the manifest
BUG=chromium-os:16090 TEST=None Review URL: http://codereview.chromium.org/7066046 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@87758 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common')
-rw-r--r--chrome/common/extensions/extension.cc136
-rw-r--r--chrome/common/extensions/extension.h29
-rw-r--r--chrome/common/extensions/extension_constants.cc25
-rw-r--r--chrome/common/extensions/extension_constants.h17
4 files changed, 207 insertions, 0 deletions
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc
index 803a4e4..4ee1033 100644
--- a/chrome/common/extensions/extension.cc
+++ b/chrome/common/extensions/extension.cc
@@ -351,6 +351,9 @@ const int Extension::kValidWebExtentSchemes =
const int Extension::kValidHostPermissionSchemes =
UserScript::kValidUserScriptSchemes | URLPattern::SCHEME_CHROMEUI;
+Extension::InputComponentInfo::InputComponentInfo() {}
+Extension::InputComponentInfo::~InputComponentInfo() {}
+
//
// PermissionMessage
//
@@ -2422,6 +2425,139 @@ bool Extension::InitFromValue(const DictionaryValue& source, int flags,
}
}
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableExperimentalExtensionApis) &&
+ source.HasKey(keys::kInputComponents)) {
+ ListValue* list_value = NULL;
+ if (!source.GetList(keys::kInputComponents, &list_value)) {
+ *error = errors::kInvalidInputComponents;
+ return false;
+ }
+
+ for (size_t i = 0; i < list_value->GetSize(); ++i) {
+ DictionaryValue* module_value = NULL;
+ std::string name_str;
+ InputComponentType type;
+ std::string id_str;
+ std::string description_str;
+ std::string language_str;
+ std::set<std::string> layouts;
+ std::string shortcut_keycode_str;
+ bool shortcut_alt = false;
+ bool shortcut_ctrl = false;
+ bool shortcut_shift = false;
+
+ if (!list_value->GetDictionary(i, &module_value)) {
+ *error = errors::kInvalidInputComponents;
+ return false;
+ }
+
+ // Get input_components[i].name.
+ if (!module_value->GetString(keys::kName, &name_str)) {
+ *error = ExtensionErrorUtils::FormatErrorMessage(
+ errors::kInvalidInputComponentName, base::IntToString(i));
+ return false;
+ }
+
+ // Get input_components[i].type.
+ std::string type_str;
+ if (module_value->GetString(keys::kType, &type_str)) {
+ if (type_str == "ime") {
+ type = INPUT_COMPONENT_TYPE_IME;
+ } else if (type_str == "virtual_keyboard") {
+ type = INPUT_COMPONENT_TYPE_VIRTUAL_KEYBOARD;
+ } else {
+ *error = ExtensionErrorUtils::FormatErrorMessage(
+ errors::kInvalidInputComponentType, base::IntToString(i));
+ return false;
+ }
+ } else {
+ *error = ExtensionErrorUtils::FormatErrorMessage(
+ errors::kInvalidInputComponentType, base::IntToString(i));
+ return false;
+ }
+
+ // Get input_components[i].id.
+ if (!module_value->GetString(keys::kId, &id_str)) {
+ id_str = "";
+ }
+
+ // Get input_components[i].description.
+ if (!module_value->GetString(keys::kDescription, &description_str)) {
+ *error = ExtensionErrorUtils::FormatErrorMessage(
+ errors::kInvalidInputComponentDescription, base::IntToString(i));
+ return false;
+ }
+
+ // Get input_components[i].language.
+ if (!module_value->GetString(keys::kLanguage, &language_str)) {
+ language_str = "";
+ }
+
+ // Get input_components[i].layouts.
+ ListValue* layouts_value = NULL;
+ if (!source.GetList(keys::kLayouts, &layouts_value)) {
+ *error = errors::kInvalidInputComponentLayouts;
+ return false;
+ }
+
+ for (size_t j = 0; j < layouts_value->GetSize(); ++j) {
+ std::string layout_name_str;
+ if (!layouts_value->GetString(j, &layout_name_str)) {
+ *error = ExtensionErrorUtils::FormatErrorMessage(
+ errors::kInvalidInputComponentLayoutName, base::IntToString(i),
+ base::IntToString(j));
+ return false;
+ }
+ layouts.insert(layout_name_str);
+ }
+
+ if (source.HasKey(keys::kShortcutKey)) {
+ DictionaryValue* shortcut_value = NULL;
+ if (!module_value->GetDictionary(keys::kShortcutKey, &shortcut_value)) {
+ *error = ExtensionErrorUtils::FormatErrorMessage(
+ errors::kInvalidInputComponentShortcutKey, base::IntToString(i));
+ return false;
+ }
+
+ // Get input_components[i].shortcut_keycode.
+ if (!shortcut_value->GetString(keys::kKeycode, &shortcut_keycode_str)) {
+ *error = ExtensionErrorUtils::FormatErrorMessage(
+ errors::kInvalidInputComponentShortcutKeycode,
+ base::IntToString(i));
+ return false;
+ }
+
+ // Get input_components[i].shortcut_alt.
+ if (!shortcut_value->GetBoolean(keys::kAltKey, &shortcut_alt)) {
+ shortcut_alt = false;
+ }
+
+ // Get input_components[i].shortcut_ctrl.
+ if (!shortcut_value->GetBoolean(keys::kCtrlKey, &shortcut_ctrl)) {
+ shortcut_ctrl = false;
+ }
+
+ // Get input_components[i].shortcut_shift.
+ if (!shortcut_value->GetBoolean(keys::kShiftKey, &shortcut_shift)) {
+ shortcut_shift = false;
+ }
+ }
+
+ input_components_.push_back(InputComponentInfo());
+ input_components_.back().name = name_str;
+ input_components_.back().type = type;
+ input_components_.back().id = id_str;
+ input_components_.back().description = description_str;
+ input_components_.back().language = language_str;
+ input_components_.back().layouts.insert(layouts.begin(), layouts.end());
+ input_components_.back().shortcut_keycode = shortcut_keycode_str;
+ input_components_.back().shortcut_alt = shortcut_alt;
+ input_components_.back().shortcut_ctrl = shortcut_ctrl;
+ input_components_.back().shortcut_shift = shortcut_shift;
+ }
+ }
+
if (source.HasKey(keys::kOmnibox)) {
if (!source.GetString(keys::kOmniboxKeyword, &omnibox_keyword_) ||
omnibox_keyword_.empty()) {
diff --git a/chrome/common/extensions/extension.h b/chrome/common/extensions/extension.h
index 58a57d8..7ed8c8c 100644
--- a/chrome/common/extensions/extension.h
+++ b/chrome/common/extensions/extension.h
@@ -112,6 +112,29 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
std::string mime_type;
};
+ enum InputComponentType {
+ INPUT_COMPONENT_TYPE_IME = 0,
+ INPUT_COMPONENT_TYPE_VIRTUAL_KEYBOARD,
+ INPUT_COMPONENT_TYPE_COUNT
+ };
+
+ struct InputComponentInfo {
+ // Define out of line constructor/destructor to please Clang.
+ InputComponentInfo();
+ ~InputComponentInfo();
+
+ std::string name;
+ InputComponentType type;
+ std::string id;
+ std::string description;
+ std::string language;
+ std::set<std::string> layouts;
+ std::string shortcut_keycode;
+ bool shortcut_alt;
+ bool shortcut_ctrl;
+ bool shortcut_shift;
+ };
+
struct TtsVoice {
std::string voice_name;
std::string locale;
@@ -599,6 +622,9 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
const std::vector<NaClModuleInfo>& nacl_modules() const {
return nacl_modules_;
}
+ const std::vector<InputComponentInfo>& input_components() const {
+ return input_components_;
+ }
const GURL& background_url() const { return background_url_; }
const GURL& options_url() const { return options_url_; }
const GURL& devtools_url() const { return devtools_url_; }
@@ -844,6 +870,9 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
// Optional list of NaCl modules and associated properties.
std::vector<NaClModuleInfo> nacl_modules_;
+ // Optional list of input components and associated properties.
+ std::vector<InputComponentInfo> input_components_;
+
// Optional URL to a master page of which a single instance should be always
// loaded in the background.
GURL background_url_;
diff --git a/chrome/common/extensions/extension_constants.cc b/chrome/common/extensions/extension_constants.cc
index b478bad..ab59539 100644
--- a/chrome/common/extensions/extension_constants.cc
+++ b/chrome/common/extensions/extension_constants.cc
@@ -7,6 +7,7 @@
namespace extension_manifest_keys {
const char* kAllFrames = "all_frames";
+const char* kAltKey = "altKey";
const char* kApp = "app";
const char* kBackground = "background_page";
const char* kBrowserAction = "browser_action";
@@ -15,6 +16,7 @@ const char* kContentScripts = "content_scripts";
const char* kContentSecurityPolicy = "content_security_policy";
const char* kConvertedFromUserScript = "converted_from_user_script";
const char* kCss = "css";
+const char* kCtrlKey = "ctrlKey";
const char* kCurrentLocale = "current_locale";
const char* kDefaultLocale = "default_locale";
const char* kDescription = "description";
@@ -25,16 +27,21 @@ const char* kFileFilters = "file_filters";
const char* kFileBrowserHandlers = "file_browser_handlers";
const char* kHomepageURL = "homepage_url";
const char* kIcons = "icons";
+const char* kId = "id";
const char* kIncognito = "incognito";
const char* kIncludeGlobs = "include_globs";
+const char* kInputComponents = "input_components";
const char* kIsolation = "app.isolation";
const char* kJs = "js";
+const char* kKeycode = "keyCode";
+const char* kLanguage = "language";
const char* kLaunch = "app.launch";
const char* kLaunchContainer = "app.launch.container";
const char* kLaunchHeight = "app.launch.height";
const char* kLaunchLocalPath = "app.launch.local_path";
const char* kLaunchWebURL = "app.launch.web_url";
const char* kLaunchWidth = "app.launch.width";
+const char* kLayouts = "layouts";
const char* kMatches = "matches";
const char* kMinimumChromeVersion = "minimum_chrome_version";
const char* kName = "name";
@@ -60,6 +67,8 @@ const char* kPluginsPath = "path";
const char* kPluginsPublic = "public";
const char* kPublicKey = "key";
const char* kRunAt = "run_at";
+const char* kShiftKey = "shiftKey";
+const char* kShortcutKey = "shortcutKey";
const char* kSidebar = "sidebar";
const char* kSidebarDefaultIcon = "default_icon";
const char* kSidebarDefaultPage = "default_page";
@@ -185,6 +194,22 @@ const char* kInvalidIcons =
"Invalid value for 'icons'.";
const char* kInvalidIncognitoBehavior =
"Invalid value for 'incognito'.";
+const char* kInvalidInputComponents =
+ "Invalid value for 'input_components'";
+const char* kInvalidInputComponentDescription =
+ "Invalid value for 'input_conponents[*].description";
+const char* kInvalidInputComponentLayoutName =
+ "Invalid value for 'input_conponents[*].layouts[*]";
+const char* kInvalidInputComponentLayouts =
+ "Invalid value for 'input_conponents[*].layouts";
+const char* kInvalidInputComponentName =
+ "Invalid value for 'input_conponents[*].name";
+const char* kInvalidInputComponentShortcutKey =
+ "Invalid value for 'input_conponents[*].shortcutKey";
+const char* kInvalidInputComponentShortcutKeycode =
+ "Invalid value for 'input_conponents[*].shortcutKey.keyCode";
+const char* kInvalidInputComponentType =
+ "Invalid value for 'input_conponents[*].type";
const char* kInvalidIsolation =
"Invalid value for 'app.isolation'.";
const char* kInvalidIsolationValue =
diff --git a/chrome/common/extensions/extension_constants.h b/chrome/common/extensions/extension_constants.h
index 62cb519..b104d5b 100644
--- a/chrome/common/extensions/extension_constants.h
+++ b/chrome/common/extensions/extension_constants.h
@@ -11,6 +11,7 @@
// Keys used in JSON representation of extensions.
namespace extension_manifest_keys {
extern const char* kAllFrames;
+ extern const char* kAltKey;
extern const char* kApp;
extern const char* kBackground;
extern const char* kBrowserAction;
@@ -20,6 +21,7 @@ namespace extension_manifest_keys {
extern const char* kContentSecurityPolicy;
extern const char* kConvertedFromUserScript;
extern const char* kCss;
+ extern const char* kCtrlKey;
extern const char* kCurrentLocale;
extern const char* kDefaultLocale;
extern const char* kDescription;
@@ -30,16 +32,21 @@ namespace extension_manifest_keys {
extern const char* kFileBrowserHandlers;
extern const char* kHomepageURL;
extern const char* kIcons;
+ extern const char* kId;
extern const char* kIncognito;
extern const char* kIncludeGlobs;
+ extern const char* kInputComponents;
extern const char* kIsolation;
extern const char* kJs;
+ extern const char* kKeycode;
+ extern const char* kLanguage;
extern const char* kLaunch;
extern const char* kLaunchContainer;
extern const char* kLaunchHeight;
extern const char* kLaunchLocalPath;
extern const char* kLaunchWebURL;
extern const char* kLaunchWidth;
+ extern const char* kLayouts;
extern const char* kMatches;
extern const char* kMinimumChromeVersion;
extern const char* kNaClModules;
@@ -65,6 +72,8 @@ namespace extension_manifest_keys {
extern const char* kPluginsPublic;
extern const char* kPublicKey;
extern const char* kRunAt;
+ extern const char* kShiftKey;
+ extern const char* kShortcutKey;
extern const char* kSidebar;
extern const char* kSidebarDefaultIcon;
extern const char* kSidebarDefaultPage;
@@ -147,6 +156,14 @@ namespace extension_manifest_errors {
extern const char* kInvalidIconPath;
extern const char* kInvalidIcons;
extern const char* kInvalidIncognitoBehavior;
+ extern const char* kInvalidInputComponents;
+ extern const char* kInvalidInputComponentDescription;
+ extern const char* kInvalidInputComponentLayoutName;
+ extern const char* kInvalidInputComponentLayouts;
+ extern const char* kInvalidInputComponentName;
+ extern const char* kInvalidInputComponentShortcutKey;
+ extern const char* kInvalidInputComponentShortcutKeycode;
+ extern const char* kInvalidInputComponentType;
extern const char* kInvalidIsolation;
extern const char* kInvalidIsolationValue;
extern const char* kInvalidJs;