Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Unified Diff: mojo/services/catalog/catalog.cc

Issue 1828733004: Load application manifests from resources (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/services/catalog/catalog.cc
diff --git a/mojo/services/catalog/catalog.cc b/mojo/services/catalog/catalog.cc
index 66a651dd70b0b82289cfdfd8bcbe516201a28c4a..a2b2df0769165a2cd16cd5eae560784487ae7fda 100644
--- a/mojo/services/catalog/catalog.cc
+++ b/mojo/services/catalog/catalog.cc
@@ -7,6 +7,7 @@
#include "base/bind.h"
#include "base/strings/string_split.h"
#include "base/task_runner_util.h"
+#include "base/thread_task_runner_handle.h"
#include "mojo/common/url_type_converters.h"
#include "mojo/services/catalog/entry.h"
#include "mojo/services/catalog/store.h"
@@ -20,8 +21,11 @@ namespace catalog {
////////////////////////////////////////////////////////////////////////////////
// Catalog, public:
-Catalog::Catalog(base::TaskRunner* blocking_pool, scoped_ptr<Store> store)
- : store_(std::move(store)),
+Catalog::Catalog(base::TaskRunner* blocking_pool,
+ scoped_ptr<Store> store,
+ Delegate* delegate)
+ : delegate_(delegate),
+ store_(std::move(store)),
weak_factory_(this) {
PathService::Get(base::DIR_MODULE, &package_path_);
reader_.reset(new Reader(package_path_, blocking_pool));
@@ -85,9 +89,22 @@ void Catalog::ResolveMojoName(const mojo::String& mojo_name,
if (IsNameInCatalog(resolved_name)) {
CompleteResolveMojoName(resolved_name, qualifier, callback);
} else {
- reader_->Read(resolved_name,
- base::Bind(&Catalog::OnReadEntry, weak_factory_.GetWeakPtr(),
- resolved_name, callback));
+ std::string manifest_contents;
+ if (delegate_ &&
+ delegate_->GetApplicationManifest(resolved_name, &manifest_contents)) {
+ // We don't invoke the callback synchronously in this case to avoid
+ // surprising the caller with possible re-entry.
+ scoped_ptr<Entry> entry = reader_->Parse(manifest_contents);
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE,
+ base::Bind(&Catalog::OnReadEntry, weak_factory_.GetWeakPtr(),
+ resolved_name, callback, base::Passed(&entry)));
+ } else {
+ reader_->Read(
+ resolved_name,
+ base::Bind(&Catalog::OnReadEntry, weak_factory_.GetWeakPtr(),
+ resolved_name, callback));
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698