| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "mojo/services/package_manager/package_manager.h" | 5 #include "mojo/services/package_manager/package_manager.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/json/json_file_value_serializer.h" | 8 #include "base/json/json_file_value_serializer.h" |
| 9 #include "base/strings/string_split.h" | 9 #include "base/strings/string_split.h" |
| 10 #include "base/task_runner_util.h" | 10 #include "base/task_runner_util.h" |
| 11 #include "mojo/common/url_type_converters.h" | 11 #include "mojo/common/url_type_converters.h" |
| 12 #include "mojo/shell/public/cpp/names.h" | 12 #include "mojo/shell/public/cpp/names.h" |
| 13 #include "mojo/util/filename_util.h" | 13 #include "mojo/util/filename_util.h" |
| 14 #include "net/base/filename_util.h" | 14 #include "net/base/filename_util.h" |
| 15 #include "url/url_util.h" | 15 #include "url/url_util.h" |
| 16 | 16 |
| 17 namespace package_manager { | 17 namespace package_manager { |
| 18 namespace { | 18 namespace { |
| 19 | 19 |
| 20 CapabilityFilter BuildCapabilityFilterFromDictionary( | 20 Capabilities BuildCapabilitiesFromDictionary( |
| 21 const base::DictionaryValue& value) { | 21 const base::DictionaryValue& value) { |
| 22 CapabilityFilter filter; | 22 Capabilities capabilities; |
| 23 |
| 24 const base::DictionaryValue* provided_value = nullptr; |
| 25 if (value.HasKey(ApplicationCatalogStore::kCapabilities_ProvidedKey)) { |
| 26 value.GetDictionary(ApplicationCatalogStore::kCapabilities_ProvidedKey, |
| 27 &provided_value); |
| 28 } |
| 29 if (provided_value) { |
| 30 base::DictionaryValue::Iterator it(provided_value); |
| 31 for (; !it.IsAtEnd(); it.Advance()) { |
| 32 const base::ListValue* values = nullptr; |
| 33 CHECK(it.value().GetAsList(&values)); |
| 34 mojo::caps::Interfaces interfaces; |
| 35 for (auto i = values->begin(); i != values->end(); ++i) { |
| 36 mojo::caps::Interface interface_name; |
| 37 const base::Value* v = *i; |
| 38 CHECK(v->GetAsString(&interface_name)); |
| 39 interfaces.insert(interface_name); |
| 40 } |
| 41 capabilities.provided[it.key] = interfaces; |
| 42 } |
| 43 } |
| 44 |
| 45 const base::DictionaryValue* required_value = nullptr; |
| 46 if (value.HasKey(ApplicationCatalogStore::kCapabilities_RequiredKey)) { |
| 47 value.GetDictionary(ApplicationCatalogStore::kCapabilities_RequiredKey, |
| 48 &required_value); |
| 49 } |
| 50 if (required_value) { |
| 51 base::DictionaryValue::Iterator it(required_value); |
| 52 for (; !it.IsAtEnd(); it.Advance()) { |
| 53 const base::DictionaryValue* |
| 54 } |
| 55 |
| 56 } |
| 57 |
| 58 |
| 59 |
| 60 /* |
| 23 base::DictionaryValue::Iterator it(value); | 61 base::DictionaryValue::Iterator it(value); |
| 24 for (; !it.IsAtEnd(); it.Advance()) { | 62 for (; !it.IsAtEnd(); it.Advance()) { |
| 25 const base::ListValue* values = nullptr; | 63 const base::ListValue* values = nullptr; |
| 26 CHECK(it.value().GetAsList(&values)); | 64 CHECK(it.value().GetAsList(&values)); |
| 27 AllowedInterfaces interfaces; | 65 AllowedInterfaces interfaces; |
| 28 for (auto i = values->begin(); i != values->end(); ++i) { | 66 for (auto i = values->begin(); i != values->end(); ++i) { |
| 29 std::string iface_name; | 67 std::string iface_name; |
| 30 const base::Value* v = *i; | 68 const base::Value* v = *i; |
| 31 CHECK(v->GetAsString(&iface_name)); | 69 CHECK(v->GetAsString(&iface_name)); |
| 32 interfaces.insert(iface_name); | 70 interfaces.insert(iface_name); |
| 33 } | 71 } |
| 34 filter[it.key()] = interfaces; | 72 filter[it.key()] = interfaces; |
| 35 } | 73 } |
| 36 return filter; | 74 */ |
| 75 return capabilities; |
| 37 } | 76 } |
| 38 | 77 |
| 39 ApplicationInfo BuildApplicationInfoFromDictionary( | 78 ApplicationInfo BuildApplicationInfoFromDictionary( |
| 40 const base::DictionaryValue& value) { | 79 const base::DictionaryValue& value) { |
| 41 ApplicationInfo info; | 80 ApplicationInfo info; |
| 42 std::string name_string; | 81 std::string name_string; |
| 43 CHECK(value.GetString(ApplicationCatalogStore::kNameKey, &name_string)); | 82 CHECK(value.GetString(ApplicationCatalogStore::kNameKey, &name_string)); |
| 44 CHECK(mojo::IsValidName(name_string)) << "Invalid Name: " << name_string; | 83 CHECK(mojo::IsValidName(name_string)) << "Invalid Name: " << name_string; |
| 45 info.name = name_string; | 84 info.name = name_string; |
| 46 if (value.HasKey(ApplicationCatalogStore::kQualifierKey)) { | 85 if (value.HasKey(ApplicationCatalogStore::kQualifierKey)) { |
| 47 CHECK(value.GetString(ApplicationCatalogStore::kQualifierKey, | 86 CHECK(value.GetString(ApplicationCatalogStore::kQualifierKey, |
| 48 &info.qualifier)); | 87 &info.qualifier)); |
| 49 } else { | 88 } else { |
| 50 info.qualifier = mojo::GetNamePath(name_string); | 89 info.qualifier = mojo::GetNamePath(name_string); |
| 51 } | 90 } |
| 52 CHECK(value.GetString(ApplicationCatalogStore::kDisplayNameKey, | 91 CHECK(value.GetString(ApplicationCatalogStore::kDisplayNameKey, |
| 53 &info.display_name)); | 92 &info.display_name)); |
| 54 const base::DictionaryValue* capabilities = nullptr; | 93 const base::DictionaryValue* capabilities = nullptr; |
| 55 CHECK(value.GetDictionary(ApplicationCatalogStore::kCapabilitiesKey, | 94 CHECK(value.GetDictionary(ApplicationCatalogStore::kCapabilitiesKey, |
| 56 &capabilities)); | 95 &capabilities)); |
| 57 info.base_filter = BuildCapabilityFilterFromDictionary(*capabilities); | 96 info.base_filter = BuildCapabilitiesFromDictionary(*capabilities); |
| 58 return info; | 97 return info; |
| 59 } | 98 } |
| 60 | 99 |
| 61 void SerializeEntry(const ApplicationInfo& entry, | 100 void SerializeEntry(const ApplicationInfo& entry, |
| 62 base::DictionaryValue** value) { | 101 base::DictionaryValue** value) { |
| 63 *value = new base::DictionaryValue; | 102 *value = new base::DictionaryValue; |
| 64 (*value)->SetString(ApplicationCatalogStore::kNameKey, entry.name); | 103 (*value)->SetString(ApplicationCatalogStore::kNameKey, entry.name); |
| 65 (*value)->SetString(ApplicationCatalogStore::kDisplayNameKey, | 104 (*value)->SetString(ApplicationCatalogStore::kDisplayNameKey, |
| 66 entry.display_name); | 105 entry.display_name); |
| 67 base::DictionaryValue* capabilities = new base::DictionaryValue; | 106 base::DictionaryValue* capabilities = new base::DictionaryValue; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 87 } // namespace | 126 } // namespace |
| 88 | 127 |
| 89 // static | 128 // static |
| 90 const char ApplicationCatalogStore::kNameKey[] = "name"; | 129 const char ApplicationCatalogStore::kNameKey[] = "name"; |
| 91 // static | 130 // static |
| 92 const char ApplicationCatalogStore::kQualifierKey[] = "process-group"; | 131 const char ApplicationCatalogStore::kQualifierKey[] = "process-group"; |
| 93 // static | 132 // static |
| 94 const char ApplicationCatalogStore::kDisplayNameKey[] = "display_name"; | 133 const char ApplicationCatalogStore::kDisplayNameKey[] = "display_name"; |
| 95 // static | 134 // static |
| 96 const char ApplicationCatalogStore::kCapabilitiesKey[] = "capabilities"; | 135 const char ApplicationCatalogStore::kCapabilitiesKey[] = "capabilities"; |
| 136 // static |
| 137 const char ApplicationCatalogStore::kCapabilities_ProvidedKey[] = "provided"; |
| 138 // static |
| 139 const char ApplicationCatalogStore::kCapabilities_RequiredKey[] = "required"; |
| 140 // static |
| 141 const char ApplicationCatalogStore::kCapabilities_InterfacesKey[] = |
| 142 "interfaces"; |
| 143 // static |
| 144 const char ApplicationCatalogStore::kCapabilities_ClassesKey[] = "classes"; |
| 97 | 145 |
| 98 ApplicationInfo::ApplicationInfo() {} | 146 ApplicationInfo::ApplicationInfo() {} |
| 99 ApplicationInfo::ApplicationInfo(const ApplicationInfo& other) = default; | 147 ApplicationInfo::ApplicationInfo(const ApplicationInfo& other) = default; |
| 100 ApplicationInfo::~ApplicationInfo() {} | 148 ApplicationInfo::~ApplicationInfo() {} |
| 101 | 149 |
| 102 PackageManager::PackageManager(base::TaskRunner* blocking_pool, | 150 PackageManager::PackageManager(base::TaskRunner* blocking_pool, |
| 103 scoped_ptr<ApplicationCatalogStore> catalog) | 151 scoped_ptr<ApplicationCatalogStore> catalog) |
| 104 : blocking_pool_(blocking_pool), | 152 : blocking_pool_(blocking_pool), |
| 105 catalog_store_(std::move(catalog)), | 153 catalog_store_(std::move(catalog)), |
| 106 weak_factory_(this) { | 154 weak_factory_(this) { |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 } | 395 } |
| 348 SerializeCatalog(); | 396 SerializeCatalog(); |
| 349 | 397 |
| 350 auto qualifier_iter = qualifiers_.find(name); | 398 auto qualifier_iter = qualifiers_.find(name); |
| 351 DCHECK(qualifier_iter != qualifiers_.end()); | 399 DCHECK(qualifier_iter != qualifiers_.end()); |
| 352 std::string qualifier = qualifier_iter->second; | 400 std::string qualifier = qualifier_iter->second; |
| 353 CompleteResolveMojoName(name, qualifier, callback); | 401 CompleteResolveMojoName(name, qualifier, callback); |
| 354 } | 402 } |
| 355 | 403 |
| 356 } // namespace package_manager | 404 } // namespace package_manager |
| OLD | NEW |