Index: services/catalog/reader.cc |
diff --git a/services/catalog/reader.cc b/services/catalog/reader.cc |
index 220f691ba1e84a7edf3a2b467a51e9eb5a265618..9515cea17e47f60cf5f2457d4a6e9fb235d7cc1f 100644 |
--- a/services/catalog/reader.cc |
+++ b/services/catalog/reader.cc |
@@ -121,10 +121,18 @@ void ScanDir( |
original_thread_task_runner->PostTask(FROM_HERE, read_complete_closure); |
} |
-std::unique_ptr<Entry> ReadManifest(const base::FilePath& package_dir, |
- const std::string& mojo_name) { |
- std::unique_ptr<Entry> entry = CreateEntryForManifestAt( |
- GetManifestPath(package_dir, mojo_name), package_dir); |
+std::unique_ptr<Entry> ReadManifest( |
+ const base::FilePath& package_dir, |
+ const std::string& mojo_name, |
+ const base::FilePath& manifest_path_override) { |
+ base::FilePath manifest_path; |
+ if (manifest_path_override.empty()) |
+ manifest_path = GetManifestPath(package_dir, mojo_name); |
+ else |
+ manifest_path = manifest_path_override; |
+ |
+ std::unique_ptr<Entry> entry = CreateEntryForManifestAt(manifest_path, |
+ package_dir); |
if (!entry) { |
entry.reset(new Entry(mojo_name)); |
entry->set_path(GetExecutablePath( |
@@ -192,13 +200,25 @@ void Reader::CreateEntryForName( |
return; |
} |
} |
+ |
+ base::FilePath manifest_path_override; |
+ auto override_iter = manifest_path_overrides_.find(mojo_name); |
+ if (override_iter != manifest_path_overrides_.end()) |
+ manifest_path_override = override_iter->second; |
+ |
base::PostTaskAndReplyWithResult( |
file_task_runner_.get(), FROM_HERE, |
- base::Bind(&ReadManifest, system_package_dir_, mojo_name), |
+ base::Bind(&ReadManifest, system_package_dir_, mojo_name, |
+ manifest_path_override), |
base::Bind(&Reader::OnReadManifest, weak_factory_.GetWeakPtr(), cache, |
entry_created_callback)); |
} |
+void Reader::OverrideManifestPath(const std::string& service_name, |
+ const base::FilePath& path) { |
+ manifest_path_overrides_.insert(std::make_pair(service_name, path)); |
+} |
+ |
Reader::Reader(ManifestProvider* manifest_provider) |
: manifest_provider_(manifest_provider), weak_factory_(this) { |
PathService::Get(base::DIR_MODULE, &system_package_dir_); |