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

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

Issue 2490623005: Remove InterfaceRegistry/Provider from service workers (Closed)
Patch Set: Created 4 years, 1 month 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 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 = &params->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,

Powered by Google App Engine
This is Rietveld 408576698