diff --git a/third_party/blink/renderer/modules/push_messaging/push_manager.cc b/third_party/blink/renderer/modules/push_messaging/push_manager.cc index bae0c24044f6ee..c4c16b2aaca249 100644 --- a/third_party/blink/renderer/modules/push_messaging/push_manager.cc +++ b/third_party/blink/renderer/modules/push_messaging/push_manager.cc @@ -14,6 +14,7 @@ #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/frame/frame.h" #include "third_party/blink/renderer/core/frame/local_frame.h" +#include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/modules/push_messaging/push_error.h" #include "third_party/blink/renderer/modules/push_messaging/push_messaging_bridge.h" #include "third_party/blink/renderer/modules/push_messaging/push_messaging_client.h" @@ -66,6 +67,16 @@ ScriptPromise PushManager::subscribe( if (exception_state.HadException()) return ScriptPromise(); + if (!options->IsApplicationServerKeyVapid()) { + ExecutionContext::From(script_state) + ->AddConsoleMessage(ConsoleMessage::Create( + mojom::ConsoleMessageSource::kJavaScript, + mojom::ConsoleMessageLevel::kWarning, + "The provided application server key is not a VAPID key. Only " + "VAPID keys will be supported in the future. For more information " + "check https://crbug.com/979235.")); + } + auto* resolver = MakeGarbageCollected(script_state); ScriptPromise promise = resolver->Promise(); diff --git a/third_party/blink/renderer/modules/push_messaging/push_subscription_options.cc b/third_party/blink/renderer/modules/push_messaging/push_subscription_options.cc index 2a670c72809321..1db027ac0bc4db 100644 --- a/third_party/blink/renderer/modules/push_messaging/push_subscription_options.cc +++ b/third_party/blink/renderer/modules/push_messaging/push_subscription_options.cc @@ -98,6 +98,13 @@ PushSubscriptionOptions::PushSubscriptionOptions( application_server_key.data(), SafeCast(application_server_key.size()))) {} +bool PushSubscriptionOptions::IsApplicationServerKeyVapid() const { + if (!application_server_key_) + return false; + return application_server_key_->ByteLength() == 65 && + static_cast(application_server_key_->Data())[0] == 0x04; +} + void PushSubscriptionOptions::Trace(blink::Visitor* visitor) { visitor->Trace(application_server_key_); ScriptWrappable::Trace(visitor); diff --git a/third_party/blink/renderer/modules/push_messaging/push_subscription_options.h b/third_party/blink/renderer/modules/push_messaging/push_subscription_options.h index e0dc22a98fc38a..3907c3643d9603 100644 --- a/third_party/blink/renderer/modules/push_messaging/push_subscription_options.h +++ b/third_party/blink/renderer/modules/push_messaging/push_subscription_options.h @@ -44,6 +44,9 @@ class PushSubscriptionOptions final : public ScriptWrappable { return application_server_key_; } + // Whether the application server key follows the VAPID protocol. + bool IsApplicationServerKeyVapid() const; + void Trace(blink::Visitor* visitor) override; private: