blob: 9b6bc81db4716cd9ba7ba9fcbf7889d8d94d9b33 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/renderer/push_messaging/push_messaging_utils.h"
#include "content/public/common/service_names.mojom.h"
#include "third_party/blink/public/mojom/push_messaging/push_messaging_status.mojom.h"
#include "third_party/blink/public/platform/web_string.h"
namespace content {
namespace {
const char* PushRegistrationStatusToString(
blink::mojom::PushRegistrationStatus status) {
switch (status) {
case blink::mojom::PushRegistrationStatus::SUCCESS_FROM_PUSH_SERVICE:
case blink::mojom::PushRegistrationStatus::
SUCCESS_NEW_SUBSCRIPTION_FROM_PUSH_SERVICE:
return "Registration successful - from push service";
case blink::mojom::PushRegistrationStatus::NO_SERVICE_WORKER:
return "Registration failed - no Service Worker";
case blink::mojom::PushRegistrationStatus::SERVICE_NOT_AVAILABLE:
return "Registration failed - push service not available";
case blink::mojom::PushRegistrationStatus::LIMIT_REACHED:
return "Registration failed - registration limit has been reached";
case blink::mojom::PushRegistrationStatus::PERMISSION_DENIED:
return "Registration failed - permission denied";
case blink::mojom::PushRegistrationStatus::SERVICE_ERROR:
return "Registration failed - push service error";
case blink::mojom::PushRegistrationStatus::NO_SENDER_ID:
return "Registration failed - missing applicationServerKey, and "
"gcm_sender_id not found in manifest";
case blink::mojom::PushRegistrationStatus::STORAGE_ERROR:
return "Registration failed - storage error";
case blink::mojom::PushRegistrationStatus::SUCCESS_FROM_CACHE:
return "Registration successful - from cache";
case blink::mojom::PushRegistrationStatus::NETWORK_ERROR:
return "Registration failed - could not connect to push server";
case blink::mojom::PushRegistrationStatus::INCOGNITO_PERMISSION_DENIED:
// We split this out for UMA, but it must be indistinguishable to JS.
return PushRegistrationStatusToString(
blink::mojom::PushRegistrationStatus::PERMISSION_DENIED);
case blink::mojom::PushRegistrationStatus::PUBLIC_KEY_UNAVAILABLE:
return "Registration failed - could not retrieve the public key";
case blink::mojom::PushRegistrationStatus::MANIFEST_EMPTY_OR_MISSING:
return "Registration failed - missing applicationServerKey, and manifest "
"empty or missing";
case blink::mojom::PushRegistrationStatus::SENDER_ID_MISMATCH:
return "Registration failed - A subscription with a different "
"applicationServerKey (or gcm_sender_id) already exists; to "
"change the applicationServerKey, unsubscribe then resubscribe.";
case blink::mojom::PushRegistrationStatus::STORAGE_CORRUPT:
return "Registration failed - storage corrupt";
case blink::mojom::PushRegistrationStatus::RENDERER_SHUTDOWN:
return "Registration failed - renderer shutdown";
}
NOTREACHED();
return "";
}
} // namespace
blink::WebPushError PushRegistrationStatusToWebPushError(
blink::mojom::PushRegistrationStatus status) {
blink::WebPushError::ErrorType error_type =
blink::WebPushError::kErrorTypeAbort;
switch (status) {
case blink::mojom::PushRegistrationStatus::PERMISSION_DENIED:
error_type = blink::WebPushError::kErrorTypeNotAllowed;
break;
case blink::mojom::PushRegistrationStatus::SENDER_ID_MISMATCH:
error_type = blink::WebPushError::kErrorTypeInvalidState;
break;
case blink::mojom::PushRegistrationStatus::SUCCESS_FROM_PUSH_SERVICE:
case blink::mojom::PushRegistrationStatus::
SUCCESS_NEW_SUBSCRIPTION_FROM_PUSH_SERVICE:
case blink::mojom::PushRegistrationStatus::NO_SERVICE_WORKER:
case blink::mojom::PushRegistrationStatus::SERVICE_NOT_AVAILABLE:
case blink::mojom::PushRegistrationStatus::LIMIT_REACHED:
case blink::mojom::PushRegistrationStatus::SERVICE_ERROR:
case blink::mojom::PushRegistrationStatus::NO_SENDER_ID:
case blink::mojom::PushRegistrationStatus::STORAGE_ERROR:
case blink::mojom::PushRegistrationStatus::SUCCESS_FROM_CACHE:
case blink::mojom::PushRegistrationStatus::NETWORK_ERROR:
case blink::mojom::PushRegistrationStatus::INCOGNITO_PERMISSION_DENIED:
case blink::mojom::PushRegistrationStatus::PUBLIC_KEY_UNAVAILABLE:
case blink::mojom::PushRegistrationStatus::MANIFEST_EMPTY_OR_MISSING:
case blink::mojom::PushRegistrationStatus::STORAGE_CORRUPT:
case blink::mojom::PushRegistrationStatus::RENDERER_SHUTDOWN:
error_type = blink::WebPushError::kErrorTypeAbort;
break;
}
return blink::WebPushError(
error_type,
blink::WebString::FromUTF8(PushRegistrationStatusToString(status)));
}
} // namespace content