Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 674 ServiceWorkerStatusCode status = | 674 ServiceWorkerStatusCode status = |
| 675 embedded_worker_->SendMessage(ServiceWorkerMsg_NotificationClickEvent( | 675 embedded_worker_->SendMessage(ServiceWorkerMsg_NotificationClickEvent( |
| 676 request_id, persistent_notification_id, notification_data, | 676 request_id, persistent_notification_id, notification_data, |
| 677 action_index)); | 677 action_index)); |
| 678 if (status != SERVICE_WORKER_OK) { | 678 if (status != SERVICE_WORKER_OK) { |
| 679 notification_click_requests_.Remove(request_id); | 679 notification_click_requests_.Remove(request_id); |
| 680 RunSoon(base::Bind(callback, status)); | 680 RunSoon(base::Bind(callback, status)); |
| 681 } | 681 } |
| 682 } | 682 } |
| 683 | 683 |
| 684 void ServiceWorkerVersion::DispatchNotificationCloseEvent( | |
|
Peter Beverloo
2016/01/26 16:13:45
(I'm not really looking at this bit because Marijn
Nina
2016/01/27 18:48:58
Acknowledged.
| |
| 685 const StatusCallback& callback, | |
| 686 int64_t persistent_notification_id, | |
| 687 const PlatformNotificationData& notification_data) { | |
| 688 OnBeginEvent(); | |
| 689 DCHECK_EQ(ACTIVATED, status()) << status(); | |
| 690 if (running_status() != RUNNING) { | |
| 691 // Schedule calling this method after starting the worker. | |
| 692 StartWorker(base::Bind( | |
| 693 &RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(), callback, | |
| 694 base::Bind(&self::DispatchNotificationCloseEvent, | |
| 695 weak_factory_.GetWeakPtr(), callback, | |
| 696 persistent_notification_id, notification_data))); | |
| 697 return; | |
| 698 } | |
| 699 | |
| 700 int request_id = AddRequest( | |
| 701 callback, ¬ification_close_requests_, REQUEST_NOTIFICATION_CLOSE, | |
| 702 ServiceWorkerMetrics::EventType::NOTIFICATION_CLOSE); | |
| 703 ServiceWorkerStatusCode status = | |
| 704 embedded_worker_->SendMessage(ServiceWorkerMsg_NotificationCloseEvent( | |
| 705 request_id, persistent_notification_id, notification_data)); | |
| 706 if (status != SERVICE_WORKER_OK) { | |
| 707 notification_close_requests_.Remove(request_id); | |
| 708 RunSoon(base::Bind(callback, status)); | |
| 709 } | |
| 710 } | |
| 711 | |
| 684 void ServiceWorkerVersion::DispatchPushEvent(const StatusCallback& callback, | 712 void ServiceWorkerVersion::DispatchPushEvent(const StatusCallback& callback, |
| 685 const std::string& data) { | 713 const std::string& data) { |
| 686 OnBeginEvent(); | 714 OnBeginEvent(); |
| 687 DCHECK_EQ(ACTIVATED, status()) << status(); | 715 DCHECK_EQ(ACTIVATED, status()) << status(); |
| 688 if (running_status() != RUNNING) { | 716 if (running_status() != RUNNING) { |
| 689 // Schedule calling this method after starting the worker. | 717 // Schedule calling this method after starting the worker. |
| 690 StartWorker(base::Bind(&RunTaskAfterStartWorker, | 718 StartWorker(base::Bind(&RunTaskAfterStartWorker, |
| 691 weak_factory_.GetWeakPtr(), callback, | 719 weak_factory_.GetWeakPtr(), callback, |
| 692 base::Bind(&self::DispatchPushEvent, | 720 base::Bind(&self::DispatchPushEvent, |
| 693 weak_factory_.GetWeakPtr(), | 721 weak_factory_.GetWeakPtr(), |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1009 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ActivateEventFinished, | 1037 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ActivateEventFinished, |
| 1010 OnActivateEventFinished) | 1038 OnActivateEventFinished) |
| 1011 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_InstallEventFinished, | 1039 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_InstallEventFinished, |
| 1012 OnInstallEventFinished) | 1040 OnInstallEventFinished) |
| 1013 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_FetchEventFinished, | 1041 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_FetchEventFinished, |
| 1014 OnFetchEventFinished) | 1042 OnFetchEventFinished) |
| 1015 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_NotificationClickEventFinished, | 1043 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_NotificationClickEventFinished, |
| 1016 OnNotificationClickEventFinished) | 1044 OnNotificationClickEventFinished) |
| 1017 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PushEventFinished, | 1045 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PushEventFinished, |
| 1018 OnPushEventFinished) | 1046 OnPushEventFinished) |
| 1047 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_NotificationCloseEventFinished, | |
| 1048 OnNotificationCloseEventFinished) | |
| 1019 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_OpenWindow, | 1049 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_OpenWindow, |
| 1020 OnOpenWindow) | 1050 OnOpenWindow) |
| 1021 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_SetCachedMetadata, | 1051 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_SetCachedMetadata, |
| 1022 OnSetCachedMetadata) | 1052 OnSetCachedMetadata) |
| 1023 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ClearCachedMetadata, | 1053 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ClearCachedMetadata, |
| 1024 OnClearCachedMetadata) | 1054 OnClearCachedMetadata) |
| 1025 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PostMessageToClient, | 1055 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PostMessageToClient, |
| 1026 OnPostMessageToClient) | 1056 OnPostMessageToClient) |
| 1027 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_FocusClient, | 1057 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_FocusClient, |
| 1028 OnFocusClient) | 1058 OnFocusClient) |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1221 status = SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED; | 1251 status = SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED; |
| 1222 | 1252 |
| 1223 ServiceWorkerMetrics::RecordEventDuration( | 1253 ServiceWorkerMetrics::RecordEventDuration( |
| 1224 request->event_type, base::TimeTicks::Now() - request->start_time); | 1254 request->event_type, base::TimeTicks::Now() - request->start_time); |
| 1225 | 1255 |
| 1226 scoped_refptr<ServiceWorkerVersion> protect(this); | 1256 scoped_refptr<ServiceWorkerVersion> protect(this); |
| 1227 request->callback.Run(status); | 1257 request->callback.Run(status); |
| 1228 RemoveCallbackAndStopIfRedundant(&push_requests_, request_id); | 1258 RemoveCallbackAndStopIfRedundant(&push_requests_, request_id); |
| 1229 } | 1259 } |
| 1230 | 1260 |
| 1261 void ServiceWorkerVersion::OnNotificationCloseEventFinished(int request_id) { | |
| 1262 TRACE_EVENT1("ServiceWorker", | |
| 1263 "ServiceWorkerVersion::OnNotificationCloseEventFinished", | |
| 1264 "Request id", request_id); | |
| 1265 PendingRequest<StatusCallback>* request = | |
| 1266 notification_close_requests_.Lookup(request_id); | |
| 1267 if (!request) { | |
| 1268 NOTREACHED() << "Got unexpected message: " << request_id; | |
| 1269 return; | |
| 1270 } | |
| 1271 | |
| 1272 ServiceWorkerMetrics::RecordEventDuration( | |
| 1273 request->event_type, base::TimeTicks::Now() - request->start_time); | |
| 1274 | |
| 1275 scoped_refptr<ServiceWorkerVersion> protect(this); | |
| 1276 request->callback.Run(SERVICE_WORKER_OK); | |
| 1277 RemoveCallbackAndStopIfRedundant(¬ification_close_requests_, request_id); | |
| 1278 } | |
| 1279 | |
| 1231 void ServiceWorkerVersion::OnOpenWindow(int request_id, GURL url) { | 1280 void ServiceWorkerVersion::OnOpenWindow(int request_id, GURL url) { |
| 1232 // Just abort if we are shutting down. | 1281 // Just abort if we are shutting down. |
| 1233 if (!context_) | 1282 if (!context_) |
| 1234 return; | 1283 return; |
| 1235 | 1284 |
| 1236 if (!url.is_valid()) { | 1285 if (!url.is_valid()) { |
| 1237 DVLOG(1) << "Received unexpected invalid URL from renderer process."; | 1286 DVLOG(1) << "Received unexpected invalid URL from renderer process."; |
| 1238 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 1287 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 1239 base::Bind(&KillEmbeddedWorkerProcess, | 1288 base::Bind(&KillEmbeddedWorkerProcess, |
| 1240 embedded_worker_->process_id(), | 1289 embedded_worker_->process_id(), |
| (...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1757 return; | 1806 return; |
| 1758 } | 1807 } |
| 1759 | 1808 |
| 1760 embedded_worker_->StopIfIdle(); | 1809 embedded_worker_->StopIfIdle(); |
| 1761 } | 1810 } |
| 1762 | 1811 |
| 1763 bool ServiceWorkerVersion::HasInflightRequests() const { | 1812 bool ServiceWorkerVersion::HasInflightRequests() const { |
| 1764 return !activate_requests_.IsEmpty() || !install_requests_.IsEmpty() || | 1813 return !activate_requests_.IsEmpty() || !install_requests_.IsEmpty() || |
| 1765 !fetch_requests_.IsEmpty() || | 1814 !fetch_requests_.IsEmpty() || |
| 1766 !notification_click_requests_.IsEmpty() || !push_requests_.IsEmpty() || | 1815 !notification_click_requests_.IsEmpty() || !push_requests_.IsEmpty() || |
| 1816 !notification_close_requests_.IsEmpty() || | |
| 1767 !custom_requests_.IsEmpty() || !streaming_url_request_jobs_.empty(); | 1817 !custom_requests_.IsEmpty() || !streaming_url_request_jobs_.empty(); |
| 1768 } | 1818 } |
| 1769 | 1819 |
| 1770 void ServiceWorkerVersion::RecordStartWorkerResult( | 1820 void ServiceWorkerVersion::RecordStartWorkerResult( |
| 1771 ServiceWorkerStatusCode status) { | 1821 ServiceWorkerStatusCode status) { |
| 1772 base::TimeTicks start_time = start_time_; | 1822 base::TimeTicks start_time = start_time_; |
| 1773 ClearTick(&start_time_); | 1823 ClearTick(&start_time_); |
| 1774 | 1824 |
| 1775 if (context_) | 1825 if (context_) |
| 1776 context_->UpdateVersionFailureCount(version_id_, status); | 1826 context_->UpdateVersionFailureCount(version_id_, status); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1857 return RunIDMapCallback(&install_requests_, info.id, | 1907 return RunIDMapCallback(&install_requests_, info.id, |
| 1858 SERVICE_WORKER_ERROR_TIMEOUT); | 1908 SERVICE_WORKER_ERROR_TIMEOUT); |
| 1859 case REQUEST_FETCH: | 1909 case REQUEST_FETCH: |
| 1860 return RunIDMapCallback( | 1910 return RunIDMapCallback( |
| 1861 &fetch_requests_, info.id, SERVICE_WORKER_ERROR_TIMEOUT, | 1911 &fetch_requests_, info.id, SERVICE_WORKER_ERROR_TIMEOUT, |
| 1862 /* The other args are ignored for non-OK status. */ | 1912 /* The other args are ignored for non-OK status. */ |
| 1863 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, ServiceWorkerResponse()); | 1913 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, ServiceWorkerResponse()); |
| 1864 case REQUEST_NOTIFICATION_CLICK: | 1914 case REQUEST_NOTIFICATION_CLICK: |
| 1865 return RunIDMapCallback(¬ification_click_requests_, info.id, | 1915 return RunIDMapCallback(¬ification_click_requests_, info.id, |
| 1866 SERVICE_WORKER_ERROR_TIMEOUT); | 1916 SERVICE_WORKER_ERROR_TIMEOUT); |
| 1917 case REQUEST_NOTIFICATION_CLOSE: | |
| 1918 return RunIDMapCallback(¬ification_close_requests_, info.id, | |
| 1919 SERVICE_WORKER_ERROR_TIMEOUT); | |
| 1867 case REQUEST_PUSH: | 1920 case REQUEST_PUSH: |
| 1868 return RunIDMapCallback(&push_requests_, info.id, | 1921 return RunIDMapCallback(&push_requests_, info.id, |
| 1869 SERVICE_WORKER_ERROR_TIMEOUT); | 1922 SERVICE_WORKER_ERROR_TIMEOUT); |
| 1870 case REQUEST_CUSTOM: | 1923 case REQUEST_CUSTOM: |
| 1871 return RunIDMapCallback(&custom_requests_, info.id, | 1924 return RunIDMapCallback(&custom_requests_, info.id, |
| 1872 SERVICE_WORKER_ERROR_TIMEOUT); | 1925 SERVICE_WORKER_ERROR_TIMEOUT); |
| 1873 case NUM_REQUEST_TYPES: | 1926 case NUM_REQUEST_TYPES: |
| 1874 break; | 1927 break; |
| 1875 } | 1928 } |
| 1876 NOTREACHED() << "Got unexpected request type: " << info.type; | 1929 NOTREACHED() << "Got unexpected request type: " << info.type; |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2011 void ServiceWorkerVersion::OnBeginEvent() { | 2064 void ServiceWorkerVersion::OnBeginEvent() { |
| 2012 if (should_exclude_from_uma_ || running_status() != RUNNING || | 2065 if (should_exclude_from_uma_ || running_status() != RUNNING || |
| 2013 idle_time_.is_null()) { | 2066 idle_time_.is_null()) { |
| 2014 return; | 2067 return; |
| 2015 } | 2068 } |
| 2016 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - | 2069 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - |
| 2017 idle_time_); | 2070 idle_time_); |
| 2018 } | 2071 } |
| 2019 | 2072 |
| 2020 } // namespace content | 2073 } // namespace content |
| OLD | NEW |