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

Side by Side Diff: content/renderer/service_worker/service_worker_context_client.cc

Issue 2394183003: Revert of Mojoify FetchEvent of Service Worker. (Closed)
Patch Set: Created 4 years, 2 months 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 unified diff | Download patch
« no previous file with comments | « content/renderer/service_worker/service_worker_context_client.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/service_worker/service_worker_context_client.h" 5 #include "content/renderer/service_worker/service_worker_context_client.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 13 matching lines...) Expand all
24 #include "content/child/service_worker/service_worker_provider_context.h" 24 #include "content/child/service_worker/service_worker_provider_context.h"
25 #include "content/child/service_worker/service_worker_registration_handle_refere nce.h" 25 #include "content/child/service_worker/service_worker_registration_handle_refere nce.h"
26 #include "content/child/service_worker/web_service_worker_impl.h" 26 #include "content/child/service_worker/web_service_worker_impl.h"
27 #include "content/child/service_worker/web_service_worker_provider_impl.h" 27 #include "content/child/service_worker/web_service_worker_provider_impl.h"
28 #include "content/child/service_worker/web_service_worker_registration_impl.h" 28 #include "content/child/service_worker/web_service_worker_registration_impl.h"
29 #include "content/child/thread_safe_sender.h" 29 #include "content/child/thread_safe_sender.h"
30 #include "content/child/webmessageportchannel_impl.h" 30 #include "content/child/webmessageportchannel_impl.h"
31 #include "content/common/devtools_messages.h" 31 #include "content/common/devtools_messages.h"
32 #include "content/common/message_port_messages.h" 32 #include "content/common/message_port_messages.h"
33 #include "content/common/service_worker/embedded_worker_messages.h" 33 #include "content/common/service_worker/embedded_worker_messages.h"
34 #include "content/common/service_worker/fetch_event_dispatcher.mojom.h"
35 #include "content/common/service_worker/service_worker_messages.h" 34 #include "content/common/service_worker/service_worker_messages.h"
36 #include "content/common/service_worker/service_worker_status_code.h"
37 #include "content/public/common/push_event_payload.h" 35 #include "content/public/common/push_event_payload.h"
38 #include "content/public/common/referrer.h" 36 #include "content/public/common/referrer.h"
39 #include "content/public/renderer/content_renderer_client.h" 37 #include "content/public/renderer/content_renderer_client.h"
40 #include "content/public/renderer/document_state.h" 38 #include "content/public/renderer/document_state.h"
41 #include "content/renderer/background_sync/background_sync_client_impl.h" 39 #include "content/renderer/background_sync/background_sync_client_impl.h"
42 #include "content/renderer/devtools/devtools_agent.h" 40 #include "content/renderer/devtools/devtools_agent.h"
43 #include "content/renderer/render_thread_impl.h" 41 #include "content/renderer/render_thread_impl.h"
44 #include "content/renderer/service_worker/embedded_worker_dispatcher.h" 42 #include "content/renderer/service_worker/embedded_worker_dispatcher.h"
45 #include "content/renderer/service_worker/service_worker_type_util.h" 43 #include "content/renderer/service_worker/service_worker_type_util.h"
46 #include "ipc/ipc_message.h" 44 #include "ipc/ipc_message.h"
47 #include "ipc/ipc_message_macros.h" 45 #include "ipc/ipc_message_macros.h"
48 #include "mojo/public/cpp/bindings/interface_request.h" 46 #include "mojo/public/cpp/bindings/interface_request.h"
49 #include "mojo/public/cpp/bindings/strong_binding.h"
50 #include "services/shell/public/cpp/interface_provider.h" 47 #include "services/shell/public/cpp/interface_provider.h"
51 #include "services/shell/public/cpp/interface_registry.h" 48 #include "services/shell/public/cpp/interface_registry.h"
52 #include "third_party/WebKit/public/platform/URLConversion.h" 49 #include "third_party/WebKit/public/platform/URLConversion.h"
53 #include "third_party/WebKit/public/platform/WebMessagePortChannel.h" 50 #include "third_party/WebKit/public/platform/WebMessagePortChannel.h"
54 #include "third_party/WebKit/public/platform/WebReferrerPolicy.h" 51 #include "third_party/WebKit/public/platform/WebReferrerPolicy.h"
55 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h" 52 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h"
56 #include "third_party/WebKit/public/platform/WebString.h" 53 #include "third_party/WebKit/public/platform/WebString.h"
57 #include "third_party/WebKit/public/platform/modules/background_sync/WebSyncRegi stration.h" 54 #include "third_party/WebKit/public/platform/modules/background_sync/WebSyncRegi stration.h"
58 #include "third_party/WebKit/public/platform/modules/notifications/WebNotificati onData.h" 55 #include "third_party/WebKit/public/platform/modules/notifications/WebNotificati onData.h"
59 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerClientQueryOptions.h" 56 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerClientQueryOptions.h"
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 using ClaimClientsCallbacksMap = 173 using ClaimClientsCallbacksMap =
177 IDMap<blink::WebServiceWorkerClientsClaimCallbacks, IDMapOwnPointer>; 174 IDMap<blink::WebServiceWorkerClientsClaimCallbacks, IDMapOwnPointer>;
178 using ClientCallbacksMap = 175 using ClientCallbacksMap =
179 IDMap<blink::WebServiceWorkerClientCallbacks, IDMapOwnPointer>; 176 IDMap<blink::WebServiceWorkerClientCallbacks, IDMapOwnPointer>;
180 using SkipWaitingCallbacksMap = 177 using SkipWaitingCallbacksMap =
181 IDMap<blink::WebServiceWorkerSkipWaitingCallbacks, IDMapOwnPointer>; 178 IDMap<blink::WebServiceWorkerSkipWaitingCallbacks, IDMapOwnPointer>;
182 using SyncEventCallbacksMap = 179 using SyncEventCallbacksMap =
183 IDMap<const base::Callback<void(blink::mojom::ServiceWorkerEventStatus, 180 IDMap<const base::Callback<void(blink::mojom::ServiceWorkerEventStatus,
184 base::Time /* dispatch_event_time */)>, 181 base::Time /* dispatch_event_time */)>,
185 IDMapOwnPointer>; 182 IDMapOwnPointer>;
186 using FetchEventCallbacksMap =
187 IDMap<const base::Callback<void(ServiceWorkerStatusCode,
188 base::Time /* dispatch_event_time */)>,
189 IDMapOwnPointer>;
190 183
191 explicit WorkerContextData(ServiceWorkerContextClient* owner) 184 explicit WorkerContextData(ServiceWorkerContextClient* owner)
192 : weak_factory(owner), proxy_weak_factory(owner->proxy_) {} 185 : weak_factory(owner), proxy_weak_factory(owner->proxy_) {}
193 186
194 ~WorkerContextData() { 187 ~WorkerContextData() {
195 DCHECK(thread_checker.CalledOnValidThread()); 188 DCHECK(thread_checker.CalledOnValidThread());
196 } 189 }
197 190
198 // Pending callbacks for GetClientDocuments(). 191 // Pending callbacks for GetClientDocuments().
199 ClientsCallbacksMap clients_callbacks; 192 ClientsCallbacksMap clients_callbacks;
200 193
201 // Pending callbacks for OpenWindow() and FocusClient(). 194 // Pending callbacks for OpenWindow() and FocusClient().
202 ClientCallbacksMap client_callbacks; 195 ClientCallbacksMap client_callbacks;
203 196
204 // Pending callbacks for SkipWaiting(). 197 // Pending callbacks for SkipWaiting().
205 SkipWaitingCallbacksMap skip_waiting_callbacks; 198 SkipWaitingCallbacksMap skip_waiting_callbacks;
206 199
207 // Pending callbacks for ClaimClients(). 200 // Pending callbacks for ClaimClients().
208 ClaimClientsCallbacksMap claim_clients_callbacks; 201 ClaimClientsCallbacksMap claim_clients_callbacks;
209 202
210 // Pending callbacks for Background Sync Events 203 // Pending callbacks for Background Sync Events
211 SyncEventCallbacksMap sync_event_callbacks; 204 SyncEventCallbacksMap sync_event_callbacks;
212 205
213 // Pending callbacks for Fetch Events
214 FetchEventCallbacksMap fetch_event_callbacks;
215
216 shell::InterfaceRegistry interface_registry; 206 shell::InterfaceRegistry interface_registry;
217 shell::InterfaceProvider remote_interfaces; 207 shell::InterfaceProvider remote_interfaces;
218 208
219 base::ThreadChecker thread_checker; 209 base::ThreadChecker thread_checker;
220 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; 210 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory;
221 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory; 211 base::WeakPtrFactory<blink::WebServiceWorkerContextProxy> proxy_weak_factory;
222 }; 212 };
223 213
224 class ServiceWorkerContextClient::FetchEventDispatcherImpl
225 : public NON_EXPORTED_BASE(mojom::FetchEventDispatcher) {
226 public:
227 static void Create(mojom::FetchEventDispatcherRequest request) {
228 mojo::MakeStrongBinding(base::MakeUnique<FetchEventDispatcherImpl>(),
229 std::move(request));
230 }
231
232 FetchEventDispatcherImpl() {}
233
234 ~FetchEventDispatcherImpl() override {}
235
236 void DispatchFetchEvent(int response_id,
237 const ServiceWorkerFetchRequest& request,
238 const DispatchFetchEventCallback& callback) override {
239 ServiceWorkerContextClient* client =
240 ServiceWorkerContextClient::ThreadSpecificInstance();
241 if (!client) {
242 callback.Run(SERVICE_WORKER_ERROR_ABORT, base::Time::Now());
243 return;
244 }
245 client->DispatchFetchEvent(response_id, request, callback);
246 }
247
248 private:
249 DISALLOW_COPY_AND_ASSIGN(FetchEventDispatcherImpl);
250 };
251
252 ServiceWorkerContextClient* 214 ServiceWorkerContextClient*
253 ServiceWorkerContextClient::ThreadSpecificInstance() { 215 ServiceWorkerContextClient::ThreadSpecificInstance() {
254 return g_worker_client_tls.Pointer()->Get(); 216 return g_worker_client_tls.Pointer()->Get();
255 } 217 }
256 218
257 ServiceWorkerContextClient::ServiceWorkerContextClient( 219 ServiceWorkerContextClient::ServiceWorkerContextClient(
258 int embedded_worker_id, 220 int embedded_worker_id,
259 int64_t service_worker_version_id, 221 int64_t service_worker_version_id,
260 const GURL& service_worker_scope, 222 const GURL& service_worker_scope,
261 const GURL& script_url, 223 const GURL& script_url,
(...skipping 21 matching lines...) Expand all
283 void ServiceWorkerContextClient::OnMessageReceived( 245 void ServiceWorkerContextClient::OnMessageReceived(
284 int thread_id, 246 int thread_id,
285 int embedded_worker_id, 247 int embedded_worker_id,
286 const IPC::Message& message) { 248 const IPC::Message& message) {
287 CHECK_EQ(embedded_worker_id_, embedded_worker_id); 249 CHECK_EQ(embedded_worker_id_, embedded_worker_id);
288 bool handled = true; 250 bool handled = true;
289 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerContextClient, message) 251 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerContextClient, message)
290 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ActivateEvent, OnActivateEvent) 252 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ActivateEvent, OnActivateEvent)
291 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ExtendableMessageEvent, 253 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ExtendableMessageEvent,
292 OnExtendableMessageEvent) 254 OnExtendableMessageEvent)
255 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FetchEvent, OnFetchEvent)
293 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEvent) 256 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEvent)
294 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NotificationClickEvent, 257 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NotificationClickEvent,
295 OnNotificationClickEvent) 258 OnNotificationClickEvent)
296 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NotificationCloseEvent, 259 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NotificationCloseEvent,
297 OnNotificationCloseEvent) 260 OnNotificationCloseEvent)
298 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent) 261 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent)
299 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClient, OnDidGetClient) 262 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClient, OnDidGetClient)
300 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClients, OnDidGetClients) 263 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClients, OnDidGetClients)
301 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowResponse, 264 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowResponse,
302 OnOpenWindowResponse) 265 OnOpenWindowResponse)
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 ServiceWorkerRegistrationObjectInfo registration_info; 378 ServiceWorkerRegistrationObjectInfo registration_info;
416 ServiceWorkerVersionAttributes version_attrs; 379 ServiceWorkerVersionAttributes version_attrs;
417 provider_context_->GetAssociatedRegistration(&registration_info, 380 provider_context_->GetAssociatedRegistration(&registration_info,
418 &version_attrs); 381 &version_attrs);
419 DCHECK_NE(registration_info.registration_id, 382 DCHECK_NE(registration_info.registration_id,
420 kInvalidServiceWorkerRegistrationId); 383 kInvalidServiceWorkerRegistrationId);
421 384
422 // Register Mojo interfaces. 385 // Register Mojo interfaces.
423 context_->interface_registry.AddInterface( 386 context_->interface_registry.AddInterface(
424 base::Bind(&BackgroundSyncClientImpl::Create)); 387 base::Bind(&BackgroundSyncClientImpl::Create));
425 context_->interface_registry.AddInterface(
426 base::Bind(&FetchEventDispatcherImpl::Create));
427 388
428 SetRegistrationInServiceWorkerGlobalScope(registration_info, version_attrs); 389 SetRegistrationInServiceWorkerGlobalScope(registration_info, version_attrs);
429 390
430 Send(new EmbeddedWorkerHostMsg_WorkerThreadStarted( 391 Send(new EmbeddedWorkerHostMsg_WorkerThreadStarted(
431 embedded_worker_id_, WorkerThread::GetCurrentId(), 392 embedded_worker_id_, WorkerThread::GetCurrentId(),
432 provider_context_->provider_id())); 393 provider_context_->provider_id()));
433 394
434 TRACE_EVENT_ASYNC_STEP_INTO0( 395 TRACE_EVENT_ASYNC_STEP_INTO0(
435 "ServiceWorker", 396 "ServiceWorker",
436 "ServiceWorkerContextClient::StartingWorkerContext", 397 "ServiceWorkerContextClient::StartingWorkerContext",
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 web_response.cacheStorageCacheName().utf8(), cors_exposed_header_names); 545 web_response.cacheStorageCacheName().utf8(), cors_exposed_header_names);
585 Send(new ServiceWorkerHostMsg_FetchEventResponse( 546 Send(new ServiceWorkerHostMsg_FetchEventResponse(
586 GetRoutingID(), response_id, SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, 547 GetRoutingID(), response_id, SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE,
587 response, base::Time::FromDoubleT(event_dispatch_time))); 548 response, base::Time::FromDoubleT(event_dispatch_time)));
588 } 549 }
589 550
590 void ServiceWorkerContextClient::didHandleFetchEvent( 551 void ServiceWorkerContextClient::didHandleFetchEvent(
591 int event_finish_id, 552 int event_finish_id,
592 blink::WebServiceWorkerEventResult result, 553 blink::WebServiceWorkerEventResult result,
593 double event_dispatch_time) { 554 double event_dispatch_time) {
594 const FetchCallback* callback = 555 Send(new ServiceWorkerHostMsg_FetchEventFinished(
595 context_->fetch_event_callbacks.Lookup(event_finish_id); 556 GetRoutingID(), event_finish_id, result,
596 if (!callback) 557 base::Time::FromDoubleT(event_dispatch_time)));
597 return;
598
599 callback->Run(result == blink::WebServiceWorkerEventResultCompleted
600 ? SERVICE_WORKER_OK
601 : SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED,
602 base::Time::FromDoubleT(event_dispatch_time));
603 context_->fetch_event_callbacks.Remove(event_finish_id);
604 } 558 }
605 559
606 void ServiceWorkerContextClient::didHandleNotificationClickEvent( 560 void ServiceWorkerContextClient::didHandleNotificationClickEvent(
607 int request_id, 561 int request_id,
608 blink::WebServiceWorkerEventResult result, 562 blink::WebServiceWorkerEventResult result,
609 double event_dispatch_time) { 563 double event_dispatch_time) {
610 Send(new ServiceWorkerHostMsg_NotificationClickEventFinished( 564 Send(new ServiceWorkerHostMsg_NotificationClickEventFinished(
611 GetRoutingID(), request_id, result, 565 GetRoutingID(), request_id, result,
612 base::Time::FromDoubleT(event_dispatch_time))); 566 base::Time::FromDoubleT(event_dispatch_time)));
613 } 567 }
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
833 request_id, params.message, params.source_origin, ports, 787 request_id, params.message, params.source_origin, ports,
834 WebServiceWorkerImpl::CreateHandle(worker)); 788 WebServiceWorkerImpl::CreateHandle(worker));
835 } 789 }
836 790
837 void ServiceWorkerContextClient::OnInstallEvent(int request_id) { 791 void ServiceWorkerContextClient::OnInstallEvent(int request_id) {
838 TRACE_EVENT0("ServiceWorker", 792 TRACE_EVENT0("ServiceWorker",
839 "ServiceWorkerContextClient::OnInstallEvent"); 793 "ServiceWorkerContextClient::OnInstallEvent");
840 proxy_->dispatchInstallEvent(request_id); 794 proxy_->dispatchInstallEvent(request_id);
841 } 795 }
842 796
843 void ServiceWorkerContextClient::DispatchFetchEvent( 797 void ServiceWorkerContextClient::OnFetchEvent(
844 int response_id, 798 int response_id,
845 const ServiceWorkerFetchRequest& request, 799 int event_finish_id,
846 const FetchCallback& callback) { 800 const ServiceWorkerFetchRequest& request) {
847 blink::WebServiceWorkerRequest webRequest; 801 blink::WebServiceWorkerRequest webRequest;
848 TRACE_EVENT0("ServiceWorker", 802 TRACE_EVENT0("ServiceWorker",
849 "ServiceWorkerContextClient::DispatchFetchEvent"); 803 "ServiceWorkerContextClient::OnFetchEvent");
850 int event_finish_id =
851 context_->fetch_event_callbacks.Add(new FetchCallback(callback));
852
853 webRequest.setURL(blink::WebURL(request.url)); 804 webRequest.setURL(blink::WebURL(request.url));
854 webRequest.setMethod(blink::WebString::fromUTF8(request.method)); 805 webRequest.setMethod(blink::WebString::fromUTF8(request.method));
855 for (ServiceWorkerHeaderMap::const_iterator it = request.headers.begin(); 806 for (ServiceWorkerHeaderMap::const_iterator it = request.headers.begin();
856 it != request.headers.end(); 807 it != request.headers.end();
857 ++it) { 808 ++it) {
858 webRequest.setHeader(blink::WebString::fromUTF8(it->first), 809 webRequest.setHeader(blink::WebString::fromUTF8(it->first),
859 blink::WebString::fromUTF8(it->second)); 810 blink::WebString::fromUTF8(it->second));
860 } 811 }
861 if (!request.blob_uuid.empty()) { 812 if (!request.blob_uuid.empty()) {
862 webRequest.setBlob(blink::WebString::fromUTF8(request.blob_uuid), 813 webRequest.setBlob(blink::WebString::fromUTF8(request.blob_uuid),
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1104 } 1055 }
1105 1056
1106 base::WeakPtr<ServiceWorkerContextClient> 1057 base::WeakPtr<ServiceWorkerContextClient>
1107 ServiceWorkerContextClient::GetWeakPtr() { 1058 ServiceWorkerContextClient::GetWeakPtr() {
1108 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); 1059 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread());
1109 DCHECK(context_); 1060 DCHECK(context_);
1110 return context_->weak_factory.GetWeakPtr(); 1061 return context_->weak_factory.GetWeakPtr();
1111 } 1062 }
1112 1063
1113 } // namespace content 1064 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/service_worker/service_worker_context_client.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698