Index: services/catalog/instance.cc |
diff --git a/services/catalog/instance.cc b/services/catalog/instance.cc |
index dd177ef8c4e078bb5ae0d502763676e289c0f861..348106b7eb1db41d68a83fdc3e02a7fc7601e1f7 100644 |
--- a/services/catalog/instance.cc |
+++ b/services/catalog/instance.cc |
@@ -4,11 +4,13 @@ |
#include "services/catalog/instance.h" |
+#include <memory> |
+ |
#include "base/bind.h" |
+#include "base/values.h" |
#include "services/catalog/entry.h" |
#include "services/catalog/entry_cache.h" |
#include "services/catalog/manifest_provider.h" |
-#include "services/catalog/reader.h" |
namespace catalog { |
namespace { |
@@ -22,30 +24,19 @@ void AddEntry(const Entry& entry, std::vector<mojom::EntryPtr>* ary) { |
} // namespace |
-Instance::Instance(Reader* system_reader) : system_reader_(system_reader) {} |
+Instance::Instance(EntryCache* system_cache, |
+ ManifestProvider* service_manifest_provider) |
+ : system_cache_(system_cache), |
+ service_manifest_provider_(service_manifest_provider) {} |
Instance::~Instance() {} |
void Instance::BindResolver(service_manager::mojom::ResolverRequest request) { |
- if (system_cache_) |
- resolver_bindings_.AddBinding(this, std::move(request)); |
- else |
- pending_resolver_requests_.push_back(std::move(request)); |
+ resolver_bindings_.AddBinding(this, std::move(request)); |
} |
void Instance::BindCatalog(mojom::CatalogRequest request) { |
- if (system_cache_) |
- catalog_bindings_.AddBinding(this, std::move(request)); |
- else |
- pending_catalog_requests_.push_back(std::move(request)); |
-} |
- |
-void Instance::CacheReady(EntryCache* cache) { |
- system_cache_ = cache; |
- for (auto& request : pending_resolver_requests_) |
- BindResolver(std::move(request)); |
- for (auto& request : pending_catalog_requests_) |
- BindCatalog(std::move(request)); |
+ catalog_bindings_.AddBinding(this, std::move(request)); |
} |
void Instance::ResolveServiceName(const std::string& service_name, |
@@ -58,9 +49,27 @@ void Instance::ResolveServiceName(const std::string& service_name, |
callback.Run(service_manager::mojom::ResolveResult::From(entry), |
service_manager::mojom::ResolveResult::From(entry->parent())); |
return; |
+ } else if (service_manifest_provider_) { |
+ auto manifest = service_manifest_provider_->GetManifest(service_name); |
+ if (manifest) { |
+ auto entry = Entry::Deserialize(*manifest); |
+ if (entry) { |
+ callback.Run( |
+ service_manager::mojom::ResolveResult::From( |
+ const_cast<const Entry*>(entry.get())), |
+ service_manager::mojom::ResolveResult::From(entry->parent())); |
+ |
+ bool added = system_cache_->AddRootEntry(std::move(entry)); |
+ DCHECK(added); |
+ return; |
+ } else { |
+ LOG(ERROR) << "Received malformed manifest for " << service_name; |
+ } |
+ } |
} |
- system_reader_->CreateEntryForName(service_name, system_cache_, callback); |
+ LOG(ERROR) << "Unable to locate service manifest for " << service_name; |
+ callback.Run(nullptr, nullptr); |
} |
void Instance::GetEntries(const base::Optional<std::vector<std::string>>& names, |