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

Side by Side Diff: content/browser/service_worker/service_worker_version.cc

Issue 1579413004: Move push event dispatching out of ServiceWorkerVersion. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix DispatchSimpleEvent comment Created 4 years, 11 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/browser/service_worker/service_worker_version.h" 5 #include "content/browser/service_worker/service_worker_version.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <map> 9 #include <map>
10 #include <string> 10 #include <string>
(...skipping 667 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 ServiceWorkerStatusCode status = 678 ServiceWorkerStatusCode status =
679 embedded_worker_->SendMessage(ServiceWorkerMsg_NotificationClickEvent( 679 embedded_worker_->SendMessage(ServiceWorkerMsg_NotificationClickEvent(
680 request_id, persistent_notification_id, notification_data, 680 request_id, persistent_notification_id, notification_data,
681 action_index)); 681 action_index));
682 if (status != SERVICE_WORKER_OK) { 682 if (status != SERVICE_WORKER_OK) {
683 notification_click_requests_.Remove(request_id); 683 notification_click_requests_.Remove(request_id);
684 RunSoon(base::Bind(callback, status)); 684 RunSoon(base::Bind(callback, status));
685 } 685 }
686 } 686 }
687 687
688 void ServiceWorkerVersion::DispatchPushEvent(const StatusCallback& callback,
689 const std::string& data) {
690 OnBeginEvent();
691 DCHECK_EQ(ACTIVATED, status()) << status();
692 if (running_status() != RUNNING) {
693 // Schedule calling this method after starting the worker.
694 StartWorker(base::Bind(&RunTaskAfterStartWorker,
695 weak_factory_.GetWeakPtr(), callback,
696 base::Bind(&self::DispatchPushEvent,
697 weak_factory_.GetWeakPtr(),
698 callback, data)));
699 return;
700 }
701
702 int request_id = AddRequest(callback, &push_requests_, REQUEST_PUSH,
703 ServiceWorkerMetrics::EventType::PUSH);
704 ServiceWorkerStatusCode status = embedded_worker_->SendMessage(
705 ServiceWorkerMsg_PushEvent(request_id, data));
706 if (status != SERVICE_WORKER_OK) {
707 push_requests_.Remove(request_id);
708 RunSoon(base::Bind(callback, status));
709 }
710 }
711
712 void ServiceWorkerVersion::DispatchCrossOriginMessageEvent( 688 void ServiceWorkerVersion::DispatchCrossOriginMessageEvent(
713 const NavigatorConnectClient& client, 689 const NavigatorConnectClient& client,
714 const base::string16& message, 690 const base::string16& message,
715 const std::vector<TransferredMessagePort>& sent_message_ports, 691 const std::vector<TransferredMessagePort>& sent_message_ports,
716 const StatusCallback& callback) { 692 const StatusCallback& callback) {
717 OnBeginEvent(); 693 OnBeginEvent();
718 // Unlike in the case of DispatchMessageEvent, here the caller is assumed to 694 // Unlike in the case of DispatchMessageEvent, here the caller is assumed to
719 // have already put all the sent message ports on hold. So no need to do that 695 // have already put all the sent message ports on hold. So no need to do that
720 // here again. 696 // here again.
721 697
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
1013 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_GetClients, 989 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_GetClients,
1014 OnGetClients) 990 OnGetClients)
1015 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ActivateEventFinished, 991 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ActivateEventFinished,
1016 OnActivateEventFinished) 992 OnActivateEventFinished)
1017 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_InstallEventFinished, 993 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_InstallEventFinished,
1018 OnInstallEventFinished) 994 OnInstallEventFinished)
1019 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_FetchEventFinished, 995 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_FetchEventFinished,
1020 OnFetchEventFinished) 996 OnFetchEventFinished)
1021 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_NotificationClickEventFinished, 997 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_NotificationClickEventFinished,
1022 OnNotificationClickEventFinished) 998 OnNotificationClickEventFinished)
1023 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PushEventFinished,
1024 OnPushEventFinished)
1025 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_OpenWindow, 999 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_OpenWindow,
1026 OnOpenWindow) 1000 OnOpenWindow)
1027 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_SetCachedMetadata, 1001 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_SetCachedMetadata,
1028 OnSetCachedMetadata) 1002 OnSetCachedMetadata)
1029 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ClearCachedMetadata, 1003 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ClearCachedMetadata,
1030 OnClearCachedMetadata) 1004 OnClearCachedMetadata)
1031 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PostMessageToClient, 1005 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PostMessageToClient,
1032 OnPostMessageToClient) 1006 OnPostMessageToClient)
1033 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_FocusClient, 1007 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_FocusClient,
1034 OnFocusClient) 1008 OnFocusClient)
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 } 1178 }
1205 1179
1206 ServiceWorkerMetrics::RecordEventDuration( 1180 ServiceWorkerMetrics::RecordEventDuration(
1207 request->event_type, base::TimeTicks::Now() - request->start_time); 1181 request->event_type, base::TimeTicks::Now() - request->start_time);
1208 1182
1209 scoped_refptr<ServiceWorkerVersion> protect(this); 1183 scoped_refptr<ServiceWorkerVersion> protect(this);
1210 request->callback.Run(SERVICE_WORKER_OK); 1184 request->callback.Run(SERVICE_WORKER_OK);
1211 RemoveCallbackAndStopIfRedundant(&notification_click_requests_, request_id); 1185 RemoveCallbackAndStopIfRedundant(&notification_click_requests_, request_id);
1212 } 1186 }
1213 1187
1214 void ServiceWorkerVersion::OnPushEventFinished( 1188 void ServiceWorkerVersion::OnSimpleEventResponse(
1215 int request_id, 1189 int request_id,
1216 blink::WebServiceWorkerEventResult result) { 1190 blink::WebServiceWorkerEventResult result) {
1217 TRACE_EVENT1("ServiceWorker", 1191 // Copy error callback before calling FinishRequest.
1218 "ServiceWorkerVersion::OnPushEventFinished", 1192 PendingRequest<StatusCallback>* request = custom_requests_.Lookup(request_id);
1219 "Request id", request_id); 1193 DCHECK(request) << "Invalid request id";
1220 PendingRequest<StatusCallback>* request = push_requests_.Lookup(request_id); 1194 StatusCallback callback = request->callback;
1221 if (!request) { 1195
1222 NOTREACHED() << "Got unexpected message: " << request_id; 1196 FinishRequest(request_id);
1223 return; 1197
1224 }
1225 ServiceWorkerStatusCode status = SERVICE_WORKER_OK; 1198 ServiceWorkerStatusCode status = SERVICE_WORKER_OK;
1226 if (result == blink::WebServiceWorkerEventResultRejected) 1199 if (result == blink::WebServiceWorkerEventResultRejected)
1227 status = SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED; 1200 status = SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED;
1228 1201 callback.Run(status);
1229 ServiceWorkerMetrics::RecordEventDuration(
1230 request->event_type, base::TimeTicks::Now() - request->start_time);
1231
1232 scoped_refptr<ServiceWorkerVersion> protect(this);
1233 request->callback.Run(status);
1234 RemoveCallbackAndStopIfRedundant(&push_requests_, request_id);
1235 } 1202 }
1236 1203
1237 void ServiceWorkerVersion::OnOpenWindow(int request_id, GURL url) { 1204 void ServiceWorkerVersion::OnOpenWindow(int request_id, GURL url) {
1238 // Just abort if we are shutting down. 1205 // Just abort if we are shutting down.
1239 if (!context_) 1206 if (!context_)
1240 return; 1207 return;
1241 1208
1242 if (!url.is_valid()) { 1209 if (!url.is_valid()) {
1243 DVLOG(1) << "Received unexpected invalid URL from renderer process."; 1210 DVLOG(1) << "Received unexpected invalid URL from renderer process.";
1244 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 1211 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
(...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after
1762 !stop_callbacks_.empty()) { 1729 !stop_callbacks_.empty()) {
1763 return; 1730 return;
1764 } 1731 }
1765 1732
1766 embedded_worker_->StopIfIdle(); 1733 embedded_worker_->StopIfIdle();
1767 } 1734 }
1768 1735
1769 bool ServiceWorkerVersion::HasInflightRequests() const { 1736 bool ServiceWorkerVersion::HasInflightRequests() const {
1770 return !activate_requests_.IsEmpty() || !install_requests_.IsEmpty() || 1737 return !activate_requests_.IsEmpty() || !install_requests_.IsEmpty() ||
1771 !fetch_requests_.IsEmpty() || 1738 !fetch_requests_.IsEmpty() ||
1772 !notification_click_requests_.IsEmpty() || !push_requests_.IsEmpty() || 1739 !notification_click_requests_.IsEmpty() ||
1773 !custom_requests_.IsEmpty() || !streaming_url_request_jobs_.empty(); 1740 !custom_requests_.IsEmpty() || !streaming_url_request_jobs_.empty();
1774 } 1741 }
1775 1742
1776 void ServiceWorkerVersion::RecordStartWorkerResult( 1743 void ServiceWorkerVersion::RecordStartWorkerResult(
1777 ServiceWorkerStatusCode status) { 1744 ServiceWorkerStatusCode status) {
1778 base::TimeTicks start_time = start_time_; 1745 base::TimeTicks start_time = start_time_;
1779 ClearTick(&start_time_); 1746 ClearTick(&start_time_);
1780 1747
1781 if (context_) 1748 if (context_)
1782 context_->UpdateVersionFailureCount(version_id_, status); 1749 context_->UpdateVersionFailureCount(version_id_, status);
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1872 return RunIDMapCallback(&install_requests_, info.id, 1839 return RunIDMapCallback(&install_requests_, info.id,
1873 SERVICE_WORKER_ERROR_TIMEOUT); 1840 SERVICE_WORKER_ERROR_TIMEOUT);
1874 case REQUEST_FETCH: 1841 case REQUEST_FETCH:
1875 return RunIDMapCallback( 1842 return RunIDMapCallback(
1876 &fetch_requests_, info.id, SERVICE_WORKER_ERROR_TIMEOUT, 1843 &fetch_requests_, info.id, SERVICE_WORKER_ERROR_TIMEOUT,
1877 /* The other args are ignored for non-OK status. */ 1844 /* The other args are ignored for non-OK status. */
1878 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, ServiceWorkerResponse()); 1845 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, ServiceWorkerResponse());
1879 case REQUEST_NOTIFICATION_CLICK: 1846 case REQUEST_NOTIFICATION_CLICK:
1880 return RunIDMapCallback(&notification_click_requests_, info.id, 1847 return RunIDMapCallback(&notification_click_requests_, info.id,
1881 SERVICE_WORKER_ERROR_TIMEOUT); 1848 SERVICE_WORKER_ERROR_TIMEOUT);
1882 case REQUEST_PUSH:
1883 return RunIDMapCallback(&push_requests_, info.id,
1884 SERVICE_WORKER_ERROR_TIMEOUT);
1885 case REQUEST_CUSTOM: 1849 case REQUEST_CUSTOM:
1886 return RunIDMapCallback(&custom_requests_, info.id, 1850 return RunIDMapCallback(&custom_requests_, info.id,
1887 SERVICE_WORKER_ERROR_TIMEOUT); 1851 SERVICE_WORKER_ERROR_TIMEOUT);
1888 case NUM_REQUEST_TYPES: 1852 case NUM_REQUEST_TYPES:
1889 break; 1853 break;
1890 } 1854 }
1891 NOTREACHED() << "Got unexpected request type: " << info.type; 1855 NOTREACHED() << "Got unexpected request type: " << info.type;
1892 return false; 1856 return false;
1893 } 1857 }
1894 1858
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
1994 // callbacks for events). 1958 // callbacks for events).
1995 // TODO(kinuko): Consider if we want to add queue+resend mechanism here. 1959 // TODO(kinuko): Consider if we want to add queue+resend mechanism here.
1996 RunIDMapCallbacks(&activate_requests_, 1960 RunIDMapCallbacks(&activate_requests_,
1997 SERVICE_WORKER_ERROR_ACTIVATE_WORKER_FAILED); 1961 SERVICE_WORKER_ERROR_ACTIVATE_WORKER_FAILED);
1998 RunIDMapCallbacks(&install_requests_, 1962 RunIDMapCallbacks(&install_requests_,
1999 SERVICE_WORKER_ERROR_INSTALL_WORKER_FAILED); 1963 SERVICE_WORKER_ERROR_INSTALL_WORKER_FAILED);
2000 RunIDMapCallbacks(&fetch_requests_, SERVICE_WORKER_ERROR_FAILED, 1964 RunIDMapCallbacks(&fetch_requests_, SERVICE_WORKER_ERROR_FAILED,
2001 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, 1965 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK,
2002 ServiceWorkerResponse()); 1966 ServiceWorkerResponse());
2003 RunIDMapCallbacks(&notification_click_requests_, SERVICE_WORKER_ERROR_FAILED); 1967 RunIDMapCallbacks(&notification_click_requests_, SERVICE_WORKER_ERROR_FAILED);
2004 RunIDMapCallbacks(&push_requests_, SERVICE_WORKER_ERROR_FAILED);
2005 RunIDMapCallbacks(&custom_requests_, SERVICE_WORKER_ERROR_FAILED); 1968 RunIDMapCallbacks(&custom_requests_, SERVICE_WORKER_ERROR_FAILED);
2006 1969
2007 // Close all mojo services. This will also fire and clear all callbacks 1970 // Close all mojo services. This will also fire and clear all callbacks
2008 // for messages that are still outstanding for those services. 1971 // for messages that are still outstanding for those services.
2009 mojo_services_.clear(); 1972 mojo_services_.clear();
2010 1973
2011 // TODO(falken): Call SWURLRequestJob::ClearStream here? 1974 // TODO(falken): Call SWURLRequestJob::ClearStream here?
2012 streaming_url_request_jobs_.clear(); 1975 streaming_url_request_jobs_.clear();
2013 1976
2014 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this)); 1977 FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this));
(...skipping 11 matching lines...) Expand all
2026 void ServiceWorkerVersion::OnBeginEvent() { 1989 void ServiceWorkerVersion::OnBeginEvent() {
2027 if (should_exclude_from_uma_ || running_status() != RUNNING || 1990 if (should_exclude_from_uma_ || running_status() != RUNNING ||
2028 idle_time_.is_null()) { 1991 idle_time_.is_null()) {
2029 return; 1992 return;
2030 } 1993 }
2031 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - 1994 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() -
2032 idle_time_); 1995 idle_time_);
2033 } 1996 }
2034 1997
2035 } // namespace content 1998 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698