| Index: mojo/services/catalog/catalog.cc
|
| diff --git a/mojo/services/catalog/catalog.cc b/mojo/services/catalog/catalog.cc
|
| index 6e7423ab998dd2a202e405342092eefe1e691fb7..6d5518c91b1a4156abfe66b2f9c70df3073ae565 100644
|
| --- a/mojo/services/catalog/catalog.cc
|
| +++ b/mojo/services/catalog/catalog.cc
|
| @@ -9,6 +9,9 @@
|
| #include "base/strings/string_split.h"
|
| #include "base/task_runner_util.h"
|
| #include "mojo/common/url_type_converters.h"
|
| +#include "mojo/services/catalog/builder.h"
|
| +#include "mojo/services/catalog/entry.h"
|
| +#include "mojo/services/catalog/store.h"
|
| #include "mojo/shell/public/cpp/names.h"
|
| #include "mojo/util/filename_util.h"
|
| #include "net/base/filename_util.h"
|
| @@ -17,59 +20,6 @@
|
| namespace catalog {
|
| namespace {
|
|
|
| -CapabilityFilter BuildCapabilityFilterFromDictionary(
|
| - const base::DictionaryValue& value) {
|
| - CapabilityFilter filter;
|
| - base::DictionaryValue::Iterator it(value);
|
| - for (; !it.IsAtEnd(); it.Advance()) {
|
| - const base::ListValue* values = nullptr;
|
| - CHECK(it.value().GetAsList(&values));
|
| - AllowedInterfaces interfaces;
|
| - for (auto i = values->begin(); i != values->end(); ++i) {
|
| - std::string iface_name;
|
| - const base::Value* v = *i;
|
| - CHECK(v->GetAsString(&iface_name));
|
| - interfaces.insert(iface_name);
|
| - }
|
| - filter[it.key()] = interfaces;
|
| - }
|
| - return filter;
|
| -}
|
| -
|
| -ApplicationInfo BuildApplicationInfoFromDictionary(
|
| - const base::DictionaryValue& value) {
|
| - ApplicationInfo info;
|
| - std::string name_string;
|
| - CHECK(value.GetString(Store::kNameKey, &name_string));
|
| - CHECK(mojo::IsValidName(name_string)) << "Invalid Name: " << name_string;
|
| - info.name = name_string;
|
| - if (value.HasKey(Store::kQualifierKey)) {
|
| - CHECK(value.GetString(Store::kQualifierKey, &info.qualifier));
|
| - } else {
|
| - info.qualifier = mojo::GetNamePath(name_string);
|
| - }
|
| - CHECK(value.GetString(Store::kDisplayNameKey, &info.display_name));
|
| - const base::DictionaryValue* capabilities = nullptr;
|
| - CHECK(value.GetDictionary(Store::kCapabilitiesKey, &capabilities));
|
| - info.base_filter = BuildCapabilityFilterFromDictionary(*capabilities);
|
| - return info;
|
| -}
|
| -
|
| -void SerializeEntry(const ApplicationInfo& entry,
|
| - base::DictionaryValue** value) {
|
| - *value = new base::DictionaryValue;
|
| - (*value)->SetString(Store::kNameKey, entry.name);
|
| - (*value)->SetString(Store::kDisplayNameKey, entry.display_name);
|
| - base::DictionaryValue* capabilities = new base::DictionaryValue;
|
| - for (const auto& pair : entry.base_filter) {
|
| - scoped_ptr<base::ListValue> interfaces(new base::ListValue);
|
| - for (const auto& iface_name : pair.second)
|
| - interfaces->AppendString(iface_name);
|
| - capabilities->Set(pair.first, std::move(interfaces));
|
| - }
|
| - (*value)->Set(Store::kCapabilitiesKey, make_scoped_ptr(capabilities));
|
| -}
|
| -
|
| scoped_ptr<base::Value> ReadManifest(const base::FilePath& manifest_path) {
|
| JSONFileValueDeserializer deserializer(manifest_path);
|
| int error = 0;
|
| @@ -81,19 +31,6 @@ scoped_ptr<base::Value> ReadManifest(const base::FilePath& manifest_path) {
|
|
|
| } // namespace
|
|
|
| -// static
|
| -const char Store::kNameKey[] = "name";
|
| -// static
|
| -const char Store::kQualifierKey[] = "process-group";
|
| -// static
|
| -const char Store::kDisplayNameKey[] = "display_name";
|
| -// static
|
| -const char Store::kCapabilitiesKey[] = "capabilities";
|
| -
|
| -ApplicationInfo::ApplicationInfo() {}
|
| -ApplicationInfo::ApplicationInfo(const ApplicationInfo& other) = default;
|
| -ApplicationInfo::~ApplicationInfo() {}
|
| -
|
| Catalog::Catalog(base::TaskRunner* blocking_pool,
|
| scoped_ptr<Store> catalog)
|
| : blocking_pool_(blocking_pool),
|
| @@ -180,10 +117,10 @@ void Catalog::GetEntries(mojo::Array<mojo::String> names,
|
| for (const std::string& name : names_vec) {
|
| if (catalog_.find(name) == catalog_.end())
|
| continue;
|
| - const ApplicationInfo& info = catalog_[name];
|
| - mojom::CatalogEntryPtr entry(mojom::CatalogEntry::New());
|
| - entry->display_name = info.display_name;
|
| - entries[info.name] = std::move(entry);
|
| + const Entry& entry = catalog_[name];
|
| + mojom::CatalogEntryPtr entry_ptr(mojom::CatalogEntry::New());
|
| + entry_ptr->display_name = entry.display_name;
|
| + entries[entry.name] = std::move(entry_ptr);
|
| }
|
| callback.Run(std::move(entries));
|
| }
|
| @@ -192,8 +129,8 @@ void Catalog::CompleteResolveMojoName(
|
| const std::string& resolved_name,
|
| const std::string& qualifier,
|
| const ResolveMojoNameCallback& callback) {
|
| - auto info_iter = catalog_.find(resolved_name);
|
| - CHECK(info_iter != catalog_.end());
|
| + auto entry_iter = catalog_.find(resolved_name);
|
| + CHECK(entry_iter != catalog_.end());
|
|
|
| GURL file_url;
|
| std::string type = mojo::GetNameType(resolved_name);
|
| @@ -214,7 +151,7 @@ void Catalog::CompleteResolveMojoName(
|
| mojo::shell::mojom::CapabilityFilterPtr filter(
|
| mojo::shell::mojom::CapabilityFilter::New());
|
| filter->filter = mojo::Map<mojo::String, mojo::Array<mojo::String>>();
|
| - for (const auto& entry : info_iter->second.base_filter) {
|
| + for (const auto& entry : entry_iter->second.capabilities) {
|
| mojo::Array<mojo::String> interfaces;
|
| for (auto interface_name : entry.second)
|
| interfaces.push_back(interface_name);
|
| @@ -259,43 +196,42 @@ void Catalog::DeserializeCatalog() {
|
| const base::DictionaryValue* dictionary = nullptr;
|
| const base::Value* v = *it;
|
| CHECK(v->GetAsDictionary(&dictionary));
|
| - const ApplicationInfo app_info =
|
| - BuildApplicationInfoFromDictionary(*dictionary);
|
| - catalog_[app_info.name] = app_info;
|
| + const Entry entry = BuildEntry(*dictionary);
|
| + catalog_[entry.name] = entry;
|
| }
|
| }
|
|
|
| void Catalog::SerializeCatalog() {
|
| scoped_ptr<base::ListValue> catalog(new base::ListValue);
|
| - for (const auto& info : catalog_) {
|
| + for (const auto& entry : catalog_) {
|
| base::DictionaryValue* dictionary = nullptr;
|
| - SerializeEntry(info.second, &dictionary);
|
| + SerializeEntry(entry.second, &dictionary);
|
| catalog->Append(make_scoped_ptr(dictionary));
|
| }
|
| if (store_)
|
| store_->UpdateStore(std::move(catalog));
|
| }
|
|
|
| -const ApplicationInfo& Catalog::DeserializeApplication(
|
| +const Entry& Catalog::DeserializeApplication(
|
| const base::DictionaryValue* dictionary) {
|
| - ApplicationInfo info = BuildApplicationInfoFromDictionary(*dictionary);
|
| - if (catalog_.find(info.name) == catalog_.end()) {
|
| - catalog_[info.name] = info;
|
| + Entry entry = BuildEntry(*dictionary);
|
| + if (catalog_.find(entry.name) == catalog_.end()) {
|
| + catalog_[entry.name] = entry;
|
|
|
| if (dictionary->HasKey("applications")) {
|
| const base::ListValue* applications = nullptr;
|
| dictionary->GetList("applications", &applications);
|
| for (size_t i = 0; i < applications->GetSize(); ++i) {
|
| - const base::DictionaryValue* child = nullptr;
|
| - applications->GetDictionary(i, &child);
|
| - const ApplicationInfo& child_info = DeserializeApplication(child);
|
| - mojo_name_aliases_[child_info.name] =
|
| - std::make_pair(info.name, child_info.qualifier);
|
| + const base::DictionaryValue* child_value = nullptr;
|
| + applications->GetDictionary(i, &child_value);
|
| + const Entry& child = DeserializeApplication(child_value);
|
| + mojo_name_aliases_[child.name] =
|
| + std::make_pair(entry.name, child.qualifier);
|
| }
|
| }
|
| - qualifiers_[info.name] = info.qualifier;
|
| + qualifiers_[entry.name] = entry.qualifier;
|
| }
|
| - return catalog_[info.name];
|
| + return catalog_[entry.name];
|
| }
|
|
|
| GURL Catalog::GetManifestURL(const std::string& name) {
|
| @@ -331,11 +267,11 @@ void Catalog::OnReadManifestImpl(const std::string& name,
|
| CHECK(manifest->GetAsDictionary(&dictionary));
|
| DeserializeApplication(dictionary);
|
| } else {
|
| - ApplicationInfo info;
|
| - info.name = name;
|
| - info.display_name = name;
|
| - catalog_[info.name] = info;
|
| - qualifiers_[info.name] = mojo::GetNamePath(name);
|
| + Entry entry;
|
| + entry.name = name;
|
| + entry.display_name = name;
|
| + catalog_[entry.name] = entry;
|
| + qualifiers_[entry.name] = mojo::GetNamePath(name);
|
| }
|
| SerializeCatalog();
|
|
|
|
|