| 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;
|
| }
|
| }
|
| }
|
|
|