| 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 9866014e2e905319a41b8e3e26cd31b874d107c8..6268dafc6169f10040f66a8370981045e8840ec5 100644
|
| --- a/content/browser/service_worker/embedded_worker_instance.cc
|
| +++ b/content/browser/service_worker/embedded_worker_instance.cc
|
| @@ -22,6 +22,7 @@
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/render_process_host.h"
|
| #include "ipc/ipc_message.h"
|
| +#include "mojo/common/url_type_converters.h"
|
| #include "url/gurl.h"
|
|
|
| namespace content {
|
| @@ -55,7 +56,7 @@ void NotifyWorkerStopIgnoredOnUI(int worker_process_id, int worker_route_id) {
|
| worker_process_id, worker_route_id);
|
| }
|
|
|
| -void RegisterToWorkerDevToolsManagerOnUI(
|
| +/*void RegisterToWorkerDevToolsManagerOnUI(
|
| int process_id,
|
| const ServiceWorkerContextCore* service_worker_context,
|
| const base::WeakPtr<ServiceWorkerContextCore>& service_worker_context_weak,
|
| @@ -84,6 +85,34 @@ void RegisterToWorkerDevToolsManagerOnUI(
|
| FROM_HERE,
|
| base::Bind(callback, worker_devtools_agent_route_id, wait_for_debugger));
|
| }
|
| +*/
|
| +void RegisterToWorkerDevToolsManagerAndConnectToWorkerOnUI(
|
| + int process_id,
|
| + const ServiceWorkerContextCore* service_worker_context,
|
| + const base::WeakPtr<ServiceWorkerContextCore>& service_worker_context_weak,
|
| + int64 service_worker_version_id,
|
| + const GURL& url,
|
| + mojo::InterfaceRequest<EmbeddedWorker> embedded_worker,
|
| + const base::Callback<void(int worker_devtools_agent_route_id,
|
| + bool wait_for_debugger)>& callback) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| + int worker_devtools_agent_route_id = MSG_ROUTING_NONE;
|
| + bool wait_for_debugger = false;
|
| + if (RenderProcessHost* rph = RenderProcessHost::FromID(process_id)) {
|
| + // |rph| may be NULL in unit tests.
|
| + worker_devtools_agent_route_id = rph->GetNextRoutingID();
|
| + wait_for_debugger =
|
| + ServiceWorkerDevToolsManager::GetInstance()->WorkerCreated(
|
| + process_id, worker_devtools_agent_route_id,
|
| + ServiceWorkerDevToolsManager::ServiceWorkerIdentifier(
|
| + service_worker_context, service_worker_context_weak,
|
| + service_worker_version_id, url));
|
| + rph->GetServiceRegistry()->ConnectToRemoteService(embedded_worker.Pass());
|
| + }
|
| + BrowserThread::PostTask(
|
| + BrowserThread::IO, FROM_HERE,
|
| + base::Bind(callback, worker_devtools_agent_route_id, wait_for_debugger));
|
| +}
|
|
|
| void SetupMojoOnUIThread(int process_id,
|
| int thread_id,
|
| @@ -162,8 +191,8 @@ void EmbeddedWorkerInstance::Start(int64 service_worker_version_id,
|
| starting_phase_ = ALLOCATING_PROCESS;
|
| network_accessed_for_script_ = false;
|
| FOR_EACH_OBSERVER(Listener, listener_list_, OnStarting());
|
| - scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params(
|
| - new EmbeddedWorkerMsg_StartWorker_Params());
|
| + EmbeddedWorkerStartWorkerParamsPtr params =
|
| + EmbeddedWorkerStartWorkerParams::New();
|
| TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker",
|
| "EmbeddedWorkerInstance::ProcessAllocate",
|
| params.get(),
|
| @@ -171,26 +200,23 @@ void EmbeddedWorkerInstance::Start(int64 service_worker_version_id,
|
| "Script URL", script_url.spec());
|
| params->embedded_worker_id = embedded_worker_id_;
|
| params->service_worker_version_id = service_worker_version_id;
|
| - params->scope = scope;
|
| - params->script_url = script_url;
|
| + params->scope = mojo::String::From(scope);
|
| + params->script_url = mojo::String::From(script_url);
|
| params->worker_devtools_agent_route_id = MSG_ROUTING_NONE;
|
| params->wait_for_debugger = false;
|
| params->v8_cache_options = GetV8CacheOptions();
|
| context_->process_manager()->AllocateWorkerProcess(
|
| - embedded_worker_id_,
|
| - scope,
|
| - script_url,
|
| + embedded_worker_id_, scope, script_url,
|
| base::Bind(&EmbeddedWorkerInstance::RunProcessAllocated,
|
| - weak_factory_.GetWeakPtr(),
|
| - context_,
|
| - base::Passed(¶ms),
|
| + weak_factory_.GetWeakPtr(), context_, base::Passed(¶ms),
|
| callback));
|
| }
|
|
|
| ServiceWorkerStatusCode EmbeddedWorkerInstance::Stop() {
|
| DCHECK(status_ == STARTING || status_ == RUNNING) << status_;
|
| - ServiceWorkerStatusCode status =
|
| - registry_->StopWorker(process_id_, embedded_worker_id_);
|
| + ServiceWorkerStatusCode status = SERVICE_WORKER_OK;
|
| + // registry_->StopWorker(process_id_, embedded_worker_id_);
|
| + worker_.reset();
|
| // StopWorker could fail if we can't talk to the worker, which should
|
| // basically means it's being terminated, so unconditionally change
|
| // the status to STOPPING.
|
| @@ -241,7 +267,7 @@ EmbeddedWorkerInstance::EmbeddedWorkerInstance(
|
| void EmbeddedWorkerInstance::RunProcessAllocated(
|
| base::WeakPtr<EmbeddedWorkerInstance> instance,
|
| base::WeakPtr<ServiceWorkerContextCore> context,
|
| - scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
|
| + EmbeddedWorkerStartWorkerParamsPtr params,
|
| const EmbeddedWorkerInstance::StatusCallback& callback,
|
| ServiceWorkerStatusCode status,
|
| int process_id,
|
| @@ -264,7 +290,7 @@ void EmbeddedWorkerInstance::RunProcessAllocated(
|
| }
|
|
|
| void EmbeddedWorkerInstance::ProcessAllocated(
|
| - scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
|
| + EmbeddedWorkerStartWorkerParamsPtr params,
|
| const StatusCallback& callback,
|
| int process_id,
|
| bool is_new_process,
|
| @@ -288,26 +314,27 @@ void EmbeddedWorkerInstance::ProcessAllocated(
|
| // Register this worker to DevToolsManager on UI thread, then continue to
|
| // call SendStartWorker on IO thread.
|
| starting_phase_ = REGISTERING_TO_DEVTOOLS;
|
| + mojo::InterfaceRequest<EmbeddedWorker> request = mojo::GetProxy(&worker_);
|
| BrowserThread::PostTask(
|
| BrowserThread::UI, FROM_HERE,
|
| - base::Bind(RegisterToWorkerDevToolsManagerOnUI, process_id_,
|
| - context_.get(), context_, service_worker_version_id,
|
| - script_url,
|
| + base::Bind(RegisterToWorkerDevToolsManagerAndConnectToWorkerOnUI,
|
| + process_id_, context_.get(), context_,
|
| + service_worker_version_id, script_url, base::Passed(&request),
|
| base::Bind(&EmbeddedWorkerInstance::SendStartWorker,
|
| weak_factory_.GetWeakPtr(), base::Passed(¶ms),
|
| callback, is_new_process)));
|
| }
|
|
|
| void EmbeddedWorkerInstance::SendStartWorker(
|
| - scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
|
| + EmbeddedWorkerStartWorkerParamsPtr params,
|
| const StatusCallback& callback,
|
| bool is_new_process,
|
| int worker_devtools_agent_route_id,
|
| bool wait_for_debugger) {
|
| if (worker_devtools_agent_route_id != MSG_ROUTING_NONE) {
|
| DCHECK(!devtools_proxy_);
|
| - devtools_proxy_.reset(new DevToolsProxy(process_id_,
|
| - worker_devtools_agent_route_id));
|
| + devtools_proxy_.reset(
|
| + new DevToolsProxy(process_id_, worker_devtools_agent_route_id));
|
| }
|
| params->worker_devtools_agent_route_id = worker_devtools_agent_route_id;
|
| params->wait_for_debugger = wait_for_debugger;
|
| @@ -332,12 +359,8 @@ void EmbeddedWorkerInstance::SendStartWorker(
|
| }
|
|
|
| starting_phase_ = SENT_START_WORKER;
|
| - ServiceWorkerStatusCode status =
|
| - registry_->SendStartWorker(params.Pass(), process_id_);
|
| - if (status != SERVICE_WORKER_OK) {
|
| - callback.Run(status);
|
| - return;
|
| - }
|
| + registry_->WorkerStarting(embedded_worker_id_, process_id_);
|
| + worker_->Initialize(params.Pass());
|
| DCHECK(start_callback_.is_null());
|
| start_callback_ = callback;
|
| }
|
|
|