Chromium Code Reviews| Index: content/browser/service_worker/embedded_worker_instance.cc |
| diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc |
| index 1e78b20545b3cc5244ac2099cd7d5179a9716d06..b607f52ec83c6e86ce3e129c92efd8c63c41a931 100644 |
| --- a/content/browser/service_worker/embedded_worker_instance.cc |
| +++ b/content/browser/service_worker/embedded_worker_instance.cc |
| @@ -20,11 +20,14 @@ |
| #include "content/common/service_worker/embedded_worker_messages.h" |
| #include "content/common/service_worker/embedded_worker_settings.h" |
| #include "content/common/service_worker/embedded_worker_setup.mojom.h" |
| +#include "content/common/service_worker/embedded_worker_start_params.h" |
| #include "content/common/service_worker/service_worker_types.h" |
| +#include "content/common/service_worker/service_worker_utils.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/content_browser_client.h" |
| #include "content/public/browser/render_process_host.h" |
| #include "content/public/common/child_process_host.h" |
| +#include "content/public/common/content_switches.h" |
| #include "ipc/ipc_message.h" |
| #include "services/shell/public/cpp/interface_provider.h" |
| #include "services/shell/public/cpp/interface_registry.h" |
| @@ -69,7 +72,7 @@ void NotifyWorkerVersionDoomedOnUI(int worker_process_id, int worker_route_id) { |
| worker_process_id, worker_route_id); |
| } |
| -void RegisterToWorkerDevToolsManagerOnUI( |
| +void SetupOnUI( |
| int process_id, |
| const ServiceWorkerContextCore* service_worker_context, |
| const base::WeakPtr<ServiceWorkerContextCore>& service_worker_context_weak, |
| @@ -77,6 +80,7 @@ void RegisterToWorkerDevToolsManagerOnUI( |
| const GURL& url, |
| const GURL& scope, |
| bool is_installed, |
| + mojom::EmbeddedWorkerInstanceClientRequest request, |
| const base::Callback<void(int worker_devtools_agent_route_id, |
| bool wait_for_debugger)>& callback) { |
| DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| @@ -92,6 +96,8 @@ void RegisterToWorkerDevToolsManagerOnUI( |
| service_worker_context, service_worker_context_weak, |
| service_worker_version_id, url, scope), |
| is_installed); |
| + if (request.is_pending()) |
| + rph->GetRemoteInterfaces()->GetInterface(std::move(request)); |
| } |
| BrowserThread::PostTask( |
| BrowserThread::IO, |
| @@ -211,8 +217,11 @@ class EmbeddedWorkerInstance::StartTask { |
| public: |
| enum class ProcessAllocationState { NOT_ALLOCATED, ALLOCATING, ALLOCATED }; |
| - StartTask(EmbeddedWorkerInstance* instance, const GURL& script_url) |
| + StartTask(EmbeddedWorkerInstance* instance, |
| + const GURL& script_url, |
| + mojom::EmbeddedWorkerInstanceClientRequest request) |
| : instance_(instance), |
| + request_(std::move(request)), |
| state_(ProcessAllocationState::NOT_ALLOCATED), |
| is_installed_(false), |
| started_during_browser_startup_(false), |
| @@ -254,7 +263,7 @@ class EmbeddedWorkerInstance::StartTask { |
| // TODO(nhiroki): Reconsider this bizarre layering. |
| } |
| - void Start(std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params, |
| + void Start(std::unique_ptr<EmbeddedWorkerStartParams> params, |
| const StatusCallback& callback) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| state_ = ProcessAllocationState::ALLOCATING; |
| @@ -289,12 +298,11 @@ class EmbeddedWorkerInstance::StartTask { |
| bool is_installed() const { return is_installed_; } |
| private: |
| - void OnProcessAllocated( |
| - std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params, |
| - ServiceWorkerStatusCode status, |
| - int process_id, |
| - bool is_new_process, |
| - const EmbeddedWorkerSettings& settings) { |
| + void OnProcessAllocated(std::unique_ptr<EmbeddedWorkerStartParams> params, |
| + ServiceWorkerStatusCode status, |
| + int process_id, |
| + bool is_new_process, |
| + const EmbeddedWorkerSettings& settings) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| if (status != SERVICE_WORKER_OK) { |
| @@ -342,23 +350,22 @@ class EmbeddedWorkerInstance::StartTask { |
| GURL script_url(params->script_url); |
| BrowserThread::PostTask( |
| BrowserThread::UI, FROM_HERE, |
| - base::Bind(RegisterToWorkerDevToolsManagerOnUI, process_id, |
| - instance_->context_.get(), instance_->context_, |
| - service_worker_version_id, script_url, scope, is_installed_, |
| - base::Bind(&StartTask::OnRegisteredToDevToolsManager, |
| + base::Bind(&SetupOnUI, process_id, instance_->context_.get(), |
| + instance_->context_, service_worker_version_id, script_url, |
| + scope, is_installed_, base::Passed(&request_), |
| + base::Bind(&StartTask::OnSetupOnUICompleted, |
| weak_factory_.GetWeakPtr(), base::Passed(¶ms), |
| is_new_process))); |
| } |
| - void OnRegisteredToDevToolsManager( |
| - std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params, |
| - bool is_new_process, |
| - int worker_devtools_agent_route_id, |
| - bool wait_for_debugger) { |
| + void OnSetupOnUICompleted(std::unique_ptr<EmbeddedWorkerStartParams> params, |
| + bool is_new_process, |
| + int worker_devtools_agent_route_id, |
| + bool wait_for_debugger) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| TRACE_EVENT_ASYNC_STEP_PAST0("ServiceWorker", |
| "EmbeddedWorkerInstance::Start", this, |
| - "OnRegisteredToDevToolsManager"); |
| + "OnSetupOnUICompleted"); |
| // Notify the instance that it is registered to the devtools manager. |
| instance_->OnRegisteredToDevToolsManager( |
| @@ -366,11 +373,14 @@ class EmbeddedWorkerInstance::StartTask { |
| params->worker_devtools_agent_route_id = worker_devtools_agent_route_id; |
| params->wait_for_debugger = wait_for_debugger; |
| - SendStartWorker(std::move(params)); |
| + |
| + if (ServiceWorkerUtils::IsMojoForServiceWorkerEnabled()) |
| + instance_->SendMojoStartWorker(std::move(params)); |
| + else |
| + SendStartWorker(std::move(params)); |
| } |
| - void SendStartWorker( |
| - std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params) { |
| + void SendStartWorker(std::unique_ptr<EmbeddedWorkerStartParams> params) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| ServiceWorkerStatusCode status = instance_->registry_->SendStartWorker( |
| std::move(params), instance_->process_id()); |
| @@ -392,6 +402,7 @@ class EmbeddedWorkerInstance::StartTask { |
| // |instance_| must outlive |this|. |
| EmbeddedWorkerInstance* instance_; |
| + mojom::EmbeddedWorkerInstanceClientRequest request_; |
| StatusCallback start_callback_; |
| ProcessAllocationState state_; |
| @@ -421,7 +432,7 @@ EmbeddedWorkerInstance::~EmbeddedWorkerInstance() { |
| } |
| void EmbeddedWorkerInstance::Start( |
| - std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params, |
| + std::unique_ptr<EmbeddedWorkerStartParams> params, |
| const StatusCallback& callback) { |
| if (!context_) { |
| callback.Run(SERVICE_WORKER_ERROR_ABORT); |
| @@ -445,7 +456,12 @@ void EmbeddedWorkerInstance::Start( |
| params->wait_for_debugger = false; |
| params->settings.v8_cache_options = GetV8CacheOptions(); |
| - inflight_start_task_.reset(new StartTask(this, params->script_url)); |
| + mojom::EmbeddedWorkerInstanceClientRequest request; |
| + if (ServiceWorkerUtils::IsMojoForServiceWorkerEnabled()) |
| + request = mojo::GetProxy(&client_); |
| + |
| + inflight_start_task_.reset( |
| + new StartTask(this, params->script_url, std::move(request))); |
| inflight_start_task_->Start(std::move(params), callback); |
| } |
| @@ -565,6 +581,16 @@ void EmbeddedWorkerInstance::OnRegisteredToDevToolsManager( |
| } |
| } |
| +void EmbeddedWorkerInstance::SendMojoStartWorker( |
| + std::unique_ptr<EmbeddedWorkerStartParams> params) { |
| + client_->StartWorker(*params); |
| + registry_->BindWorkerToProcess(process_id(), embedded_worker_id()); |
| + TRACE_EVENT_ASYNC_STEP_PAST1("ServiceWorker", "EmbeddedWorkerInstance::Start", |
| + this, "SendStartWorker", "Status", "mojo"); |
| + OnStartWorkerMessageSent(); |
| + return; |
|
falken
2016/09/13 05:48:02
no need for return here
shimazu
2016/09/15 03:24:42
Done.
|
| +} |
| + |
| void EmbeddedWorkerInstance::OnStartWorkerMessageSent() { |
| if (!step_time_.is_null()) { |
| base::TimeDelta duration = UpdateStepTime(); |
| @@ -659,9 +685,10 @@ void EmbeddedWorkerInstance::OnThreadStarted(int thread_id) { |
| FOR_EACH_OBSERVER(Listener, listener_list_, OnThreadStarted()); |
| shell::mojom::InterfaceProviderPtr exposed_interfaces; |
| - interface_registry_->Bind(GetProxy(&exposed_interfaces)); |
| + interface_registry_->Bind(mojo::GetProxy(&exposed_interfaces)); |
| shell::mojom::InterfaceProviderPtr remote_interfaces; |
| - shell::mojom::InterfaceProviderRequest request = GetProxy(&remote_interfaces); |
| + shell::mojom::InterfaceProviderRequest request = |
| + mojo::GetProxy(&remote_interfaces); |
| remote_interfaces_->Bind(std::move(remote_interfaces)); |
| BrowserThread::PostTask( |
| BrowserThread::UI, FROM_HERE, |