OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_worker/embedded_worker_instance.h" | 5 #include "content/browser/service_worker/embedded_worker_instance.h" |
6 | 6 |
| 7 #include <utility> |
| 8 |
7 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
8 #include "base/macros.h" | 10 #include "base/macros.h" |
9 #include "base/metrics/histogram_macros.h" | 11 #include "base/metrics/histogram_macros.h" |
10 #include "base/threading/non_thread_safe.h" | 12 #include "base/threading/non_thread_safe.h" |
11 #include "base/trace_event/trace_event.h" | 13 #include "base/trace_event/trace_event.h" |
12 #include "content/browser/devtools/service_worker_devtools_manager.h" | 14 #include "content/browser/devtools/service_worker_devtools_manager.h" |
13 #include "content/browser/service_worker/embedded_worker_registry.h" | 15 #include "content/browser/service_worker/embedded_worker_registry.h" |
14 #include "content/browser/service_worker/service_worker_context_core.h" | 16 #include "content/browser/service_worker/service_worker_context_core.h" |
15 #include "content/common/content_switches_internal.h" | 17 #include "content/common/content_switches_internal.h" |
16 #include "content/common/mojo/service_registry_impl.h" | 18 #include "content/common/mojo/service_registry_impl.h" |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 int process_id, | 81 int process_id, |
80 int thread_id, | 82 int thread_id, |
81 mojo::InterfaceRequest<mojo::ServiceProvider> services, | 83 mojo::InterfaceRequest<mojo::ServiceProvider> services, |
82 mojo::InterfacePtrInfo<mojo::ServiceProvider> exposed_services) { | 84 mojo::InterfacePtrInfo<mojo::ServiceProvider> exposed_services) { |
83 RenderProcessHost* rph = RenderProcessHost::FromID(process_id); | 85 RenderProcessHost* rph = RenderProcessHost::FromID(process_id); |
84 // |rph| or its ServiceRegistry may be NULL in unit tests. | 86 // |rph| or its ServiceRegistry may be NULL in unit tests. |
85 if (!rph || !rph->GetServiceRegistry()) | 87 if (!rph || !rph->GetServiceRegistry()) |
86 return; | 88 return; |
87 EmbeddedWorkerSetupPtr setup; | 89 EmbeddedWorkerSetupPtr setup; |
88 rph->GetServiceRegistry()->ConnectToRemoteService(mojo::GetProxy(&setup)); | 90 rph->GetServiceRegistry()->ConnectToRemoteService(mojo::GetProxy(&setup)); |
89 setup->ExchangeServiceProviders(thread_id, services.Pass(), | 91 setup->ExchangeServiceProviders(thread_id, std::move(services), |
90 mojo::MakeProxy(exposed_services.Pass())); | 92 mojo::MakeProxy(std::move(exposed_services))); |
91 } | 93 } |
92 | 94 |
93 } // namespace | 95 } // namespace |
94 | 96 |
95 // Lives on IO thread, proxies notifications to DevToolsManager that lives on | 97 // Lives on IO thread, proxies notifications to DevToolsManager that lives on |
96 // UI thread. Owned by EmbeddedWorkerInstance. | 98 // UI thread. Owned by EmbeddedWorkerInstance. |
97 class EmbeddedWorkerInstance::DevToolsProxy : public base::NonThreadSafe { | 99 class EmbeddedWorkerInstance::DevToolsProxy : public base::NonThreadSafe { |
98 public: | 100 public: |
99 DevToolsProxy(int process_id, int agent_route_id) | 101 DevToolsProxy(int process_id, int agent_route_id) |
100 : process_id_(process_id), | 102 : process_id_(process_id), |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 } | 258 } |
257 if (!instance) { | 259 if (!instance) { |
258 if (status == SERVICE_WORKER_OK) { | 260 if (status == SERVICE_WORKER_OK) { |
259 // We only have a process allocated if the status is OK. | 261 // We only have a process allocated if the status is OK. |
260 context->process_manager()->ReleaseWorkerProcess( | 262 context->process_manager()->ReleaseWorkerProcess( |
261 params->embedded_worker_id); | 263 params->embedded_worker_id); |
262 } | 264 } |
263 callback.Run(SERVICE_WORKER_ERROR_ABORT); | 265 callback.Run(SERVICE_WORKER_ERROR_ABORT); |
264 return; | 266 return; |
265 } | 267 } |
266 instance->ProcessAllocated(params.Pass(), callback, process_id, | 268 instance->ProcessAllocated(std::move(params), callback, process_id, |
267 is_new_process, status); | 269 is_new_process, status); |
268 } | 270 } |
269 | 271 |
270 void EmbeddedWorkerInstance::ProcessAllocated( | 272 void EmbeddedWorkerInstance::ProcessAllocated( |
271 scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params, | 273 scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params, |
272 const StatusCallback& callback, | 274 const StatusCallback& callback, |
273 int process_id, | 275 int process_id, |
274 bool is_new_process, | 276 bool is_new_process, |
275 ServiceWorkerStatusCode status) { | 277 ServiceWorkerStatusCode status) { |
276 DCHECK_EQ(process_id_, -1); | 278 DCHECK_EQ(process_id_, -1); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 } | 337 } |
336 UMA_HISTOGRAM_BOOLEAN("EmbeddedWorkerInstance.ProcessCreated", | 338 UMA_HISTOGRAM_BOOLEAN("EmbeddedWorkerInstance.ProcessCreated", |
337 is_new_process); | 339 is_new_process); |
338 // Reset |start_timing_| to measure the time excluding the process | 340 // Reset |start_timing_| to measure the time excluding the process |
339 // allocation time. | 341 // allocation time. |
340 start_timing_ = base::TimeTicks::Now(); | 342 start_timing_ = base::TimeTicks::Now(); |
341 } | 343 } |
342 | 344 |
343 starting_phase_ = SENT_START_WORKER; | 345 starting_phase_ = SENT_START_WORKER; |
344 ServiceWorkerStatusCode status = | 346 ServiceWorkerStatusCode status = |
345 registry_->SendStartWorker(params.Pass(), process_id_); | 347 registry_->SendStartWorker(std::move(params), process_id_); |
346 if (status != SERVICE_WORKER_OK) { | 348 if (status != SERVICE_WORKER_OK) { |
347 OnStartFailed(callback, status); | 349 OnStartFailed(callback, status); |
348 return; | 350 return; |
349 } | 351 } |
350 DCHECK(start_callback_.is_null()); | 352 DCHECK(start_callback_.is_null()); |
351 start_callback_ = callback; | 353 start_callback_ = callback; |
352 } | 354 } |
353 | 355 |
354 void EmbeddedWorkerInstance::OnReadyForInspection() { | 356 void EmbeddedWorkerInstance::OnReadyForInspection() { |
355 if (devtools_proxy_) | 357 if (devtools_proxy_) |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
390 mojo::ServiceProviderPtr exposed_services; | 392 mojo::ServiceProviderPtr exposed_services; |
391 service_registry_->Bind(GetProxy(&exposed_services)); | 393 service_registry_->Bind(GetProxy(&exposed_services)); |
392 mojo::ServiceProviderPtr services; | 394 mojo::ServiceProviderPtr services; |
393 mojo::InterfaceRequest<mojo::ServiceProvider> services_request = | 395 mojo::InterfaceRequest<mojo::ServiceProvider> services_request = |
394 GetProxy(&services); | 396 GetProxy(&services); |
395 BrowserThread::PostTask( | 397 BrowserThread::PostTask( |
396 BrowserThread::UI, FROM_HERE, | 398 BrowserThread::UI, FROM_HERE, |
397 base::Bind(SetupMojoOnUIThread, process_id_, thread_id_, | 399 base::Bind(SetupMojoOnUIThread, process_id_, thread_id_, |
398 base::Passed(&services_request), | 400 base::Passed(&services_request), |
399 base::Passed(exposed_services.PassInterface()))); | 401 base::Passed(exposed_services.PassInterface()))); |
400 service_registry_->BindRemoteServiceProvider(services.Pass()); | 402 service_registry_->BindRemoteServiceProvider(std::move(services)); |
401 } | 403 } |
402 | 404 |
403 void EmbeddedWorkerInstance::OnScriptLoadFailed() { | 405 void EmbeddedWorkerInstance::OnScriptLoadFailed() { |
404 FOR_EACH_OBSERVER(Listener, listener_list_, OnScriptLoadFailed()); | 406 FOR_EACH_OBSERVER(Listener, listener_list_, OnScriptLoadFailed()); |
405 } | 407 } |
406 | 408 |
407 void EmbeddedWorkerInstance::OnScriptEvaluated(bool success) { | 409 void EmbeddedWorkerInstance::OnScriptEvaluated(bool success) { |
408 starting_phase_ = SCRIPT_EVALUATED; | 410 starting_phase_ = SCRIPT_EVALUATED; |
409 if (start_callback_.is_null()) { | 411 if (start_callback_.is_null()) { |
410 DVLOG(1) << "Received unexpected OnScriptEvaluated message."; | 412 DVLOG(1) << "Received unexpected OnScriptEvaluated message."; |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
566 case SCRIPT_READ_FINISHED: | 568 case SCRIPT_READ_FINISHED: |
567 return "Script read finished"; | 569 return "Script read finished"; |
568 case STARTING_PHASE_MAX_VALUE: | 570 case STARTING_PHASE_MAX_VALUE: |
569 NOTREACHED(); | 571 NOTREACHED(); |
570 } | 572 } |
571 NOTREACHED() << phase; | 573 NOTREACHED() << phase; |
572 return std::string(); | 574 return std::string(); |
573 } | 575 } |
574 | 576 |
575 } // namespace content | 577 } // namespace content |
OLD | NEW |