blob: a2a4efb1e0ecd69dd8e574e7c871078e290cb9f9 [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 "third_party/blink/renderer/modules/push_messaging/push_messaging_utils.h"
#include "third_party/blink/public/mojom/push_messaging/push_messaging_status.mojom-blink.h"
#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h"
#include "third_party/blink/renderer/platform/wtf/vector.h"
namespace blink {
String PushRegistrationStatusToString(mojom::PushRegistrationStatus status) {
switch (status) {
case mojom::PushRegistrationStatus::SUCCESS_FROM_PUSH_SERVICE:
case mojom::PushRegistrationStatus::
SUCCESS_NEW_SUBSCRIPTION_FROM_PUSH_SERVICE:
return "Registration successful - from push service";
case mojom::PushRegistrationStatus::NO_SERVICE_WORKER:
return "Registration failed - no Service Worker";
case mojom::PushRegistrationStatus::SERVICE_NOT_AVAILABLE:
return "Registration failed - push service not available";
case mojom::PushRegistrationStatus::LIMIT_REACHED:
return "Registration failed - registration limit has been reached";
case mojom::PushRegistrationStatus::PERMISSION_DENIED:
return "Registration failed - permission denied";
case mojom::PushRegistrationStatus::SERVICE_ERROR:
return "Registration failed - push service error";
case mojom::PushRegistrationStatus::NO_SENDER_ID:
return "Registration failed - missing applicationServerKey, and "
"gcm_sender_id not found in manifest";
case mojom::PushRegistrationStatus::STORAGE_ERROR:
return "Registration failed - storage error";
case mojom::PushRegistrationStatus::SUCCESS_FROM_CACHE:
return "Registration successful - from cache";
case mojom::PushRegistrationStatus::NETWORK_ERROR:
return "Registration failed - could not connect to push server";
case mojom::PushRegistrationStatus::INCOGNITO_PERMISSION_DENIED:
// We split this out for UMA, but it must be indistinguishable to JS.
return PushRegistrationStatusToString(
mojom::PushRegistrationStatus::PERMISSION_DENIED);
case mojom::PushRegistrationStatus::PUBLIC_KEY_UNAVAILABLE:
return "Registration failed - could not retrieve the public key";
case mojom::PushRegistrationStatus::MANIFEST_EMPTY_OR_MISSING:
return "Registration failed - missing applicationServerKey, and manifest "
"empty or missing";
case 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 mojom::PushRegistrationStatus::STORAGE_CORRUPT:
return "Registration failed - storage corrupt";
case mojom::PushRegistrationStatus::RENDERER_SHUTDOWN:
return "Registration failed - renderer shutdown";
case mojom::PushRegistrationStatus::UNSUPPORTED_GCM_SENDER_ID:
return "Registration failed - GCM Sender IDs are no longer supported, "
"please upgrade to VAPID authentication instead";
}
NOTREACHED();
return String();
}
mojom::PushErrorType PushRegistrationStatusToPushErrorType(
mojom::PushRegistrationStatus status) {
mojom::PushErrorType error_type = mojom::PushErrorType::ABORT;
switch (status) {
case mojom::PushRegistrationStatus::PERMISSION_DENIED:
error_type = mojom::PushErrorType::NOT_ALLOWED;
break;
case mojom::PushRegistrationStatus::SENDER_ID_MISMATCH:
error_type = mojom::PushErrorType::INVALID_STATE;
break;
case mojom::PushRegistrationStatus::SUCCESS_FROM_PUSH_SERVICE:
case mojom::PushRegistrationStatus::
SUCCESS_NEW_SUBSCRIPTION_FROM_PUSH_SERVICE:
case mojom::PushRegistrationStatus::NO_SERVICE_WORKER:
case mojom::PushRegistrationStatus::SERVICE_NOT_AVAILABLE:
case mojom::PushRegistrationStatus::LIMIT_REACHED:
case mojom::PushRegistrationStatus::SERVICE_ERROR:
case mojom::PushRegistrationStatus::NO_SENDER_ID:
case mojom::PushRegistrationStatus::STORAGE_ERROR:
case mojom::PushRegistrationStatus::SUCCESS_FROM_CACHE:
case mojom::PushRegistrationStatus::NETWORK_ERROR:
case mojom::PushRegistrationStatus::INCOGNITO_PERMISSION_DENIED:
case mojom::PushRegistrationStatus::PUBLIC_KEY_UNAVAILABLE:
case mojom::PushRegistrationStatus::MANIFEST_EMPTY_OR_MISSING:
case mojom::PushRegistrationStatus::STORAGE_CORRUPT:
case mojom::PushRegistrationStatus::RENDERER_SHUTDOWN:
case mojom::PushRegistrationStatus::UNSUPPORTED_GCM_SENDER_ID:
error_type = mojom::PushErrorType::ABORT;
break;
}
return error_type;
}
} // namespace blink