Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1286)

Unified Diff: chrome/browser/extensions/menu_manager.cc

Issue 10809094: Context Menus now uses the JSON Schema Compiler. (Closed) Base URL: http://git.chromium.org/chromium/src.git@json_functions_as_properties
Patch Set: made some minor changes Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/menu_manager.cc
diff --git a/chrome/browser/extensions/menu_manager.cc b/chrome/browser/extensions/menu_manager.cc
index 657d32a2ca12a8007eeb41ad6be74e96fef2a85c..7f4d3250282b31aaa96459c8b56e6e2f40184b3c 100644
--- a/chrome/browser/extensions/menu_manager.cc
+++ b/chrome/browser/extensions/menu_manager.cc
@@ -88,6 +88,26 @@ scoped_ptr<base::Value> MenuItemsToValue(const MenuItem::List& items) {
return scoped_ptr<Value>(list.release());
}
+bool GetStringList(const DictionaryValue& dict,
+ const std::string& key,
+ std::vector<std::string>* out) {
+ if (!dict.HasKey(key))
+ return true;
+
+ const ListValue* list = NULL;
+ if (!dict.GetListWithoutPathExpansion(key, &list))
+ return false;
+
+ for (size_t i = 0; i < list->GetSize(); ++i) {
+ std::string pattern;
+ if (!list->GetString(i, &pattern))
+ return false;
+ out->push_back(pattern);
+ }
+
+ return true;
+}
+
} // namespace
MenuItem::MenuItem(const Id& id,
@@ -203,14 +223,14 @@ MenuItem* MenuItem::Populate(const std::string& extension_id,
if (!value.GetString(kStringUIDKey, &id.string_uid))
return NULL;
int type_int;
- Type type;
+ Type type = NORMAL;
if (!value.GetInteger(kTypeKey, &type_int))
return NULL;
type = static_cast<Type>(type_int);
std::string title;
if (type != SEPARATOR && !value.GetString(kTitleKey, &title))
return NULL;
- bool checked;
+ bool checked = false;
if ((type == CHECKBOX || type == RADIO) &&
!value.GetBoolean(kCheckedKey, &checked)) {
return NULL;
@@ -228,9 +248,18 @@ MenuItem* MenuItem::Populate(const std::string& extension_id,
scoped_ptr<MenuItem> result(new MenuItem(
id, title, checked, enabled, type, contexts));
- if (!result->PopulateURLPatterns(
- value, kDocumentURLPatternsKey, kTargetURLPatternsKey, error))
+ std::vector<std::string> document_url_patterns;
+ if (!GetStringList(value, kDocumentURLPatternsKey, &document_url_patterns))
+ return NULL;
+ std::vector<std::string> target_url_patterns;
+ if (!GetStringList(value, kTargetURLPatternsKey, &target_url_patterns))
+ return NULL;
+
+ if (!result->PopulateURLPatterns(&document_url_patterns,
+ &target_url_patterns,
+ error)) {
return NULL;
+ }
// parent_id is filled in from the value, but it might not be valid. It's left
// to be validated upon being added (via AddChildItem) to the menu manager.
@@ -243,25 +272,19 @@ MenuItem* MenuItem::Populate(const std::string& extension_id,
return result.release();
}
-bool MenuItem::PopulateURLPatterns(const DictionaryValue& properties,
- const char* document_url_patterns_key,
- const char* target_url_patterns_key,
- std::string* error) {
- if (properties.HasKey(document_url_patterns_key)) {
- const ListValue* list = NULL;
- if (!properties.GetList(document_url_patterns_key, &list))
- return false;
+bool MenuItem::PopulateURLPatterns(
+ std::vector<std::string>* document_url_patterns,
+ std::vector<std::string>* target_url_patterns,
+ std::string* error) {
+ if (document_url_patterns) {
if (!document_url_patterns_.Populate(
- *list, URLPattern::SCHEME_ALL, true, error)) {
+ *document_url_patterns, URLPattern::SCHEME_ALL, true, error)) {
return false;
}
}
- if (properties.HasKey(target_url_patterns_key)) {
- const ListValue* list = NULL;
- if (!properties.GetList(target_url_patterns_key, &list))
- return false;
+ if (target_url_patterns) {
if (!target_url_patterns_.Populate(
- *list, URLPattern::SCHEME_ALL, true, error)) {
+ *target_url_patterns, URLPattern::SCHEME_ALL, true, error)) {
return false;
}
}

Powered by Google App Engine
This is Rietveld 408576698