| 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 "services/catalog/entry.h" | 5 #include "services/catalog/entry.h" |
| 6 | 6 |
| 7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
| 8 #include "base/values.h" | 8 #include "base/values.h" |
| 9 #include "services/catalog/store.h" | 9 #include "services/catalog/store.h" |
| 10 #include "services/service_manager/public/cpp/names.h" | 10 #include "services/service_manager/public/cpp/names.h" |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 } | 92 } |
| 93 } | 93 } |
| 94 return true; | 94 return true; |
| 95 } | 95 } |
| 96 | 96 |
| 97 } // namespace | 97 } // namespace |
| 98 | 98 |
| 99 Entry::Entry() {} | 99 Entry::Entry() {} |
| 100 Entry::Entry(const std::string& name) | 100 Entry::Entry(const std::string& name) |
| 101 : name_(name), | 101 : name_(name), |
| 102 qualifier_(service_manager::GetNamePath(name)), | |
| 103 display_name_(name) {} | 102 display_name_(name) {} |
| 104 Entry::~Entry() {} | 103 Entry::~Entry() {} |
| 105 | 104 |
| 106 std::unique_ptr<base::DictionaryValue> Entry::Serialize() const { | 105 std::unique_ptr<base::DictionaryValue> Entry::Serialize() const { |
| 107 auto value = base::MakeUnique<base::DictionaryValue>(); | 106 auto value = base::MakeUnique<base::DictionaryValue>(); |
| 108 value->SetString(Store::kNameKey, name_); | 107 value->SetString(Store::kNameKey, name_); |
| 109 value->SetString(Store::kDisplayNameKey, display_name_); | 108 value->SetString(Store::kDisplayNameKey, display_name_); |
| 110 value->SetString(Store::kQualifierKey, qualifier_); | |
| 111 | 109 |
| 112 auto specs = base::MakeUnique<base::DictionaryValue>(); | 110 auto specs = base::MakeUnique<base::DictionaryValue>(); |
| 113 for (const auto& it : interface_provider_specs_) { | 111 for (const auto& it : interface_provider_specs_) { |
| 114 auto spec = base::MakeUnique<base::DictionaryValue>(); | 112 auto spec = base::MakeUnique<base::DictionaryValue>(); |
| 115 | 113 |
| 116 auto provides = base::MakeUnique<base::DictionaryValue>(); | 114 auto provides = base::MakeUnique<base::DictionaryValue>(); |
| 117 for (const auto& i : it.second.provides) { | 115 for (const auto& i : it.second.provides) { |
| 118 auto interfaces = base::MakeUnique<base::ListValue>(); | 116 auto interfaces = base::MakeUnique<base::ListValue>(); |
| 119 for (const auto& interface_name : i.second) | 117 for (const auto& interface_name : i.second) |
| 120 interfaces->AppendString(interface_name); | 118 interfaces->AppendString(interface_name); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 147 << Store::kNameKey << " key"; | 145 << Store::kNameKey << " key"; |
| 148 return nullptr; | 146 return nullptr; |
| 149 } | 147 } |
| 150 if (!service_manager::IsValidName(name_string)) { | 148 if (!service_manager::IsValidName(name_string)) { |
| 151 LOG(ERROR) << "Entry::Deserialize: " << name_string << " is not a valid " | 149 LOG(ERROR) << "Entry::Deserialize: " << name_string << " is not a valid " |
| 152 << "Mojo name"; | 150 << "Mojo name"; |
| 153 return nullptr; | 151 return nullptr; |
| 154 } | 152 } |
| 155 entry->set_name(name_string); | 153 entry->set_name(name_string); |
| 156 | 154 |
| 157 // Process group. | |
| 158 if (value.HasKey(Store::kQualifierKey)) { | |
| 159 std::string qualifier; | |
| 160 if (!value.GetString(Store::kQualifierKey, &qualifier)) { | |
| 161 LOG(ERROR) << "Entry::Deserialize: " << Store::kQualifierKey << " must " | |
| 162 << "be a string."; | |
| 163 return nullptr; | |
| 164 } | |
| 165 entry->set_qualifier(qualifier); | |
| 166 } else { | |
| 167 entry->set_qualifier(service_manager::GetNamePath(name_string)); | |
| 168 } | |
| 169 | |
| 170 // Human-readable name. | 155 // Human-readable name. |
| 171 std::string display_name; | 156 std::string display_name; |
| 172 if (!value.GetString(Store::kDisplayNameKey, &display_name)) { | 157 if (!value.GetString(Store::kDisplayNameKey, &display_name)) { |
| 173 LOG(ERROR) << "Entry::Deserialize: dictionary has no " | 158 LOG(ERROR) << "Entry::Deserialize: dictionary has no " |
| 174 << Store::kDisplayNameKey << " key"; | 159 << Store::kDisplayNameKey << " key"; |
| 175 return nullptr; | 160 return nullptr; |
| 176 } | 161 } |
| 177 entry->set_display_name(display_name); | 162 entry->set_display_name(display_name); |
| 178 | 163 |
| 179 // InterfaceProvider specs. | 164 // InterfaceProvider specs. |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 service_manager::mojom::kServiceManager_ConnectorSpec); | 211 service_manager::mojom::kServiceManager_ConnectorSpec); |
| 227 if (it == interface_provider_specs_.end()) | 212 if (it == interface_provider_specs_.end()) |
| 228 return false; | 213 return false; |
| 229 | 214 |
| 230 auto connection_spec = it->second; | 215 auto connection_spec = it->second; |
| 231 return connection_spec.provides.find(capability) != | 216 return connection_spec.provides.find(capability) != |
| 232 connection_spec.provides.end(); | 217 connection_spec.provides.end(); |
| 233 } | 218 } |
| 234 | 219 |
| 235 bool Entry::operator==(const Entry& other) const { | 220 bool Entry::operator==(const Entry& other) const { |
| 236 return other.name_ == name_ && other.qualifier_ == qualifier_ && | 221 return other.name_ == name_ && |
| 237 other.display_name_ == display_name_ && | 222 other.display_name_ == display_name_ && |
| 238 other.interface_provider_specs_ == interface_provider_specs_; | 223 other.interface_provider_specs_ == interface_provider_specs_; |
| 239 } | 224 } |
| 240 | 225 |
| 241 void Entry::AddInterfaceProviderSpec( | 226 void Entry::AddInterfaceProviderSpec( |
| 242 const std::string& name, | 227 const std::string& name, |
| 243 const service_manager::InterfaceProviderSpec& spec) { | 228 const service_manager::InterfaceProviderSpec& spec) { |
| 244 interface_provider_specs_[name] = spec; | 229 interface_provider_specs_[name] = spec; |
| 245 } | 230 } |
| 246 | 231 |
| 247 } // catalog | 232 } // catalog |
| 248 | 233 |
| 249 namespace mojo { | 234 namespace mojo { |
| 250 | 235 |
| 251 // static | 236 // static |
| 252 service_manager::mojom::ResolveResultPtr | 237 service_manager::mojom::ResolveResultPtr |
| 253 TypeConverter<service_manager::mojom::ResolveResultPtr, | 238 TypeConverter<service_manager::mojom::ResolveResultPtr, |
| 254 catalog::Entry>::Convert(const catalog::Entry& input) { | 239 catalog::Entry>::Convert(const catalog::Entry& input) { |
| 255 service_manager::mojom::ResolveResultPtr result( | 240 service_manager::mojom::ResolveResultPtr result( |
| 256 service_manager::mojom::ResolveResult::New()); | 241 service_manager::mojom::ResolveResult::New()); |
| 257 result->name = input.name(); | 242 result->name = input.name(); |
| 258 const catalog::Entry& package = input.package() ? *input.package() : input; | 243 const catalog::Entry& package = input.package() ? *input.package() : input; |
| 259 result->resolved_name = package.name(); | 244 result->resolved_name = package.name(); |
| 260 result->qualifier = input.qualifier(); | |
| 261 result->interface_provider_specs = input.interface_provider_specs(); | 245 result->interface_provider_specs = input.interface_provider_specs(); |
| 262 if (input.package()) { | 246 if (input.package()) { |
| 263 auto it = package.interface_provider_specs().find( | 247 auto it = package.interface_provider_specs().find( |
| 264 service_manager::mojom::kServiceManager_ConnectorSpec); | 248 service_manager::mojom::kServiceManager_ConnectorSpec); |
| 265 if (it != package.interface_provider_specs().end()) | 249 if (it != package.interface_provider_specs().end()) |
| 266 result->package_spec = it->second; | 250 result->package_spec = it->second; |
| 267 } | 251 } |
| 268 result->package_path = package.path(); | 252 result->package_path = package.path(); |
| 269 return result; | 253 return result; |
| 270 } | 254 } |
| 271 | 255 |
| 272 // static | 256 // static |
| 273 catalog::mojom::EntryPtr | 257 catalog::mojom::EntryPtr |
| 274 TypeConverter<catalog::mojom::EntryPtr, catalog::Entry>::Convert( | 258 TypeConverter<catalog::mojom::EntryPtr, catalog::Entry>::Convert( |
| 275 const catalog::Entry& input) { | 259 const catalog::Entry& input) { |
| 276 catalog::mojom::EntryPtr result(catalog::mojom::Entry::New()); | 260 catalog::mojom::EntryPtr result(catalog::mojom::Entry::New()); |
| 277 result->name = input.name(); | 261 result->name = input.name(); |
| 278 result->display_name = input.display_name(); | 262 result->display_name = input.display_name(); |
| 279 return result; | 263 return result; |
| 280 } | 264 } |
| 281 | 265 |
| 282 } // namespace mojo | 266 } // namespace mojo |
| OLD | NEW |