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/mojo/mojo_shell_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 |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/json/json_reader.h" | 12 #include "base/json/json_reader.h" |
13 #include "base/lazy_instance.h" | 13 #include "base/lazy_instance.h" |
14 #include "base/macros.h" | 14 #include "base/macros.h" |
15 #include "base/memory/ptr_util.h" | 15 #include "base/memory/ptr_util.h" |
16 #include "base/single_thread_task_runner.h" | 16 #include "base/single_thread_task_runner.h" |
17 #include "content/browser/gpu/gpu_process_host.h" | 17 #include "content/browser/gpu/gpu_process_host.h" |
18 #include "content/browser/mojo/merge_dictionary.h" | 18 #include "content/browser/service_manager/merge_dictionary.h" |
19 #include "content/common/mojo/mojo_shell_connection_impl.h" | 19 #include "content/common/mojo/mojo_shell_connection_impl.h" |
20 #include "content/grit/content_resources.h" | 20 #include "content/grit/content_resources.h" |
21 #include "content/public/browser/browser_thread.h" | 21 #include "content/public/browser/browser_thread.h" |
22 #include "content/public/browser/content_browser_client.h" | 22 #include "content/public/browser/content_browser_client.h" |
23 #include "content/public/browser/utility_process_host.h" | 23 #include "content/public/browser/utility_process_host.h" |
24 #include "content/public/browser/utility_process_host_client.h" | 24 #include "content/public/browser/utility_process_host_client.h" |
25 #include "content/public/common/content_client.h" | 25 #include "content/public/common/content_client.h" |
26 #include "content/public/common/mojo_shell_connection.h" | 26 #include "content/public/common/mojo_shell_connection.h" |
27 #include "content/public/common/service_names.h" | 27 #include "content/public/common/service_names.h" |
28 #include "mojo/edk/embedder/embedder.h" | 28 #include "mojo/edk/embedder/embedder.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 } | 125 } |
126 | 126 |
127 std::map<std::string, std::unique_ptr<base::Value>> manifests_; | 127 std::map<std::string, std::unique_ptr<base::Value>> manifests_; |
128 | 128 |
129 DISALLOW_COPY_AND_ASSIGN(BuiltinManifestProvider); | 129 DISALLOW_COPY_AND_ASSIGN(BuiltinManifestProvider); |
130 }; | 130 }; |
131 | 131 |
132 } // namespace | 132 } // namespace |
133 | 133 |
134 // State which lives on the IO thread and drives the ServiceManager. | 134 // State which lives on the IO thread and drives the ServiceManager. |
135 class MojoShellContext::InProcessServiceManagerContext | 135 class ServiceManagerContext::InProcessServiceManagerContext |
136 : public base::RefCountedThreadSafe<InProcessServiceManagerContext> { | 136 : public base::RefCountedThreadSafe<InProcessServiceManagerContext> { |
137 public: | 137 public: |
138 InProcessServiceManagerContext() {} | 138 InProcessServiceManagerContext() {} |
139 | 139 |
140 shell::mojom::ServiceRequest Start( | 140 shell::mojom::ServiceRequest Start( |
141 std::unique_ptr<BuiltinManifestProvider> manifest_provider) { | 141 std::unique_ptr<BuiltinManifestProvider> manifest_provider) { |
142 shell::mojom::ServicePtr embedder_service_proxy; | 142 shell::mojom::ServicePtr embedder_service_proxy; |
143 shell::mojom::ServiceRequest embedder_service_request = | 143 shell::mojom::ServiceRequest embedder_service_request = |
144 mojo::GetProxy(&embedder_service_proxy); | 144 mojo::GetProxy(&embedder_service_proxy); |
145 shell::mojom::ServicePtrInfo embedder_service_proxy_info = | 145 shell::mojom::ServicePtrInfo embedder_service_proxy_info = |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 manifest_provider_.reset(); | 188 manifest_provider_.reset(); |
189 } | 189 } |
190 | 190 |
191 std::unique_ptr<BuiltinManifestProvider> manifest_provider_; | 191 std::unique_ptr<BuiltinManifestProvider> manifest_provider_; |
192 std::unique_ptr<catalog::Catalog> catalog_; | 192 std::unique_ptr<catalog::Catalog> catalog_; |
193 std::unique_ptr<shell::ServiceManager> service_manager_; | 193 std::unique_ptr<shell::ServiceManager> service_manager_; |
194 | 194 |
195 DISALLOW_COPY_AND_ASSIGN(InProcessServiceManagerContext); | 195 DISALLOW_COPY_AND_ASSIGN(InProcessServiceManagerContext); |
196 }; | 196 }; |
197 | 197 |
198 MojoShellContext::MojoShellContext() { | 198 ServiceManagerContext::ServiceManagerContext() { |
199 shell::mojom::ServiceRequest request; | 199 shell::mojom::ServiceRequest request; |
200 if (shell::ShellIsRemote()) { | 200 if (shell::ShellIsRemote()) { |
201 mojo::edk::SetParentPipeHandleFromCommandLine(); | 201 mojo::edk::SetParentPipeHandleFromCommandLine(); |
202 request = shell::GetServiceRequestFromCommandLine(); | 202 request = shell::GetServiceRequestFromCommandLine(); |
203 } else { | 203 } else { |
204 std::unique_ptr<BuiltinManifestProvider> manifest_provider = | 204 std::unique_ptr<BuiltinManifestProvider> manifest_provider = |
205 base::MakeUnique<BuiltinManifestProvider>(); | 205 base::MakeUnique<BuiltinManifestProvider>(); |
206 | 206 |
207 static const struct ManifestInfo { | 207 static const struct ManifestInfo { |
208 const char* name; | 208 const char* name; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 std::move(request), | 244 std::move(request), |
245 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO))); | 245 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO))); |
246 | 246 |
247 ContentBrowserClient::StaticMojoApplicationMap apps; | 247 ContentBrowserClient::StaticMojoApplicationMap apps; |
248 GetContentClient()->browser()->RegisterInProcessMojoApplications(&apps); | 248 GetContentClient()->browser()->RegisterInProcessMojoApplications(&apps); |
249 for (const auto& entry : apps) { | 249 for (const auto& entry : apps) { |
250 MojoShellConnection::GetForProcess()->AddEmbeddedService(entry.first, | 250 MojoShellConnection::GetForProcess()->AddEmbeddedService(entry.first, |
251 entry.second); | 251 entry.second); |
252 } | 252 } |
253 | 253 |
254 // This is safe to assign directly from any thread, because MojoShellContext | 254 // This is safe to assign directly from any thread, because |
255 // must be constructed before anyone can call GetConnectorForIOThread(). | 255 // ServiceManagerContext must be constructed before anyone can call |
| 256 // GetConnectorForIOThread(). |
256 g_io_thread_connector.Get() = | 257 g_io_thread_connector.Get() = |
257 MojoShellConnection::GetForProcess()->GetConnector()->Clone(); | 258 MojoShellConnection::GetForProcess()->GetConnector()->Clone(); |
258 | 259 |
259 MojoShellConnection::GetForProcess()->Start(); | 260 MojoShellConnection::GetForProcess()->Start(); |
260 | 261 |
261 ContentBrowserClient::OutOfProcessMojoApplicationMap sandboxed_apps; | 262 ContentBrowserClient::OutOfProcessMojoApplicationMap sandboxed_apps; |
262 GetContentClient() | 263 GetContentClient() |
263 ->browser() | 264 ->browser() |
264 ->RegisterOutOfProcessMojoApplications(&sandboxed_apps); | 265 ->RegisterOutOfProcessMojoApplications(&sandboxed_apps); |
265 for (const auto& app : sandboxed_apps) { | 266 for (const auto& app : sandboxed_apps) { |
(...skipping 13 matching lines...) Expand all Loading... |
279 base::Bind(&StartServiceInUtilityProcess, app.first, app.second, | 280 base::Bind(&StartServiceInUtilityProcess, app.first, app.second, |
280 false /* use_sandbox */)); | 281 false /* use_sandbox */)); |
281 } | 282 } |
282 | 283 |
283 #if (ENABLE_MOJO_MEDIA_IN_GPU_PROCESS) | 284 #if (ENABLE_MOJO_MEDIA_IN_GPU_PROCESS) |
284 MojoShellConnection::GetForProcess()->AddServiceRequestHandler( | 285 MojoShellConnection::GetForProcess()->AddServiceRequestHandler( |
285 "service:media", base::Bind(&StartServiceInGpuProcess, "service:media")); | 286 "service:media", base::Bind(&StartServiceInGpuProcess, "service:media")); |
286 #endif | 287 #endif |
287 } | 288 } |
288 | 289 |
289 MojoShellContext::~MojoShellContext() { | 290 ServiceManagerContext::~ServiceManagerContext() { |
290 // NOTE: The in-process ServiceManager MUST be destroyed before the browser | 291 // NOTE: The in-process ServiceManager MUST be destroyed before the browser |
291 // process-wide MojoShellConnection. Otherwise it's possible for the | 292 // process-wide MojoShellConnection. Otherwise it's possible for the |
292 // ServiceManager to receive connection requests for service:content_browser | 293 // ServiceManager to receive connection requests for service:content_browser |
293 // which it may attempt to service by launching a new instance of the browser. | 294 // which it may attempt to service by launching a new instance of the browser. |
294 if (in_process_context_) | 295 if (in_process_context_) |
295 in_process_context_->ShutDown(); | 296 in_process_context_->ShutDown(); |
296 if (MojoShellConnection::GetForProcess()) | 297 if (MojoShellConnection::GetForProcess()) |
297 MojoShellConnection::DestroyForProcess(); | 298 MojoShellConnection::DestroyForProcess(); |
298 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 299 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
299 base::Bind(&DestroyConnectorOnIOThread)); | 300 base::Bind(&DestroyConnectorOnIOThread)); |
300 } | 301 } |
301 | 302 |
302 // static | 303 // static |
303 shell::Connector* MojoShellContext::GetConnectorForIOThread() { | 304 shell::Connector* ServiceManagerContext::GetConnectorForIOThread() { |
304 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 305 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
305 return g_io_thread_connector.Get().get(); | 306 return g_io_thread_connector.Get().get(); |
306 } | 307 } |
307 | 308 |
308 } // namespace content | 309 } // namespace content |
OLD | NEW |