Index: chrome/browser/services/gcm/push_messaging_service_impl.cc |
diff --git a/chrome/browser/services/gcm/push_messaging_service_impl.cc b/chrome/browser/services/gcm/push_messaging_service_impl.cc |
index c11dae7ff3c16cb72e0677e0f194dd1a6675310d..9070db3d6e925e5eb1ac11bf2c885229b50daa51 100644 |
--- a/chrome/browser/services/gcm/push_messaging_service_impl.cc |
+++ b/chrome/browser/services/gcm/push_messaging_service_impl.cc |
@@ -59,6 +59,12 @@ namespace gcm { |
namespace { |
const int kMaxRegistrations = 1000000; |
+void RecordDeliveryStatus(content::PushDeliveryStatus status) { |
+ UMA_HISTOGRAM_ENUMERATION("PushMessaging.DeliveryStatus", |
+ status, |
+ content::PUSH_DELIVERY_STATUS_LAST + 1); |
+} |
+ |
void RecordUserVisibleStatus(content::PushUserVisibleStatus status) { |
UMA_HISTOGRAM_ENUMERATION("PushMessaging.UserVisibleStatus", |
status, |
@@ -243,7 +249,6 @@ void PushMessagingServiceImpl::DeliverMessageCallback( |
int64 service_worker_registration_id, |
const GCMClient::IncomingMessage& message, |
content::PushDeliveryStatus status) { |
- // TODO(mvanouwerkerk): UMA logging. |
// TODO(mvanouwerkerk): Show a warning in the developer console of the |
// Service Worker corresponding to app_id (and/or on an internals page). |
// TODO(mvanouwerkerk): Is there a way to recover from failure? |
@@ -265,6 +270,7 @@ void PushMessagingServiceImpl::DeliverMessageCallback( |
UnregisterCallback()); |
break; |
} |
+ RecordDeliveryStatus(status); |
} |
void PushMessagingServiceImpl::RequireUserVisibleUX( |
@@ -585,10 +591,23 @@ void PushMessagingServiceImpl::DidRegister( |
GCMClient::Result result) { |
content::PushRegistrationStatus status = |
content::PUSH_REGISTRATION_STATUS_SERVICE_ERROR; |
- if (result == GCMClient::SUCCESS) { |
- status = content::PUSH_REGISTRATION_STATUS_SUCCESS_FROM_PUSH_SERVICE; |
- application_id.PersistToDisk(profile_); |
- IncreasePushRegistrationCount(1, false /* is_pending */); |
+ switch (result) { |
+ case GCMClient::SUCCESS: |
+ status = content::PUSH_REGISTRATION_STATUS_SUCCESS_FROM_PUSH_SERVICE; |
+ application_id.PersistToDisk(profile_); |
+ IncreasePushRegistrationCount(1, false /* is_pending */); |
+ break; |
+ case GCMClient::INVALID_PARAMETER: |
+ case GCMClient::GCM_DISABLED: |
+ case GCMClient::ASYNC_OPERATION_PENDING: |
+ case GCMClient::SERVER_ERROR: |
+ case GCMClient::UNKNOWN_ERROR: |
+ status = content::PUSH_REGISTRATION_STATUS_SERVICE_ERROR; |
+ break; |
+ case GCMClient::NETWORK_ERROR: |
+ case GCMClient::TTL_EXCEEDED: |
+ status = content::PUSH_REGISTRATION_STATUS_NETWORK_ERROR; |
+ break; |
} |
RegisterEnd(callback, registration_id, status); |
DecreasePushRegistrationCount(1, true /* was_pending */); |
@@ -698,28 +717,24 @@ void PushMessagingServiceImpl::DidUnregister( |
// Internal calls pass a null callback. |
if (!callback.is_null()) { |
switch (result) { |
- case GCMClient::SUCCESS: |
- callback.Run(content::PUSH_UNREGISTRATION_STATUS_SUCCESS_UNREGISTER); |
- break; |
- case GCMClient::NETWORK_ERROR: |
- case GCMClient::TTL_EXCEEDED: |
- case GCMClient::ASYNC_OPERATION_PENDING: |
- callback.Run( |
- retry_on_failure |
- ? content:: |
- PUSH_UNREGISTRATION_STATUS_SUCCESS_WILL_RETRY_NETWORK_ERROR |
- : content::PUSH_UNREGISTRATION_STATUS_NETWORK_ERROR); |
- break; |
- case GCMClient::SERVER_ERROR: |
- case GCMClient::INVALID_PARAMETER: |
- case GCMClient::GCM_DISABLED: |
- case GCMClient::UNKNOWN_ERROR: |
- callback.Run(content::PUSH_UNREGISTRATION_STATUS_UNKNOWN_ERROR); |
- break; |
- default: |
- NOTREACHED() << "Unexpected GCMClient::Result value."; |
- callback.Run(content::PUSH_UNREGISTRATION_STATUS_UNKNOWN_ERROR); |
- break; |
+ case GCMClient::SUCCESS: |
+ callback.Run(content::PUSH_UNREGISTRATION_STATUS_SUCCESS_UNREGISTERED); |
+ break; |
+ case GCMClient::INVALID_PARAMETER: |
+ case GCMClient::GCM_DISABLED: |
+ case GCMClient::ASYNC_OPERATION_PENDING: |
+ case GCMClient::SERVER_ERROR: |
+ case GCMClient::UNKNOWN_ERROR: |
+ callback.Run(content::PUSH_UNREGISTRATION_STATUS_SERVICE_ERROR); |
+ break; |
+ case GCMClient::NETWORK_ERROR: |
+ case GCMClient::TTL_EXCEEDED: |
+ callback.Run( |
+ retry_on_failure |
+ ? content:: |
+ PUSH_UNREGISTRATION_STATUS_PENDING_WILL_RETRY_NETWORK_ERROR |
+ : content::PUSH_UNREGISTRATION_STATUS_NETWORK_ERROR); |
+ break; |
} |
} |
} |