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; |
} |