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

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

Issue 1171173002: [Background Sync] Use Mojo IPC to fire background sync events (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing style nits Created 5 years, 6 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
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 "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 // worker thread. 171 // worker thread.
172 struct ServiceWorkerContextClient::WorkerContextData { 172 struct ServiceWorkerContextClient::WorkerContextData {
173 using ClientsCallbacksMap = 173 using ClientsCallbacksMap =
174 IDMap<blink::WebServiceWorkerClientsCallbacks, IDMapOwnPointer>; 174 IDMap<blink::WebServiceWorkerClientsCallbacks, IDMapOwnPointer>;
175 using ClaimClientsCallbacksMap = 175 using ClaimClientsCallbacksMap =
176 IDMap<blink::WebServiceWorkerClientsClaimCallbacks, IDMapOwnPointer>; 176 IDMap<blink::WebServiceWorkerClientsClaimCallbacks, IDMapOwnPointer>;
177 using ClientCallbacksMap = 177 using ClientCallbacksMap =
178 IDMap<blink::WebServiceWorkerClientCallbacks, IDMapOwnPointer>; 178 IDMap<blink::WebServiceWorkerClientCallbacks, IDMapOwnPointer>;
179 using SkipWaitingCallbacksMap = 179 using SkipWaitingCallbacksMap =
180 IDMap<blink::WebServiceWorkerSkipWaitingCallbacks, IDMapOwnPointer>; 180 IDMap<blink::WebServiceWorkerSkipWaitingCallbacks, IDMapOwnPointer>;
181 using SyncEventCallbacksMap =
182 IDMap<const mojo::Callback<void(ServiceWorkerEventStatus)>,
183 IDMapExternalPointer>;
181 184
182 explicit WorkerContextData(ServiceWorkerContextClient* owner) 185 explicit WorkerContextData(ServiceWorkerContextClient* owner)
183 : weak_factory(owner) {} 186 : weak_factory(owner) {}
184 187
185 ~WorkerContextData() { 188 ~WorkerContextData() {
186 DCHECK(thread_checker.CalledOnValidThread()); 189 DCHECK(thread_checker.CalledOnValidThread());
187 } 190 }
188 191
189 // Pending callbacks for GetClientDocuments(). 192 // Pending callbacks for GetClientDocuments().
190 ClientsCallbacksMap clients_callbacks; 193 ClientsCallbacksMap clients_callbacks;
191 194
192 // Pending callbacks for OpenWindow() and FocusClient(). 195 // Pending callbacks for OpenWindow() and FocusClient().
193 ClientCallbacksMap client_callbacks; 196 ClientCallbacksMap client_callbacks;
194 197
195 // Pending callbacks for SkipWaiting(). 198 // Pending callbacks for SkipWaiting().
196 SkipWaitingCallbacksMap skip_waiting_callbacks; 199 SkipWaitingCallbacksMap skip_waiting_callbacks;
197 200
198 // Pending callbacks for ClaimClients(). 201 // Pending callbacks for ClaimClients().
199 ClaimClientsCallbacksMap claim_clients_callbacks; 202 ClaimClientsCallbacksMap claim_clients_callbacks;
200 203
204 // Pending callbacks for Background Sync Events
205 SyncEventCallbacksMap sync_event_callbacks_;
jkarlin 2015/06/18 18:13:57 no trailing _ in struct member names.
iclelland 2015/06/19 13:44:32 Done.
206
201 base::ThreadChecker thread_checker; 207 base::ThreadChecker thread_checker;
202 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; 208 base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory;
203 }; 209 };
204 210
205 ServiceWorkerContextClient* 211 ServiceWorkerContextClient*
206 ServiceWorkerContextClient::ThreadSpecificInstance() { 212 ServiceWorkerContextClient::ThreadSpecificInstance() {
207 return g_worker_client_tls.Pointer()->Get(); 213 return g_worker_client_tls.Pointer()->Get();
208 } 214 }
209 215
210 ServiceWorkerContextClient::ServiceWorkerContextClient( 216 ServiceWorkerContextClient::ServiceWorkerContextClient(
(...skipping 25 matching lines...) Expand all
236 void ServiceWorkerContextClient::OnMessageReceived( 242 void ServiceWorkerContextClient::OnMessageReceived(
237 int thread_id, 243 int thread_id,
238 int embedded_worker_id, 244 int embedded_worker_id,
239 const IPC::Message& message) { 245 const IPC::Message& message) {
240 CHECK_EQ(embedded_worker_id_, embedded_worker_id); 246 CHECK_EQ(embedded_worker_id_, embedded_worker_id);
241 bool handled = true; 247 bool handled = true;
242 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerContextClient, message) 248 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerContextClient, message)
243 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ActivateEvent, OnActivateEvent) 249 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ActivateEvent, OnActivateEvent)
244 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FetchEvent, OnFetchEvent) 250 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FetchEvent, OnFetchEvent)
245 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEvent) 251 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEvent)
246 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SyncEvent, OnSyncEvent)
247 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NotificationClickEvent, 252 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NotificationClickEvent,
248 OnNotificationClickEvent) 253 OnNotificationClickEvent)
249 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent) 254 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent)
250 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GeofencingEvent, OnGeofencingEvent) 255 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GeofencingEvent, OnGeofencingEvent)
251 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginConnectEvent, 256 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginConnectEvent,
252 OnCrossOriginConnectEvent) 257 OnCrossOriginConnectEvent)
253 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToWorker, OnPostMessage) 258 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToWorker, OnPostMessage)
254 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginMessageToWorker, 259 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginMessageToWorker,
255 OnCrossOriginMessageToWorker) 260 OnCrossOriginMessageToWorker)
256 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SendStashedMessagePorts, 261 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SendStashedMessagePorts,
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 } 524 }
520 525
521 // TODO(chasej): crbug.com/486890 - Remove when matching blink changes land 526 // TODO(chasej): crbug.com/486890 - Remove when matching blink changes land
522 void ServiceWorkerContextClient::didHandleSyncEvent(int request_id) { 527 void ServiceWorkerContextClient::didHandleSyncEvent(int request_id) {
523 didHandleSyncEvent(request_id, blink::WebServiceWorkerEventResultCompleted); 528 didHandleSyncEvent(request_id, blink::WebServiceWorkerEventResultCompleted);
524 } 529 }
525 530
526 void ServiceWorkerContextClient::didHandleSyncEvent( 531 void ServiceWorkerContextClient::didHandleSyncEvent(
527 int request_id, 532 int request_id,
528 blink::WebServiceWorkerEventResult result) { 533 blink::WebServiceWorkerEventResult result) {
529 Send(new ServiceWorkerHostMsg_SyncEventFinished(GetRoutingID(), request_id, 534 const SyncCallback* callback =
530 result)); 535 context_->sync_event_callbacks_.Lookup(request_id);
536 if (!callback)
537 return;
538 if (result == blink::WebServiceWorkerEventResultCompleted) {
539 callback->Run(SERVICE_WORKER_EVENT_STATUS_COMPLETED);
540 } else {
541 callback->Run(SERVICE_WORKER_EVENT_STATUS_REJECTED);
542 }
543 context_->sync_event_callbacks_.Remove(request_id);
531 } 544 }
532 545
533 void ServiceWorkerContextClient::didHandleCrossOriginConnectEvent( 546 void ServiceWorkerContextClient::didHandleCrossOriginConnectEvent(
534 int request_id, 547 int request_id,
535 bool accept_connection) { 548 bool accept_connection) {
536 Send(new ServiceWorkerHostMsg_CrossOriginConnectEventFinished( 549 Send(new ServiceWorkerHostMsg_CrossOriginConnectEventFinished(
537 GetRoutingID(), request_id, accept_connection)); 550 GetRoutingID(), request_id, accept_connection));
538 } 551 }
539 552
540 blink::WebServiceWorkerNetworkProvider* 553 blink::WebServiceWorkerNetworkProvider*
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 WebMessagePortChannelImpl* channel_impl = 654 WebMessagePortChannelImpl* channel_impl =
642 static_cast<WebMessagePortChannelImpl*>(channel); 655 static_cast<WebMessagePortChannelImpl*>(channel);
643 main_thread_task_runner_->PostTask( 656 main_thread_task_runner_->PostTask(
644 FROM_HERE, 657 FROM_HERE,
645 base::Bind(&StashMessagePortOnMainThread, 658 base::Bind(&StashMessagePortOnMainThread,
646 sender_, GetRoutingID(), 659 sender_, GetRoutingID(),
647 base::Unretained(channel_impl), 660 base::Unretained(channel_impl),
648 static_cast<base::string16>(name))); 661 static_cast<base::string16>(name)));
649 } 662 }
650 663
664 void ServiceWorkerContextClient::DispatchSyncEvent(
665 const SyncCallback& callbacks) {
666 TRACE_EVENT0("ServiceWorker",
667 "ServiceWorkerScriptContext::DispatchSyncEvent");
668 int request_id = context_->sync_event_callbacks_.Add(&callbacks);
669 proxy_->dispatchSyncEvent(request_id);
670 }
671
651 void ServiceWorkerContextClient::Send(IPC::Message* message) { 672 void ServiceWorkerContextClient::Send(IPC::Message* message) {
652 sender_->Send(message); 673 sender_->Send(message);
653 } 674 }
654 675
655 void ServiceWorkerContextClient::SendWorkerStarted() { 676 void ServiceWorkerContextClient::SendWorkerStarted() {
656 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); 677 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread());
657 TRACE_EVENT_ASYNC_END0("ServiceWorker", 678 TRACE_EVENT_ASYNC_END0("ServiceWorker",
658 "ServiceWorkerContextClient::StartingWorkerContext", 679 "ServiceWorkerContextClient::StartingWorkerContext",
659 this); 680 this);
660 Send(new EmbeddedWorkerHostMsg_WorkerStarted(embedded_worker_id_)); 681 Send(new EmbeddedWorkerHostMsg_WorkerStarted(embedded_worker_id_));
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 webRequest.setCredentialsMode( 748 webRequest.setCredentialsMode(
728 GetBlinkFetchCredentialsMode(request.credentials_mode)); 749 GetBlinkFetchCredentialsMode(request.credentials_mode));
729 webRequest.setRequestContext( 750 webRequest.setRequestContext(
730 GetBlinkRequestContext(request.request_context_type)); 751 GetBlinkRequestContext(request.request_context_type));
731 webRequest.setFrameType(GetBlinkFrameType(request.frame_type)); 752 webRequest.setFrameType(GetBlinkFrameType(request.frame_type));
732 webRequest.setIsReload(request.is_reload); 753 webRequest.setIsReload(request.is_reload);
733 fetch_start_timings_[request_id] = base::TimeTicks::Now(); 754 fetch_start_timings_[request_id] = base::TimeTicks::Now();
734 proxy_->dispatchFetchEvent(request_id, webRequest); 755 proxy_->dispatchFetchEvent(request_id, webRequest);
735 } 756 }
736 757
737 void ServiceWorkerContextClient::OnSyncEvent(int request_id) { 758 void ServiceWorkerContextClient::OnSyncEvent(int request_id) {
jkarlin 2015/06/18 18:13:57 I believe you need to remove this.
iclelland 2015/06/19 13:44:32 Done.
738 TRACE_EVENT0("ServiceWorker", 759 TRACE_EVENT0("ServiceWorker",
739 "ServiceWorkerContextClient::OnSyncEvent"); 760 "ServiceWorkerContextClient::OnSyncEvent");
740 proxy_->dispatchSyncEvent(request_id); 761 proxy_->dispatchSyncEvent(request_id);
741 } 762 }
742 763
743 void ServiceWorkerContextClient::OnNotificationClickEvent( 764 void ServiceWorkerContextClient::OnNotificationClickEvent(
744 int request_id, 765 int request_id,
745 int64_t persistent_notification_id, 766 int64_t persistent_notification_id,
746 const PlatformNotificationData& notification_data) { 767 const PlatformNotificationData& notification_data) {
747 TRACE_EVENT0("ServiceWorker", 768 TRACE_EVENT0("ServiceWorker",
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
976 } 997 }
977 998
978 base::WeakPtr<ServiceWorkerContextClient> 999 base::WeakPtr<ServiceWorkerContextClient>
979 ServiceWorkerContextClient::GetWeakPtr() { 1000 ServiceWorkerContextClient::GetWeakPtr() {
980 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); 1001 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread());
981 DCHECK(context_); 1002 DCHECK(context_);
982 return context_->weak_factory.GetWeakPtr(); 1003 return context_->weak_factory.GetWeakPtr();
983 } 1004 }
984 1005
985 } // namespace content 1006 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698