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

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: Addressed comments 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 663 matching lines...) Expand 10 before | Expand all | Expand 10 after
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, &notification_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
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
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(&notification_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
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
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(&notification_click_requests_, info.id, 1915 return RunIDMapCallback(&notification_click_requests_, info.id,
1866 SERVICE_WORKER_ERROR_TIMEOUT); 1916 SERVICE_WORKER_ERROR_TIMEOUT);
1917 case REQUEST_NOTIFICATION_CLOSE:
1918 return RunIDMapCallback(&notification_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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698