Chromium Code Reviews| 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..86d90ce5416c5e8006b93ad902bf2bf3f8b03413 100644 |
| --- a/chrome/browser/services/gcm/push_messaging_service_impl.cc |
| +++ b/chrome/browser/services/gcm/push_messaging_service_impl.cc |
| @@ -59,6 +59,11 @@ namespace gcm { |
| namespace { |
| const int kMaxRegistrations = 1000000; |
| +void RecordDeliveryStatus(content::PushDeliveryStatus status) { |
| + UMA_HISTOGRAM_ENUMERATION("PushMessaging.DeliveryStatus", |
| + status, |
| + content::PUSH_DELIVERY_STATUS_LAST + 1); |
| +} |
|
Ilya Sherman
2015/02/19 21:01:45
nit: Please leave a blank line after this one.
johnme
2015/02/20 11:34:19
Done.
|
| void RecordUserVisibleStatus(content::PushUserVisibleStatus status) { |
| UMA_HISTOGRAM_ENUMERATION("PushMessaging.UserVisibleStatus", |
| status, |
| @@ -243,7 +248,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 +269,7 @@ void PushMessagingServiceImpl::DeliverMessageCallback( |
| UnregisterCallback()); |
| break; |
| } |
| + RecordDeliveryStatus(status); |
| } |
| void PushMessagingServiceImpl::RequireUserVisibleUX( |
| @@ -583,12 +588,24 @@ void PushMessagingServiceImpl::DidRegister( |
| const content::PushMessagingService::RegisterCallback& callback, |
| const std::string& registration_id, |
| 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 */); |
| + content::PushRegistrationStatus status; |
| + 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 +715,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_SUCCESS_WILL_RETRY_NETWORK_ERROR |
| + : content::PUSH_UNREGISTRATION_STATUS_NETWORK_ERROR); |
| + break; |
| } |
| } |
| } |