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 6fb30fdeff79f0695c595379d08da704e500893d..aa834e6e5016d7aa67b3bf222808656d88c9b3ca 100644 |
--- a/content/browser/service_worker/embedded_worker_instance.cc |
+++ b/content/browser/service_worker/embedded_worker_instance.cc |
@@ -29,8 +29,6 @@ |
#include "content/public/common/child_process_host.h" |
#include "content/public/common/content_switches.h" |
#include "ipc/ipc_message.h" |
-#include "services/service_manager/public/cpp/interface_provider.h" |
-#include "services/service_manager/public/cpp/interface_registry.h" |
#include "url/gurl.h" |
namespace content { |
@@ -105,20 +103,18 @@ void SetupOnUI( |
base::Bind(callback, worker_devtools_agent_route_id, wait_for_debugger)); |
} |
-void SetupMojoOnUIThread( |
+void SetupEventDispatcherOnUIThread( |
int process_id, |
int thread_id, |
- service_manager::mojom::InterfaceProviderRequest remote_interfaces, |
- service_manager::mojom::InterfaceProviderPtrInfo exposed_interfaces) { |
+ mojom::ServiceWorkerEventDispatcherRequest request) { |
+ DCHECK(!ServiceWorkerUtils::IsMojoForServiceWorkerEnabled()); |
RenderProcessHost* rph = RenderProcessHost::FromID(process_id); |
// |rph| or its InterfaceProvider may be NULL in unit tests. |
if (!rph || !rph->GetRemoteInterfaces()) |
return; |
mojom::EmbeddedWorkerSetupPtr setup; |
rph->GetRemoteInterfaces()->GetInterface(&setup); |
- setup->ExchangeInterfaceProviders( |
- thread_id, std::move(remote_interfaces), |
- mojo::MakeProxy(std::move(exposed_interfaces))); |
+ setup->AttachServiceWorkerEventDispatcher(thread_id, std::move(request)); |
} |
void CallDetach(EmbeddedWorkerInstance* instance) { |
@@ -279,17 +275,18 @@ class EmbeddedWorkerInstance::StartTask { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
state_ = ProcessAllocationState::ALLOCATING; |
start_callback_ = callback; |
- is_installed_ = params->is_installed; |
+ is_installed_ = params->internal.is_installed; |
if (!GetContentClient()->browser()->IsBrowserStartupComplete()) |
started_during_browser_startup_ = true; |
- GURL scope(params->scope); |
- GURL script_url(params->script_url); |
+ GURL scope(params->internal.scope); |
+ GURL script_url(params->internal.script_url); |
bool can_use_existing_process = |
instance_->context_->GetVersionFailureCount( |
- params->service_worker_version_id) < kMaxSameProcessFailureCount; |
+ params->internal.service_worker_version_id) < |
+ kMaxSameProcessFailureCount; |
instance_->context_->process_manager()->AllocateWorkerProcess( |
instance_->embedded_worker_id_, scope, script_url, |
can_use_existing_process, |
@@ -353,12 +350,13 @@ class EmbeddedWorkerInstance::StartTask { |
// TODO(bengr): Support changes to this setting while the worker |
// is running. |
- params->settings.data_saver_enabled = settings.data_saver_enabled; |
+ params->internal.settings.data_saver_enabled = settings.data_saver_enabled; |
// Register the instance to DevToolsManager on UI thread. |
- const int64_t service_worker_version_id = params->service_worker_version_id; |
- const GURL& scope = params->scope; |
- GURL script_url(params->script_url); |
+ const int64_t service_worker_version_id = |
+ params->internal.service_worker_version_id; |
+ const GURL& scope = params->internal.scope; |
+ GURL script_url(params->internal.script_url); |
BrowserThread::PostTask( |
BrowserThread::UI, FROM_HERE, |
base::Bind(&SetupOnUI, process_id, instance_->context_.get(), |
@@ -382,8 +380,9 @@ class EmbeddedWorkerInstance::StartTask { |
instance_->OnRegisteredToDevToolsManager( |
is_new_process, worker_devtools_agent_route_id, wait_for_debugger); |
- params->worker_devtools_agent_route_id = worker_devtools_agent_route_id; |
- params->wait_for_debugger = wait_for_debugger; |
+ params->internal.worker_devtools_agent_route_id = |
+ worker_devtools_agent_route_id; |
+ params->internal.wait_for_debugger = wait_for_debugger; |
if (ServiceWorkerUtils::IsMojoForServiceWorkerEnabled()) |
SendMojoStartWorker(std::move(params)); |
@@ -467,22 +466,21 @@ void EmbeddedWorkerInstance::Start( |
} |
DCHECK(status_ == EmbeddedWorkerStatus::STOPPED); |
- DCHECK(!params->pause_after_download || !params->is_installed); |
- DCHECK_NE(kInvalidServiceWorkerVersionId, params->service_worker_version_id); |
+ EmbeddedWorkerStartParamsInternal* internal = ¶ms->internal; |
+ DCHECK(!internal->pause_after_download || !internal->is_installed); |
+ DCHECK_NE(kInvalidServiceWorkerVersionId, |
+ internal->service_worker_version_id); |
step_time_ = base::TimeTicks::Now(); |
status_ = EmbeddedWorkerStatus::STARTING; |
starting_phase_ = ALLOCATING_PROCESS; |
network_accessed_for_script_ = false; |
- interface_registry_ = |
- base::MakeUnique<service_manager::InterfaceRegistry>(std::string()); |
- remote_interfaces_.reset(new service_manager::InterfaceProvider); |
for (auto& observer : listener_list_) |
observer.OnStarting(); |
- params->embedded_worker_id = embedded_worker_id_; |
- params->worker_devtools_agent_route_id = MSG_ROUTING_NONE; |
- params->wait_for_debugger = false; |
- params->settings.v8_cache_options = GetV8CacheOptions(); |
+ internal->embedded_worker_id = embedded_worker_id_; |
+ internal->worker_devtools_agent_route_id = MSG_ROUTING_NONE; |
+ internal->wait_for_debugger = false; |
+ internal->settings.v8_cache_options = GetV8CacheOptions(); |
mojom::EmbeddedWorkerInstanceClientRequest request; |
if (ServiceWorkerUtils::IsMojoForServiceWorkerEnabled()) { |
@@ -491,8 +489,11 @@ void EmbeddedWorkerInstance::Start( |
base::Bind(&CallDetach, base::Unretained(this))); |
} |
+ if (!ServiceWorkerUtils::IsMojoForServiceWorkerEnabled()) |
+ pending_dispatcher_request_ = std::move(params->dispatcher_request); |
+ |
inflight_start_task_.reset( |
- new StartTask(this, params->script_url, std::move(request))); |
+ new StartTask(this, internal->script_url, std::move(request))); |
inflight_start_task_->Start(std::move(params), callback); |
} |
@@ -565,22 +566,6 @@ void EmbeddedWorkerInstance::ResumeAfterDownload() { |
embedded_worker_id_)); |
} |
-service_manager::InterfaceRegistry* |
-EmbeddedWorkerInstance::GetInterfaceRegistry() { |
- DCHECK(status_ == EmbeddedWorkerStatus::STARTING || |
- status_ == EmbeddedWorkerStatus::RUNNING) |
- << static_cast<int>(status_); |
- return interface_registry_.get(); |
-} |
- |
-service_manager::InterfaceProvider* |
-EmbeddedWorkerInstance::GetRemoteInterfaces() { |
- DCHECK(status_ == EmbeddedWorkerStatus::STARTING || |
- status_ == EmbeddedWorkerStatus::RUNNING) |
- << static_cast<int>(status_); |
- return remote_interfaces_.get(); |
-} |
- |
EmbeddedWorkerInstance::EmbeddedWorkerInstance( |
base::WeakPtr<ServiceWorkerContextCore> context, |
int embedded_worker_id) |
@@ -629,17 +614,7 @@ ServiceWorkerStatusCode EmbeddedWorkerInstance::SendMojoStartWorker( |
std::unique_ptr<EmbeddedWorkerStartParams> params) { |
if (!context_) |
return SERVICE_WORKER_ERROR_ABORT; |
- service_manager::mojom::InterfaceProviderPtr remote_interfaces; |
- service_manager::mojom::InterfaceProviderRequest request = |
- mojo::GetProxy(&remote_interfaces); |
- remote_interfaces_->Bind(std::move(remote_interfaces)); |
- service_manager::mojom::InterfaceProviderPtr exposed_interfaces; |
- interface_registry_->Bind( |
- mojo::GetProxy(&exposed_interfaces), service_manager::Identity(), |
- service_manager::InterfaceProviderSpec(), service_manager::Identity(), |
- service_manager::InterfaceProviderSpec()); |
- client_->StartWorker(*params, std::move(exposed_interfaces), |
- std::move(request)); |
+ client_->StartWorker(params->internal, std::move(params->dispatcher_request)); |
registry_->BindWorkerToProcess(process_id(), embedded_worker_id()); |
TRACE_EVENT_ASYNC_STEP_PAST1("ServiceWorker", "EmbeddedWorkerInstance::Start", |
this, "SendStartWorker", "Status", "mojo"); |
@@ -743,24 +718,14 @@ void EmbeddedWorkerInstance::OnThreadStarted(int thread_id) { |
for (auto& observer : listener_list_) |
observer.OnThreadStarted(); |
- // This code is for BackgroundSync and FetchEvent, which have been already |
- // mojofied. Interfaces are exchanged at StartWorker when mojo for the service |
- // worker is enabled, so this code isn't necessary when the flag is enabled. |
+ // The pending request is sent at StartWorker if mojo for the service worker |
+ // is enabled. |
if (!ServiceWorkerUtils::IsMojoForServiceWorkerEnabled()) { |
- service_manager::mojom::InterfaceProviderPtr exposed_interfaces; |
- interface_registry_->Bind( |
- mojo::GetProxy(&exposed_interfaces), service_manager::Identity(), |
- service_manager::InterfaceProviderSpec(), service_manager::Identity(), |
- service_manager::InterfaceProviderSpec()); |
- service_manager::mojom::InterfaceProviderPtr remote_interfaces; |
- service_manager::mojom::InterfaceProviderRequest request = |
- mojo::GetProxy(&remote_interfaces); |
- remote_interfaces_->Bind(std::move(remote_interfaces)); |
+ DCHECK(pending_dispatcher_request_.is_pending()); |
BrowserThread::PostTask( |
BrowserThread::UI, FROM_HERE, |
- base::Bind(SetupMojoOnUIThread, process_id(), thread_id_, |
- base::Passed(&request), |
- base::Passed(exposed_interfaces.PassInterface()))); |
+ base::Bind(SetupEventDispatcherOnUIThread, process_id(), thread_id_, |
+ base::Passed(&pending_dispatcher_request_))); |
} |
} |
@@ -907,8 +872,6 @@ void EmbeddedWorkerInstance::ReleaseProcess() { |
process_handle_.reset(); |
status_ = EmbeddedWorkerStatus::STOPPED; |
thread_id_ = kInvalidEmbeddedWorkerThreadId; |
- interface_registry_.reset(); |
- remote_interfaces_.reset(); |
} |
void EmbeddedWorkerInstance::OnStartFailed(const StatusCallback& callback, |