OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "content/browser/service_manager/service_manager_context.h" | 5 #include "content/browser/service_manager/service_manager_context.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <string> | 8 #include <string> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
106 | 106 |
107 #endif // ENABLE_MOJO_MEDIA_IN_GPU_PROCESS | 107 #endif // ENABLE_MOJO_MEDIA_IN_GPU_PROCESS |
108 | 108 |
109 // A ManifestProvider which resolves application names to builtin manifest | 109 // A ManifestProvider which resolves application names to builtin manifest |
110 // resources for the catalog service to consume. | 110 // resources for the catalog service to consume. |
111 class BuiltinManifestProvider : public catalog::ManifestProvider { | 111 class BuiltinManifestProvider : public catalog::ManifestProvider { |
112 public: | 112 public: |
113 BuiltinManifestProvider() {} | 113 BuiltinManifestProvider() {} |
114 ~BuiltinManifestProvider() override {} | 114 ~BuiltinManifestProvider() override {} |
115 | 115 |
116 void AddManifestValue(const std::string& name, | 116 void AddServiceManifest(std::string name, int resource_id) { |
dcheng
2016/12/19 05:03:25
If you're feeling ambitious, StringPiece is probab
Sam McNally
2016/12/19 09:36:18
Done.
| |
117 std::unique_ptr<base::Value> manifest_contents) { | 117 std::string contents = |
118 GetContentClient() | |
119 ->GetDataResource(resource_id, ui::ScaleFactor::SCALE_FACTOR_NONE) | |
120 .as_string(); | |
121 DCHECK(!contents.empty()); | |
122 | |
123 std::unique_ptr<base::Value> manifest_value = | |
124 base::JSONReader::Read(contents); | |
125 DCHECK(manifest_value); | |
126 | |
127 std::unique_ptr<base::Value> overlay_value = | |
128 GetContentClient()->browser()->GetServiceManifestOverlay(name); | |
129 if (overlay_value) { | |
130 base::DictionaryValue* manifest_dictionary = nullptr; | |
131 bool result = manifest_value->GetAsDictionary(&manifest_dictionary); | |
132 DCHECK(result); | |
133 base::DictionaryValue* overlay_dictionary = nullptr; | |
134 result = overlay_value->GetAsDictionary(&overlay_dictionary); | |
135 DCHECK(result); | |
136 MergeDictionary(manifest_dictionary, overlay_dictionary); | |
137 } | |
138 | |
118 auto result = manifests_.insert( | 139 auto result = manifests_.insert( |
119 std::make_pair(name, std::move(manifest_contents))); | 140 std::make_pair(std::move(name), std::move(manifest_value))); |
120 DCHECK(result.second) << "Duplicate manifest entry: " << name; | 141 DCHECK(result.second) << "Duplicate manifest entry: " << name; |
121 } | 142 } |
122 | 143 |
123 private: | 144 private: |
124 // catalog::ManifestProvider: | 145 // catalog::ManifestProvider: |
125 std::unique_ptr<base::Value> GetManifest(const std::string& name) override { | 146 std::unique_ptr<base::Value> GetManifest(const std::string& name) override { |
126 auto it = manifests_.find(name); | 147 auto it = manifests_.find(name); |
127 return it != manifests_.end() ? it->second->CreateDeepCopy() : nullptr; | 148 return it != manifests_.end() ? it->second->CreateDeepCopy() : nullptr; |
128 } | 149 } |
129 | 150 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
230 { mojom::kBrowserServiceName, IDR_MOJO_CONTENT_BROWSER_MANIFEST }, | 251 { mojom::kBrowserServiceName, IDR_MOJO_CONTENT_BROWSER_MANIFEST }, |
231 { mojom::kGpuServiceName, IDR_MOJO_CONTENT_GPU_MANIFEST }, | 252 { mojom::kGpuServiceName, IDR_MOJO_CONTENT_GPU_MANIFEST }, |
232 { mojom::kPluginServiceName, IDR_MOJO_CONTENT_PLUGIN_MANIFEST }, | 253 { mojom::kPluginServiceName, IDR_MOJO_CONTENT_PLUGIN_MANIFEST }, |
233 { mojom::kRendererServiceName, IDR_MOJO_CONTENT_RENDERER_MANIFEST }, | 254 { mojom::kRendererServiceName, IDR_MOJO_CONTENT_RENDERER_MANIFEST }, |
234 { mojom::kUtilityServiceName, IDR_MOJO_CONTENT_UTILITY_MANIFEST }, | 255 { mojom::kUtilityServiceName, IDR_MOJO_CONTENT_UTILITY_MANIFEST }, |
235 { catalog::mojom::kServiceName, IDR_MOJO_CATALOG_MANIFEST }, | 256 { catalog::mojom::kServiceName, IDR_MOJO_CATALOG_MANIFEST }, |
236 { file::mojom::kServiceName, IDR_MOJO_FILE_MANIFEST } | 257 { file::mojom::kServiceName, IDR_MOJO_FILE_MANIFEST } |
237 }; | 258 }; |
238 | 259 |
239 for (size_t i = 0; i < arraysize(kManifests); ++i) { | 260 for (size_t i = 0; i < arraysize(kManifests); ++i) { |
240 std::string contents = GetContentClient()->GetDataResource( | 261 manifest_provider->AddServiceManifest(kManifests[i].name, |
241 kManifests[i].resource_id, | 262 kManifests[i].resource_id); |
242 ui::ScaleFactor::SCALE_FACTOR_NONE).as_string(); | 263 } |
243 base::debug::Alias(&i); | 264 for (const auto& manifest : |
244 CHECK(!contents.empty()); | 265 GetContentClient()->browser()->GetExtraServiceManifests()) { |
245 | 266 manifest_provider->AddServiceManifest(std::move(manifest.name), |
246 std::unique_ptr<base::Value> manifest_value = | 267 manifest.resource_id); |
247 base::JSONReader::Read(contents); | |
248 base::debug::Alias(&contents); | |
249 CHECK(manifest_value); | |
250 | |
251 std::unique_ptr<base::Value> overlay_value = | |
252 GetContentClient()->browser()->GetServiceManifestOverlay( | |
253 kManifests[i].name); | |
254 if (overlay_value) { | |
255 base::DictionaryValue* manifest_dictionary = nullptr; | |
256 CHECK(manifest_value->GetAsDictionary(&manifest_dictionary)); | |
257 base::DictionaryValue* overlay_dictionary = nullptr; | |
258 CHECK(overlay_value->GetAsDictionary(&overlay_dictionary)); | |
259 MergeDictionary(manifest_dictionary, overlay_dictionary); | |
260 } | |
261 | |
262 manifest_provider->AddManifestValue(kManifests[i].name, | |
263 std::move(manifest_value)); | |
264 } | 268 } |
265 in_process_context_ = new InProcessServiceManagerContext; | 269 in_process_context_ = new InProcessServiceManagerContext; |
266 request = in_process_context_->Start(std::move(manifest_provider)); | 270 request = in_process_context_->Start(std::move(manifest_provider)); |
267 } | 271 } |
268 ServiceManagerConnection::SetForProcess(ServiceManagerConnection::Create( | 272 ServiceManagerConnection::SetForProcess(ServiceManagerConnection::Create( |
269 std::move(request), | 273 std::move(request), |
270 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO))); | 274 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO))); |
271 | 275 |
272 ContentBrowserClient::StaticServiceMap services; | 276 ContentBrowserClient::StaticServiceMap services; |
273 GetContentClient()->browser()->RegisterInProcessServices(&services); | 277 GetContentClient()->browser()->RegisterInProcessServices(&services); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
325 base::Bind(&DestroyConnectorOnIOThread)); | 329 base::Bind(&DestroyConnectorOnIOThread)); |
326 } | 330 } |
327 | 331 |
328 // static | 332 // static |
329 service_manager::Connector* ServiceManagerContext::GetConnectorForIOThread() { | 333 service_manager::Connector* ServiceManagerContext::GetConnectorForIOThread() { |
330 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 334 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
331 return g_io_thread_connector.Get().get(); | 335 return g_io_thread_connector.Get().get(); |
332 } | 336 } |
333 | 337 |
334 } // namespace content | 338 } // namespace content |
OLD | NEW |