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

Unified Diff: content/renderer/service_worker/service_worker_context_client.cc

Issue 2490623005: Remove InterfaceRegistry/Provider from service workers (Closed)
Patch Set: review 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/renderer/service_worker/service_worker_context_client.cc
diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc
index f76e81dbe660899a2d5904ad16242c7ea2a8af31..4e01d57a931a405967d2c67bb491cb0332f3ad1a 100644
--- a/content/renderer/service_worker/service_worker_context_client.cc
+++ b/content/renderer/service_worker/service_worker_context_client.cc
@@ -16,6 +16,7 @@
#include "base/threading/thread_task_runner_handle.h"
#include "base/time/time.h"
#include "base/trace_event/trace_event.h"
+#include "content/child/background_sync/background_sync_type_converters.h"
#include "content/child/notifications/notification_data_conversions.h"
#include "content/child/request_extra_data.h"
#include "content/child/service_worker/service_worker_dispatcher.h"
@@ -32,7 +33,7 @@
#include "content/common/devtools_messages.h"
#include "content/common/message_port_messages.h"
#include "content/common/service_worker/embedded_worker_messages.h"
-#include "content/common/service_worker/fetch_event_dispatcher.mojom.h"
+#include "content/common/service_worker/service_worker_event_dispatcher.mojom.h"
#include "content/common/service_worker/service_worker_messages.h"
#include "content/common/service_worker/service_worker_status_code.h"
#include "content/common/service_worker/service_worker_utils.h"
@@ -40,7 +41,6 @@
#include "content/public/common/referrer.h"
#include "content/public/renderer/content_renderer_client.h"
#include "content/public/renderer/document_state.h"
-#include "content/renderer/background_sync/background_sync_client_impl.h"
#include "content/renderer/devtools/devtools_agent.h"
#include "content/renderer/render_thread_impl.h"
#include "content/renderer/service_worker/embedded_worker_dispatcher.h"
@@ -48,10 +48,6 @@
#include "content/renderer/service_worker/service_worker_type_util.h"
#include "ipc/ipc_message.h"
#include "ipc/ipc_message_macros.h"
-#include "mojo/public/cpp/bindings/interface_request.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
-#include "services/service_manager/public/cpp/interface_provider.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
#include "third_party/WebKit/public/platform/URLConversion.h"
#include "third_party/WebKit/public/platform/WebMessagePortChannel.h"
#include "third_party/WebKit/public/platform/WebReferrerPolicy.h"
@@ -183,20 +179,14 @@ struct ServiceWorkerContextClient::WorkerContextData {
IDMap<blink::WebServiceWorkerClientCallbacks, IDMapOwnPointer>;
using SkipWaitingCallbacksMap =
IDMap<blink::WebServiceWorkerSkipWaitingCallbacks, IDMapOwnPointer>;
- using SyncEventCallbacksMap =
- IDMap<const base::Callback<void(blink::mojom::ServiceWorkerEventStatus,
- base::Time /* dispatch_event_time */)>,
- IDMapOwnPointer>;
- using FetchEventCallbacksMap =
- IDMap<const base::Callback<void(ServiceWorkerStatusCode,
- base::Time /* dispatch_event_time */)>,
- IDMapOwnPointer>;
+ using SyncEventCallbacksMap = IDMap<const SyncCallback, IDMapOwnPointer>;
+ using FetchEventCallbacksMap = IDMap<const FetchCallback, IDMapOwnPointer>;
using NavigationPreloadRequestsMap =
IDMap<ServiceWorkerContextClient::NavigationPreloadRequest,
IDMapOwnPointer>;
explicit WorkerContextData(ServiceWorkerContextClient* owner)
- : interface_registry(std::string()),
+ : event_dispatcher_binding(owner),
weak_factory(owner),
proxy_weak_factory(owner->proxy_) {}
@@ -204,6 +194,8 @@ struct ServiceWorkerContextClient::WorkerContextData {
DCHECK(thread_checker.CalledOnValidThread());
}
+ mojo::Binding<mojom::ServiceWorkerEventDispatcher> event_dispatcher_binding;
+
// Pending callbacks for GetClientDocuments().
ClientsCallbacksMap clients_callbacks;
@@ -225,11 +217,6 @@ struct ServiceWorkerContextClient::WorkerContextData {
// Pending navigation preload requests.
NavigationPreloadRequestsMap preload_requests;
- service_manager::InterfaceRegistry interface_registry;
- // This is not used when mojo for the service workers is enabled. At that
- // time, remote interfaces are stored in EmbeddedWorkerInstanceClientImpl.
- service_manager::InterfaceProvider remote_interfaces;
-
base::ThreadChecker thread_checker;
base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory;
base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory;
@@ -335,41 +322,6 @@ class ServiceWorkerContextClient::NavigationPreloadRequest final
bool result_reported_ = false;
};
-class ServiceWorkerContextClient::FetchEventDispatcherImpl
- : public NON_EXPORTED_BASE(mojom::FetchEventDispatcher) {
- public:
- static void Create(mojom::FetchEventDispatcherRequest request) {
- mojo::MakeStrongBinding(base::MakeUnique<FetchEventDispatcherImpl>(),
- std::move(request));
- }
-
- FetchEventDispatcherImpl() {}
-
- ~FetchEventDispatcherImpl() override {}
-
- void DispatchFetchEvent(int fetch_event_id,
- const ServiceWorkerFetchRequest& request,
- mojom::FetchEventPreloadHandlePtr preload_handle,
- const DispatchFetchEventCallback& callback) override {
- ServiceWorkerContextClient* client =
- ServiceWorkerContextClient::ThreadSpecificInstance();
- if (!client) {
- callback.Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now());
- return;
- }
- client->DispatchFetchEvent(
- fetch_event_id, request,
- preload_handle
- ? base::MakeUnique<NavigationPreloadRequest>(
- fetch_event_id, request.url, std::move(preload_handle))
- : nullptr,
- callback);
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(FetchEventDispatcherImpl);
-};
-
ServiceWorkerContextClient*
ServiceWorkerContextClient::ThreadSpecificInstance() {
return g_worker_client_tls.Pointer()->Get();
@@ -381,6 +333,7 @@ ServiceWorkerContextClient::ServiceWorkerContextClient(
const GURL& service_worker_scope,
const GURL& script_url,
int worker_devtools_agent_route_id,
+ mojom::ServiceWorkerEventDispatcherRequest dispatcher_request,
std::unique_ptr<EmbeddedWorkerInstanceClientImpl> embedded_worker_client)
: embedded_worker_id_(embedded_worker_id),
service_worker_version_id_(service_worker_version_id),
@@ -390,6 +343,7 @@ ServiceWorkerContextClient::ServiceWorkerContextClient(
sender_(ChildThreadImpl::current()->thread_safe_sender()),
main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()),
proxy_(nullptr),
+ pending_dispatcher_request_(std::move(dispatcher_request)),
embedded_worker_client_(std::move(embedded_worker_client)) {
TRACE_EVENT_ASYNC_BEGIN0("ServiceWorker",
"ServiceWorkerContextClient::StartingWorkerContext",
@@ -401,6 +355,21 @@ ServiceWorkerContextClient::ServiceWorkerContextClient(
"PrepareWorker");
}
+ServiceWorkerContextClient::ServiceWorkerContextClient(
+ int embedded_worker_id,
+ int64_t service_worker_version_id,
+ const GURL& service_worker_scope,
+ const GURL& script_url,
+ int worker_devtools_agent_route_id)
+ : ServiceWorkerContextClient::ServiceWorkerContextClient(
+ embedded_worker_id,
+ service_worker_version_id,
+ service_worker_scope,
+ script_url,
+ worker_devtools_agent_route_id,
+ mojom::ServiceWorkerEventDispatcherRequest(),
+ nullptr) {}
+
ServiceWorkerContextClient::~ServiceWorkerContextClient() {}
void ServiceWorkerContextClient::OnMessageReceived(
@@ -440,16 +409,6 @@ void ServiceWorkerContextClient::OnMessageReceived(
DCHECK(handled);
}
-void ServiceWorkerContextClient::BindInterfaceProviders(
- service_manager::mojom::InterfaceProviderRequest request,
- service_manager::mojom::InterfaceProviderPtr remote_interfaces) {
- context_->interface_registry.Bind(
- std::move(request), service_manager::Identity(),
- service_manager::InterfaceProviderSpec(), service_manager::Identity(),
- service_manager::InterfaceProviderSpec());
- context_->remote_interfaces.Bind(std::move(remote_interfaces));
-}
-
blink::WebURL ServiceWorkerContextClient::scope() const {
return service_worker_scope_;
}
@@ -545,16 +504,9 @@ void ServiceWorkerContextClient::workerContextStarted(
DCHECK_NE(registration_info.registration_id,
kInvalidServiceWorkerRegistrationId);
- // Register Mojo interfaces.
- context_->interface_registry.AddInterface(
- base::Bind(&BackgroundSyncClientImpl::Create));
- context_->interface_registry.AddInterface(
- base::Bind(&FetchEventDispatcherImpl::Create));
-
if (ServiceWorkerUtils::IsMojoForServiceWorkerEnabled()) {
- DCHECK(embedded_worker_client_);
- embedded_worker_client_->ExposeInterfacesToBrowser(
- &context_->interface_registry);
+ DCHECK(pending_dispatcher_request_.is_pending());
+ BindEventDispatcher(std::move(pending_dispatcher_request_));
}
SetRegistrationInServiceWorkerGlobalScope(registration_info, version_attrs);
@@ -601,8 +553,7 @@ void ServiceWorkerContextClient::willDestroyWorkerContext(
for (WorkerContextData::SyncEventCallbacksMap::iterator it(
&context_->sync_event_callbacks);
!it.IsAtEnd(); it.Advance()) {
- it.GetCurrentValue()->Run(blink::mojom::ServiceWorkerEventStatus::ABORTED,
- base::Time::Now());
+ it.GetCurrentValue()->Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now());
}
// Aborts the all pending fetch event callbacks.
for (WorkerContextData::FetchEventCallbacksMap::iterator it(
@@ -803,10 +754,10 @@ void ServiceWorkerContextClient::didHandleSyncEvent(
if (!callback)
return;
if (result == blink::WebServiceWorkerEventResultCompleted) {
- callback->Run(blink::mojom::ServiceWorkerEventStatus::COMPLETED,
+ callback->Run(SERVICE_WORKER_OK,
base::Time::FromDoubleT(event_dispatch_time));
} else {
- callback->Run(blink::mojom::ServiceWorkerEventStatus::REJECTED,
+ callback->Run(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED,
base::Time::FromDoubleT(event_dispatch_time));
}
context_->sync_event_callbacks.Remove(request_id);
@@ -919,17 +870,21 @@ void ServiceWorkerContextClient::registerForeignFetchScopes(
void ServiceWorkerContextClient::DispatchSyncEvent(
const std::string& tag,
- blink::WebServiceWorkerContextProxy::LastChanceOption last_chance,
- const SyncCallback& callback) {
+ blink::mojom::BackgroundSyncEventLastChance last_chance,
+ const DispatchSyncEventCallback& callback) {
TRACE_EVENT0("ServiceWorker",
"ServiceWorkerContextClient::DispatchSyncEvent");
int request_id =
context_->sync_event_callbacks.Add(new SyncCallback(callback));
+ blink::WebServiceWorkerContextProxy::LastChanceOption web_last_chance =
+ mojo::ConvertTo<blink::WebServiceWorkerContextProxy::LastChanceOption>(
dcheng 2016/11/22 07:59:04 Is it possible to typemap this?
shimazu 2016/11/24 06:47:32 I don't think so because blink types aren't availa
+ last_chance);
+
// TODO(jkarlin): Make this blink::WebString::FromUTF8Lenient once
// https://crrev.com/1768063002/ lands.
proxy_->dispatchSyncEvent(request_id, blink::WebString::fromUTF8(tag),
- last_chance);
+ web_last_chance);
}
void ServiceWorkerContextClient::Send(IPC::Message* message) {
@@ -1007,8 +962,13 @@ void ServiceWorkerContextClient::OnInstallEvent(int request_id) {
void ServiceWorkerContextClient::DispatchFetchEvent(
int fetch_event_id,
const ServiceWorkerFetchRequest& request,
- std::unique_ptr<NavigationPreloadRequest> preload_request,
- const FetchCallback& callback) {
+ mojom::FetchEventPreloadHandlePtr preload_handle,
+ const DispatchFetchEventCallback& callback) {
+ std::unique_ptr<NavigationPreloadRequest> preload_request =
+ preload_handle
+ ? base::MakeUnique<NavigationPreloadRequest>(
+ fetch_event_id, request.url, std::move(preload_handle))
+ : nullptr;
const bool navigation_preload_sent = !!preload_request;
blink::WebServiceWorkerRequest webRequest;
TRACE_EVENT0("ServiceWorker",
@@ -1290,6 +1250,13 @@ void ServiceWorkerContextClient::OnNavigationPreloadError(
proxy_->onNavigationPreloadError(fetch_event_id, std::move(error));
}
+void ServiceWorkerContextClient::BindEventDispatcher(
+ mojom::ServiceWorkerEventDispatcherRequest request) {
+ DCHECK(context_);
+ DCHECK(!context_->event_dispatcher_binding.is_bound());
+ context_->event_dispatcher_binding.Bind(std::move(request));
+}
+
base::WeakPtr<ServiceWorkerContextClient>
ServiceWorkerContextClient::GetWeakPtr() {
DCHECK(worker_task_runner_->RunsTasksOnCurrentThread());

Powered by Google App Engine
This is Rietveld 408576698