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

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

Issue 1619703002: Implement notificationclose event (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed redundant TODO 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 638 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 ServiceWorkerStatusCode status = 649 ServiceWorkerStatusCode status =
650 embedded_worker_->SendMessage(ServiceWorkerMsg_NotificationClickEvent( 650 embedded_worker_->SendMessage(ServiceWorkerMsg_NotificationClickEvent(
651 request_id, persistent_notification_id, notification_data, 651 request_id, persistent_notification_id, notification_data,
652 action_index)); 652 action_index));
653 if (status != SERVICE_WORKER_OK) { 653 if (status != SERVICE_WORKER_OK) {
654 notification_click_requests_.Remove(request_id); 654 notification_click_requests_.Remove(request_id);
655 RunSoon(base::Bind(callback, status)); 655 RunSoon(base::Bind(callback, status));
656 } 656 }
657 } 657 }
658 658
659 void ServiceWorkerVersion::DispatchNotificationCloseEvent(
660 const StatusCallback& callback,
661 int64_t persistent_notification_id,
662 const PlatformNotificationData& notification_data) {
663 OnBeginEvent();
664 DCHECK_EQ(ACTIVATED, status()) << status();
665 if (running_status() != RUNNING) {
666 // Schedule calling this method after starting the worker.
667 StartWorker(base::Bind(
668 &RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(), callback,
669 base::Bind(&self::DispatchNotificationCloseEvent,
670 weak_factory_.GetWeakPtr(), callback,
671 persistent_notification_id, notification_data)));
672 return;
673 }
674
675 int request_id = AddRequest(
676 callback, &notification_close_requests_, REQUEST_NOTIFICATION_CLOSE,
677 ServiceWorkerMetrics::EventType::NOTIFICATION_CLOSE);
678 ServiceWorkerStatusCode status =
679 embedded_worker_->SendMessage(ServiceWorkerMsg_NotificationCloseEvent(
680 request_id, persistent_notification_id, notification_data));
681 if (status != SERVICE_WORKER_OK) {
682 notification_close_requests_.Remove(request_id);
683 RunSoon(base::Bind(callback, status));
684 }
685 }
686
659 void ServiceWorkerVersion::DispatchPushEvent(const StatusCallback& callback, 687 void ServiceWorkerVersion::DispatchPushEvent(const StatusCallback& callback,
660 const std::string& data) { 688 const std::string& data) {
661 OnBeginEvent(); 689 OnBeginEvent();
662 DCHECK_EQ(ACTIVATED, status()) << status(); 690 DCHECK_EQ(ACTIVATED, status()) << status();
663 if (running_status() != RUNNING) { 691 if (running_status() != RUNNING) {
664 // Schedule calling this method after starting the worker. 692 // Schedule calling this method after starting the worker.
665 StartWorker(base::Bind(&RunTaskAfterStartWorker, 693 StartWorker(base::Bind(&RunTaskAfterStartWorker,
666 weak_factory_.GetWeakPtr(), callback, 694 weak_factory_.GetWeakPtr(), callback,
667 base::Bind(&self::DispatchPushEvent, 695 base::Bind(&self::DispatchPushEvent,
668 weak_factory_.GetWeakPtr(), 696 weak_factory_.GetWeakPtr(),
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
979 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ActivateEventFinished, 1007 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ActivateEventFinished,
980 OnActivateEventFinished) 1008 OnActivateEventFinished)
981 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_InstallEventFinished, 1009 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_InstallEventFinished,
982 OnInstallEventFinished) 1010 OnInstallEventFinished)
983 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_FetchEventFinished, 1011 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_FetchEventFinished,
984 OnFetchEventFinished) 1012 OnFetchEventFinished)
985 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_NotificationClickEventFinished, 1013 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_NotificationClickEventFinished,
986 OnNotificationClickEventFinished) 1014 OnNotificationClickEventFinished)
987 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PushEventFinished, 1015 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PushEventFinished,
988 OnPushEventFinished) 1016 OnPushEventFinished)
1017 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_NotificationCloseEventFinished,
1018 OnNotificationCloseEventFinished)
989 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_OpenWindow, 1019 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_OpenWindow,
990 OnOpenWindow) 1020 OnOpenWindow)
991 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_SetCachedMetadata, 1021 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_SetCachedMetadata,
992 OnSetCachedMetadata) 1022 OnSetCachedMetadata)
993 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ClearCachedMetadata, 1023 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ClearCachedMetadata,
994 OnClearCachedMetadata) 1024 OnClearCachedMetadata)
995 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PostMessageToClient, 1025 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PostMessageToClient,
996 OnPostMessageToClient) 1026 OnPostMessageToClient)
997 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_FocusClient, 1027 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_FocusClient,
998 OnFocusClient) 1028 OnFocusClient)
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
1191 status = SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED; 1221 status = SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED;
1192 1222
1193 ServiceWorkerMetrics::RecordEventDuration( 1223 ServiceWorkerMetrics::RecordEventDuration(
1194 request->event_type, base::TimeTicks::Now() - request->start_time); 1224 request->event_type, base::TimeTicks::Now() - request->start_time);
1195 1225
1196 scoped_refptr<ServiceWorkerVersion> protect(this); 1226 scoped_refptr<ServiceWorkerVersion> protect(this);
1197 request->callback.Run(status); 1227 request->callback.Run(status);
1198 RemoveCallbackAndStopIfRedundant(&push_requests_, request_id); 1228 RemoveCallbackAndStopIfRedundant(&push_requests_, request_id);
1199 } 1229 }
1200 1230
1231 void ServiceWorkerVersion::OnNotificationCloseEventFinished(int request_id) {
1232 TRACE_EVENT1("ServiceWorker",
1233 "ServiceWorkerVersion::OnNotificationCloseEventFinished",
1234 "Request id", request_id);
1235 PendingRequest<StatusCallback>* request =
1236 notification_close_requests_.Lookup(request_id);
1237 if (!request) {
1238 NOTREACHED() << "Got unexpected message: " << request_id;
1239 return;
1240 }
1241
1242 ServiceWorkerMetrics::RecordEventDuration(
1243 request->event_type, base::TimeTicks::Now() - request->start_time);
1244
1245 scoped_refptr<ServiceWorkerVersion> protect(this);
1246 request->callback.Run(SERVICE_WORKER_OK);
1247 RemoveCallbackAndStopIfRedundant(&notification_close_requests_, request_id);
1248 }
1249
1201 void ServiceWorkerVersion::OnOpenWindow(int request_id, GURL url) { 1250 void ServiceWorkerVersion::OnOpenWindow(int request_id, GURL url) {
1202 // Just abort if we are shutting down. 1251 // Just abort if we are shutting down.
1203 if (!context_) 1252 if (!context_)
1204 return; 1253 return;
1205 1254
1206 if (!url.is_valid()) { 1255 if (!url.is_valid()) {
1207 DVLOG(1) << "Received unexpected invalid URL from renderer process."; 1256 DVLOG(1) << "Received unexpected invalid URL from renderer process.";
1208 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 1257 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
1209 base::Bind(&KillEmbeddedWorkerProcess, 1258 base::Bind(&KillEmbeddedWorkerProcess,
1210 embedded_worker_->process_id(), 1259 embedded_worker_->process_id(),
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after
1727 return; 1776 return;
1728 } 1777 }
1729 1778
1730 embedded_worker_->StopIfIdle(); 1779 embedded_worker_->StopIfIdle();
1731 } 1780 }
1732 1781
1733 bool ServiceWorkerVersion::HasInflightRequests() const { 1782 bool ServiceWorkerVersion::HasInflightRequests() const {
1734 return !activate_requests_.IsEmpty() || !install_requests_.IsEmpty() || 1783 return !activate_requests_.IsEmpty() || !install_requests_.IsEmpty() ||
1735 !fetch_requests_.IsEmpty() || 1784 !fetch_requests_.IsEmpty() ||
1736 !notification_click_requests_.IsEmpty() || !push_requests_.IsEmpty() || 1785 !notification_click_requests_.IsEmpty() || !push_requests_.IsEmpty() ||
1786 !notification_close_requests_.IsEmpty() ||
1737 !custom_requests_.IsEmpty() || !streaming_url_request_jobs_.empty(); 1787 !custom_requests_.IsEmpty() || !streaming_url_request_jobs_.empty();
1738 } 1788 }
1739 1789
1740 void ServiceWorkerVersion::RecordStartWorkerResult( 1790 void ServiceWorkerVersion::RecordStartWorkerResult(
1741 ServiceWorkerStatusCode status) { 1791 ServiceWorkerStatusCode status) {
1742 base::TimeTicks start_time = start_time_; 1792 base::TimeTicks start_time = start_time_;
1743 ClearTick(&start_time_); 1793 ClearTick(&start_time_);
1744 1794
1745 ServiceWorkerMetrics::RecordStartWorkerStatus(status, 1795 ServiceWorkerMetrics::RecordStartWorkerStatus(status,
1746 IsInstalled(prestart_status_)); 1796 IsInstalled(prestart_status_));
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1824 return RunIDMapCallback(&install_requests_, info.id, 1874 return RunIDMapCallback(&install_requests_, info.id,
1825 SERVICE_WORKER_ERROR_TIMEOUT); 1875 SERVICE_WORKER_ERROR_TIMEOUT);
1826 case REQUEST_FETCH: 1876 case REQUEST_FETCH:
1827 return RunIDMapCallback( 1877 return RunIDMapCallback(
1828 &fetch_requests_, info.id, SERVICE_WORKER_ERROR_TIMEOUT, 1878 &fetch_requests_, info.id, SERVICE_WORKER_ERROR_TIMEOUT,
1829 /* The other args are ignored for non-OK status. */ 1879 /* The other args are ignored for non-OK status. */
1830 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, ServiceWorkerResponse()); 1880 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, ServiceWorkerResponse());
1831 case REQUEST_NOTIFICATION_CLICK: 1881 case REQUEST_NOTIFICATION_CLICK:
1832 return RunIDMapCallback(&notification_click_requests_, info.id, 1882 return RunIDMapCallback(&notification_click_requests_, info.id,
1833 SERVICE_WORKER_ERROR_TIMEOUT); 1883 SERVICE_WORKER_ERROR_TIMEOUT);
1884 case REQUEST_NOTIFICATION_CLOSE:
1885 return RunIDMapCallback(&notification_close_requests_, info.id,
1886 SERVICE_WORKER_ERROR_TIMEOUT);
1834 case REQUEST_PUSH: 1887 case REQUEST_PUSH:
1835 return RunIDMapCallback(&push_requests_, info.id, 1888 return RunIDMapCallback(&push_requests_, info.id,
1836 SERVICE_WORKER_ERROR_TIMEOUT); 1889 SERVICE_WORKER_ERROR_TIMEOUT);
1837 case REQUEST_CUSTOM: 1890 case REQUEST_CUSTOM:
1838 return RunIDMapCallback(&custom_requests_, info.id, 1891 return RunIDMapCallback(&custom_requests_, info.id,
1839 SERVICE_WORKER_ERROR_TIMEOUT); 1892 SERVICE_WORKER_ERROR_TIMEOUT);
1840 case NUM_REQUEST_TYPES: 1893 case NUM_REQUEST_TYPES:
1841 break; 1894 break;
1842 } 1895 }
1843 NOTREACHED() << "Got unexpected request type: " << info.type; 1896 NOTREACHED() << "Got unexpected request type: " << info.type;
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
1978 void ServiceWorkerVersion::OnBeginEvent() { 2031 void ServiceWorkerVersion::OnBeginEvent() {
1979 if (should_exclude_from_uma_ || running_status() != RUNNING || 2032 if (should_exclude_from_uma_ || running_status() != RUNNING ||
1980 idle_time_.is_null()) { 2033 idle_time_.is_null()) {
1981 return; 2034 return;
1982 } 2035 }
1983 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - 2036 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() -
1984 idle_time_); 2037 idle_time_);
1985 } 2038 }
1986 2039
1987 } // namespace content 2040 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698