Chromium Code Reviews| 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()) { |