| 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/reader.h" | 5 #include "services/catalog/reader.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/files/file_enumerator.h" | 8 #include "base/files/file_enumerator.h" |
| 9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
| 10 #include "base/json/json_file_value_serializer.h" | 10 #include "base/json/json_file_value_serializer.h" |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 } | 114 } |
| 115 | 115 |
| 116 original_thread_task_runner->PostTask( | 116 original_thread_task_runner->PostTask( |
| 117 FROM_HERE, | 117 FROM_HERE, |
| 118 base::Bind(read_manifest_callback, base::Passed(&entry))); | 118 base::Bind(read_manifest_callback, base::Passed(&entry))); |
| 119 } | 119 } |
| 120 | 120 |
| 121 original_thread_task_runner->PostTask(FROM_HERE, read_complete_closure); | 121 original_thread_task_runner->PostTask(FROM_HERE, read_complete_closure); |
| 122 } | 122 } |
| 123 | 123 |
| 124 std::unique_ptr<Entry> ReadManifest(const base::FilePath& package_dir, | 124 std::unique_ptr<Entry> ReadManifest( |
| 125 const std::string& mojo_name) { | 125 const base::FilePath& package_dir, |
| 126 std::unique_ptr<Entry> entry = CreateEntryForManifestAt( | 126 const std::string& mojo_name, |
| 127 GetManifestPath(package_dir, mojo_name), package_dir); | 127 const base::FilePath& manifest_path_override) { |
| 128 base::FilePath manifest_path; |
| 129 if (manifest_path_override.empty()) |
| 130 manifest_path = GetManifestPath(package_dir, mojo_name); |
| 131 else |
| 132 manifest_path = manifest_path_override; |
| 133 |
| 134 std::unique_ptr<Entry> entry = CreateEntryForManifestAt(manifest_path, |
| 135 package_dir); |
| 128 if (!entry) { | 136 if (!entry) { |
| 129 entry.reset(new Entry(mojo_name)); | 137 entry.reset(new Entry(mojo_name)); |
| 130 entry->set_path(GetExecutablePath( | 138 entry->set_path(GetExecutablePath( |
| 131 package_dir.AppendASCII(kPackagesDirName), mojo_name)); | 139 package_dir.AppendASCII(kPackagesDirName), mojo_name)); |
| 132 } | 140 } |
| 133 return entry; | 141 return entry; |
| 134 } | 142 } |
| 135 | 143 |
| 136 void AddEntryToCache(EntryCache* cache, std::unique_ptr<Entry> entry) { | 144 void AddEntryToCache(EntryCache* cache, std::unique_ptr<Entry> entry) { |
| 137 std::vector<std::unique_ptr<Entry>> children = entry->TakeChildren(); | 145 std::vector<std::unique_ptr<Entry>> children = entry->TakeChildren(); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 if (manifest_root) { | 193 if (manifest_root) { |
| 186 base::PostTaskAndReplyWithResult( | 194 base::PostTaskAndReplyWithResult( |
| 187 file_task_runner_.get(), FROM_HERE, | 195 file_task_runner_.get(), FROM_HERE, |
| 188 base::Bind(&ProcessManifest, base::Passed(&manifest_root), | 196 base::Bind(&ProcessManifest, base::Passed(&manifest_root), |
| 189 system_package_dir_), | 197 system_package_dir_), |
| 190 base::Bind(&Reader::OnReadManifest, weak_factory_.GetWeakPtr(), cache, | 198 base::Bind(&Reader::OnReadManifest, weak_factory_.GetWeakPtr(), cache, |
| 191 entry_created_callback)); | 199 entry_created_callback)); |
| 192 return; | 200 return; |
| 193 } | 201 } |
| 194 } | 202 } |
| 203 |
| 204 base::FilePath manifest_path_override; |
| 205 auto override_iter = manifest_path_overrides_.find(mojo_name); |
| 206 if (override_iter != manifest_path_overrides_.end()) |
| 207 manifest_path_override = override_iter->second; |
| 208 |
| 195 base::PostTaskAndReplyWithResult( | 209 base::PostTaskAndReplyWithResult( |
| 196 file_task_runner_.get(), FROM_HERE, | 210 file_task_runner_.get(), FROM_HERE, |
| 197 base::Bind(&ReadManifest, system_package_dir_, mojo_name), | 211 base::Bind(&ReadManifest, system_package_dir_, mojo_name, |
| 212 manifest_path_override), |
| 198 base::Bind(&Reader::OnReadManifest, weak_factory_.GetWeakPtr(), cache, | 213 base::Bind(&Reader::OnReadManifest, weak_factory_.GetWeakPtr(), cache, |
| 199 entry_created_callback)); | 214 entry_created_callback)); |
| 200 } | 215 } |
| 201 | 216 |
| 217 void Reader::OverrideManifestPath(const std::string& service_name, |
| 218 const base::FilePath& path) { |
| 219 manifest_path_overrides_.insert(std::make_pair(service_name, path)); |
| 220 } |
| 221 |
| 202 Reader::Reader(ManifestProvider* manifest_provider) | 222 Reader::Reader(ManifestProvider* manifest_provider) |
| 203 : manifest_provider_(manifest_provider), weak_factory_(this) { | 223 : manifest_provider_(manifest_provider), weak_factory_(this) { |
| 204 PathService::Get(base::DIR_MODULE, &system_package_dir_); | 224 PathService::Get(base::DIR_MODULE, &system_package_dir_); |
| 205 } | 225 } |
| 206 | 226 |
| 207 void Reader::OnReadManifest( | 227 void Reader::OnReadManifest( |
| 208 EntryCache* cache, | 228 EntryCache* cache, |
| 209 const CreateEntryForNameCallback& entry_created_callback, | 229 const CreateEntryForNameCallback& entry_created_callback, |
| 210 std::unique_ptr<Entry> entry) { | 230 std::unique_ptr<Entry> entry) { |
| 211 if (!entry) | 231 if (!entry) |
| 212 return; | 232 return; |
| 213 shell::mojom::ResolveResultPtr result = | 233 shell::mojom::ResolveResultPtr result = |
| 214 shell::mojom::ResolveResult::From(*entry); | 234 shell::mojom::ResolveResult::From(*entry); |
| 215 AddEntryToCache(cache, std::move(entry)); | 235 AddEntryToCache(cache, std::move(entry)); |
| 216 entry_created_callback.Run(std::move(result)); | 236 entry_created_callback.Run(std::move(result)); |
| 217 } | 237 } |
| 218 | 238 |
| 219 } // namespace catalog | 239 } // namespace catalog |
| OLD | NEW |