Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Unified Diff: content/browser/service_worker/embedded_worker_instance.cc

Issue 1223193009: WIP attempt to replace StartWorker/StopWorker IPCs with a new mojo EmbeddedWorker service. Base URL: https://chromium.googlesource.com/chromium/src.git@mojo-event-dispatching-option2
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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(&params),
+ weak_factory_.GetWeakPtr(), context_, base::Passed(&params),
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(&params),
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;
}

Powered by Google App Engine
This is Rietveld 408576698