| 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" |
| 11 #include "base/json/json_reader.h" | 11 #include "base/json/json_reader.h" |
| 12 #include "base/memory/ptr_util.h" | 12 #include "base/memory/ptr_util.h" |
| 13 #include "base/path_service.h" | 13 #include "base/path_service.h" |
| 14 #include "base/task_runner_util.h" | 14 #include "base/task_runner_util.h" |
| 15 #include "base/threading/thread_task_runner_handle.h" | 15 #include "base/threading/thread_task_runner_handle.h" |
| 16 #include "services/catalog/constants.h" | 16 #include "services/catalog/constants.h" |
| 17 #include "services/catalog/entry.h" | 17 #include "services/catalog/entry.h" |
| 18 #include "services/catalog/manifest_provider.h" | 18 #include "services/catalog/manifest_provider.h" |
| 19 #include "services/service_manager/public/cpp/names.h" | 19 #include "services/service_manager/public/cpp/names.h" |
| 20 | 20 |
| 21 namespace catalog { | 21 namespace catalog { |
| 22 namespace { | 22 namespace { |
| 23 | 23 |
| 24 base::FilePath GetManifestPath(const base::FilePath& package_dir, | 24 base::FilePath GetManifestPath(const base::FilePath& package_dir, |
| 25 const std::string& name, | 25 const std::string& name, |
| 26 const std::string& package_name_override) { | 26 const std::string& package_name_override) { |
| 27 // TODO(beng): think more about how this should be done for exe targets. | 27 // TODO(beng): think more about how this should be done for exe targets. |
| 28 std::string type = shell::GetNameType(name); | 28 std::string type = service_manager::GetNameType(name); |
| 29 std::string path = shell::GetNamePath(name); | 29 std::string path = service_manager::GetNamePath(name); |
| 30 if (type == shell::kNameType_Service) { | 30 if (type == service_manager::kNameType_Service) { |
| 31 std::string package_name; | 31 std::string package_name; |
| 32 if (package_name_override.empty()) | 32 if (package_name_override.empty()) |
| 33 package_name = path; | 33 package_name = path; |
| 34 else | 34 else |
| 35 package_name = package_name_override; | 35 package_name = package_name_override; |
| 36 return package_dir.AppendASCII(kPackagesDirName).AppendASCII( | 36 return package_dir.AppendASCII(kPackagesDirName).AppendASCII( |
| 37 package_name + "/manifest.json"); | 37 package_name + "/manifest.json"); |
| 38 } | 38 } |
| 39 if (type == shell::kNameType_Exe) | 39 if (type == service_manager::kNameType_Exe) |
| 40 return package_dir.AppendASCII(path + "_manifest.json"); | 40 return package_dir.AppendASCII(path + "_manifest.json"); |
| 41 return base::FilePath(); | 41 return base::FilePath(); |
| 42 } | 42 } |
| 43 | 43 |
| 44 base::FilePath GetExecutablePath(const base::FilePath& package_dir, | 44 base::FilePath GetExecutablePath(const base::FilePath& package_dir, |
| 45 const std::string& name) { | 45 const std::string& name) { |
| 46 std::string type = shell::GetNameType(name); | 46 std::string type = service_manager::GetNameType(name); |
| 47 if (type == shell::kNameType_Service) { | 47 if (type == service_manager::kNameType_Service) { |
| 48 // It's still a mojo: URL, use the default mapping scheme. | 48 // It's still a mojo: URL, use the default mapping scheme. |
| 49 const std::string host = shell::GetNamePath(name); | 49 const std::string host = service_manager::GetNamePath(name); |
| 50 return package_dir.AppendASCII(host + "/" + host + ".library"); | 50 return package_dir.AppendASCII(host + "/" + host + ".library"); |
| 51 } | 51 } |
| 52 if (type == shell::kNameType_Exe) { | 52 if (type == service_manager::kNameType_Exe) { |
| 53 #if defined OS_WIN | 53 #if defined OS_WIN |
| 54 std::string extension = ".exe"; | 54 std::string extension = ".exe"; |
| 55 #else | 55 #else |
| 56 std::string extension; | 56 std::string extension; |
| 57 #endif | 57 #endif |
| 58 return package_dir.AppendASCII(shell::GetNamePath(name) + extension); | 58 return package_dir.AppendASCII(service_manager::GetNamePath(name) + |
| 59 extension); |
| 59 } | 60 } |
| 60 return base::FilePath(); | 61 return base::FilePath(); |
| 61 } | 62 } |
| 62 | 63 |
| 63 std::unique_ptr<Entry> ProcessManifest( | 64 std::unique_ptr<Entry> ProcessManifest( |
| 64 std::unique_ptr<base::Value> manifest_root, | 65 std::unique_ptr<base::Value> manifest_root, |
| 65 const base::FilePath& package_dir) { | 66 const base::FilePath& package_dir) { |
| 66 // Manifest was malformed or did not exist. | 67 // Manifest was malformed or did not exist. |
| 67 if (!manifest_root) | 68 if (!manifest_root) |
| 68 return nullptr; | 69 return nullptr; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 return entry; | 150 return entry; |
| 150 } | 151 } |
| 151 | 152 |
| 152 void AddEntryToCache(EntryCache* cache, std::unique_ptr<Entry> entry) { | 153 void AddEntryToCache(EntryCache* cache, std::unique_ptr<Entry> entry) { |
| 153 std::vector<std::unique_ptr<Entry>> children = entry->TakeChildren(); | 154 std::vector<std::unique_ptr<Entry>> children = entry->TakeChildren(); |
| 154 for (auto& child : children) | 155 for (auto& child : children) |
| 155 AddEntryToCache(cache, std::move(child)); | 156 AddEntryToCache(cache, std::move(child)); |
| 156 (*cache)[entry->name()] = std::move(entry); | 157 (*cache)[entry->name()] = std::move(entry); |
| 157 } | 158 } |
| 158 | 159 |
| 159 void DoNothing(shell::mojom::ResolveResultPtr) {} | 160 void DoNothing(service_manager::mojom::ResolveResultPtr) {} |
| 160 | 161 |
| 161 } // namespace | 162 } // namespace |
| 162 | 163 |
| 163 // A sequenced task runner is used to guarantee requests are serviced in the | 164 // A sequenced task runner is used to guarantee requests are serviced in the |
| 164 // order requested. To do otherwise means we may run callbacks in an | 165 // order requested. To do otherwise means we may run callbacks in an |
| 165 // unpredictable order, leading to flake. | 166 // unpredictable order, leading to flake. |
| 166 Reader::Reader(base::SequencedWorkerPool* worker_pool, | 167 Reader::Reader(base::SequencedWorkerPool* worker_pool, |
| 167 ManifestProvider* manifest_provider) | 168 ManifestProvider* manifest_provider) |
| 168 : Reader(manifest_provider) { | 169 : Reader(manifest_provider) { |
| 169 file_task_runner_ = worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( | 170 file_task_runner_ = worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 : manifest_provider_(manifest_provider), weak_factory_(this) { | 245 : manifest_provider_(manifest_provider), weak_factory_(this) { |
| 245 PathService::Get(base::DIR_MODULE, &system_package_dir_); | 246 PathService::Get(base::DIR_MODULE, &system_package_dir_); |
| 246 } | 247 } |
| 247 | 248 |
| 248 void Reader::OnReadManifest( | 249 void Reader::OnReadManifest( |
| 249 EntryCache* cache, | 250 EntryCache* cache, |
| 250 const CreateEntryForNameCallback& entry_created_callback, | 251 const CreateEntryForNameCallback& entry_created_callback, |
| 251 std::unique_ptr<Entry> entry) { | 252 std::unique_ptr<Entry> entry) { |
| 252 if (!entry) | 253 if (!entry) |
| 253 return; | 254 return; |
| 254 shell::mojom::ResolveResultPtr result = | 255 service_manager::mojom::ResolveResultPtr result = |
| 255 shell::mojom::ResolveResult::From(*entry); | 256 service_manager::mojom::ResolveResult::From(*entry); |
| 256 AddEntryToCache(cache, std::move(entry)); | 257 AddEntryToCache(cache, std::move(entry)); |
| 257 entry_created_callback.Run(std::move(result)); | 258 entry_created_callback.Run(std::move(result)); |
| 258 } | 259 } |
| 259 | 260 |
| 260 } // namespace catalog | 261 } // namespace catalog |
| OLD | NEW |