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

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

Issue 2313653002: ServiceWorker: Exchange InterfaceProviders when starting worker thread (Closed)
Patch Set: Indent Created 4 years, 3 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 ff7591fc36ba3e823208befcc2cae2a91c18c9ab..48529f4f878dc7295bdf6f5fa11284e55a1424e9 100644
--- a/content/browser/service_worker/embedded_worker_instance.cc
+++ b/content/browser/service_worker/embedded_worker_instance.cc
@@ -451,6 +451,7 @@ void EmbeddedWorkerInstance::Start(
status_ = EmbeddedWorkerStatus::STARTING;
starting_phase_ = ALLOCATING_PROCESS;
network_accessed_for_script_ = false;
+ binding_.Close();
interface_registry_.reset(new shell::InterfaceRegistry);
remote_interfaces_.reset(new shell::InterfaceProvider);
FOR_EACH_OBSERVER(Listener, listener_list_, OnStarting());
@@ -460,6 +461,9 @@ void EmbeddedWorkerInstance::Start(
params->wait_for_debugger = false;
params->settings.v8_cache_options = GetV8CacheOptions();
+ interface_registry_->AddInterface(
+ base::Bind(&EmbeddedWorkerInstance::BindMojoRequest, AsWeakPtr()));
+
mojom::EmbeddedWorkerInstanceClientRequest request =
GetProxy(&instance_client_);
instance_client_.set_connection_error_handler(
@@ -565,6 +569,7 @@ EmbeddedWorkerInstance::EmbeddedWorkerInstance(
status_(EmbeddedWorkerStatus::STOPPED),
starting_phase_(NOT_STARTING),
thread_id_(kInvalidEmbeddedWorkerThreadId),
+ binding_(this),
devtools_attached_(false),
network_accessed_for_script_(false),
weak_factory_(this) {}
@@ -616,7 +621,11 @@ void EmbeddedWorkerInstance::SendMojoStartWorker(
mojo_params->settings->v8_cache_options =
static_cast<mojom::V8CacheOptions>(params->settings.v8_cache_options);
- instance_client_->StartWorker(std::move(mojo_params));
+ shell::mojom::InterfaceProviderPtr exposed_interfaces;
+ interface_registry_->Bind(GetProxy(&exposed_interfaces));
+
+ instance_client_->StartWorker(std::move(mojo_params),
+ std::move(exposed_interfaces));
registry_->AddWorker(process_id(), embedded_worker_id());
TRACE_EVENT_ASYNC_STEP_PAST1("ServiceWorker", "EmbeddedWorkerInstance::Start",
this, "SendStartWorker", "Status", "mojo");
@@ -717,16 +726,19 @@ void EmbeddedWorkerInstance::OnThreadStarted(int thread_id) {
thread_id_ = thread_id;
FOR_EACH_OBSERVER(Listener, listener_list_, OnThreadStarted());
- shell::mojom::InterfaceProviderPtr exposed_interfaces;
- interface_registry_->Bind(GetProxy(&exposed_interfaces));
- shell::mojom::InterfaceProviderPtr remote_interfaces;
- shell::mojom::InterfaceProviderRequest request = GetProxy(&remote_interfaces);
- remote_interfaces_->Bind(std::move(remote_interfaces));
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(SetupMojoOnUIThread, process_id(), thread_id_,
- base::Passed(&request),
- base::Passed(exposed_interfaces.PassInterface())));
+ if (!ServiceWorkerUtils::IsMojoForServiceWorkerEnabled()) {
nhiroki 2016/09/06 01:38:05 This condition may make a code reader surprised be
shimazu 2016/09/21 07:00:51 Done.
+ shell::mojom::InterfaceProviderPtr exposed_interfaces;
+ interface_registry_->Bind(GetProxy(&exposed_interfaces));
+ shell::mojom::InterfaceProviderPtr remote_interfaces;
+ shell::mojom::InterfaceProviderRequest request =
+ GetProxy(&remote_interfaces);
+ remote_interfaces_->Bind(std::move(remote_interfaces));
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(SetupMojoOnUIThread, process_id(), thread_id_,
+ base::Passed(&request),
+ base::Passed(exposed_interfaces.PassInterface())));
+ }
}
void EmbeddedWorkerInstance::OnScriptLoadFailed() {
@@ -789,10 +801,20 @@ void EmbeddedWorkerInstance::Detach() {
OnDetached();
}
+void EmbeddedWorkerInstance::BindMojoRequest(
+ mojom::EmbeddedWorkerInstanceRequest request) {
+ binding_.Bind(std::move(request));
+}
+
base::WeakPtr<EmbeddedWorkerInstance> EmbeddedWorkerInstance::AsWeakPtr() {
return weak_factory_.GetWeakPtr();
}
+void EmbeddedWorkerInstance::AttachClientInterfaceProvider(
+ shell::mojom::InterfaceProviderPtr client_interfaces) {
+ remote_interfaces_->Bind(std::move(client_interfaces));
+}
+
bool EmbeddedWorkerInstance::OnMessageReceived(const IPC::Message& message) {
ListenerList::Iterator it(&listener_list_);
while (Listener* listener = it.GetNext()) {

Powered by Google App Engine
This is Rietveld 408576698