Index: mojo/services/package_manager/package_manager.cc |
diff --git a/mojo/services/package_manager/package_manager.cc b/mojo/services/package_manager/package_manager.cc |
index 139f95a7250101763bdb5a8a12b41ed59c85146f..106a4911d106cea30e0d2a3d524c372ea14863df 100644 |
--- a/mojo/services/package_manager/package_manager.cc |
+++ b/mojo/services/package_manager/package_manager.cc |
@@ -17,9 +17,47 @@ |
namespace package_manager { |
namespace { |
-CapabilityFilter BuildCapabilityFilterFromDictionary( |
+Capabilities BuildCapabilitiesFromDictionary( |
const base::DictionaryValue& value) { |
- CapabilityFilter filter; |
+ Capabilities capabilities; |
+ |
+ const base::DictionaryValue* provided_value = nullptr; |
+ if (value.HasKey(ApplicationCatalogStore::kCapabilities_ProvidedKey)) { |
+ value.GetDictionary(ApplicationCatalogStore::kCapabilities_ProvidedKey, |
+ &provided_value); |
+ } |
+ if (provided_value) { |
+ base::DictionaryValue::Iterator it(provided_value); |
+ for (; !it.IsAtEnd(); it.Advance()) { |
+ const base::ListValue* values = nullptr; |
+ CHECK(it.value().GetAsList(&values)); |
+ mojo::caps::Interfaces interfaces; |
+ for (auto i = values->begin(); i != values->end(); ++i) { |
+ mojo::caps::Interface interface_name; |
+ const base::Value* v = *i; |
+ CHECK(v->GetAsString(&interface_name)); |
+ interfaces.insert(interface_name); |
+ } |
+ capabilities.provided[it.key] = interfaces; |
+ } |
+ } |
+ |
+ const base::DictionaryValue* required_value = nullptr; |
+ if (value.HasKey(ApplicationCatalogStore::kCapabilities_RequiredKey)) { |
+ value.GetDictionary(ApplicationCatalogStore::kCapabilities_RequiredKey, |
+ &required_value); |
+ } |
+ if (required_value) { |
+ base::DictionaryValue::Iterator it(required_value); |
+ for (; !it.IsAtEnd(); it.Advance()) { |
+ const base::DictionaryValue* |
+ } |
+ |
+ } |
+ |
+ |
+ |
+ /* |
base::DictionaryValue::Iterator it(value); |
for (; !it.IsAtEnd(); it.Advance()) { |
const base::ListValue* values = nullptr; |
@@ -33,7 +71,8 @@ CapabilityFilter BuildCapabilityFilterFromDictionary( |
} |
filter[it.key()] = interfaces; |
} |
- return filter; |
+ */ |
+ return capabilities; |
} |
ApplicationInfo BuildApplicationInfoFromDictionary( |
@@ -54,7 +93,7 @@ ApplicationInfo BuildApplicationInfoFromDictionary( |
const base::DictionaryValue* capabilities = nullptr; |
CHECK(value.GetDictionary(ApplicationCatalogStore::kCapabilitiesKey, |
&capabilities)); |
- info.base_filter = BuildCapabilityFilterFromDictionary(*capabilities); |
+ info.base_filter = BuildCapabilitiesFromDictionary(*capabilities); |
return info; |
} |
@@ -94,6 +133,15 @@ const char ApplicationCatalogStore::kQualifierKey[] = "process-group"; |
const char ApplicationCatalogStore::kDisplayNameKey[] = "display_name"; |
// static |
const char ApplicationCatalogStore::kCapabilitiesKey[] = "capabilities"; |
+// static |
+const char ApplicationCatalogStore::kCapabilities_ProvidedKey[] = "provided"; |
+// static |
+const char ApplicationCatalogStore::kCapabilities_RequiredKey[] = "required"; |
+// static |
+const char ApplicationCatalogStore::kCapabilities_InterfacesKey[] = |
+ "interfaces"; |
+// static |
+const char ApplicationCatalogStore::kCapabilities_ClassesKey[] = "classes"; |
ApplicationInfo::ApplicationInfo() {} |
ApplicationInfo::ApplicationInfo(const ApplicationInfo& other) = default; |