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 |