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()) { |