// Copyright 2014 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_dispatcher.h" #include "content/common/push_messaging_messages.h" #include "content/renderer/render_view_impl.h" #include "ipc/ipc_message.h" #include "third_party/WebKit/public/platform/WebPushError.h" #include "third_party/WebKit/public/platform/WebPushRegistration.h" #include "third_party/WebKit/public/platform/WebString.h" #include "url/gurl.h" using blink::WebString; namespace content { PushMessagingDispatcher::PushMessagingDispatcher(RenderViewImpl* render_view) : RenderViewObserver(render_view) {} PushMessagingDispatcher::~PushMessagingDispatcher() {} bool PushMessagingDispatcher::OnMessageReceived(const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(PushMessagingDispatcher, message) IPC_MESSAGE_HANDLER(PushMessagingMsg_RegisterSuccess, OnRegisterSuccess) IPC_MESSAGE_HANDLER(PushMessagingMsg_RegisterError, OnRegisterError) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; } void PushMessagingDispatcher::registerPushMessaging( const WebString& sender_id, blink::WebPushRegistrationCallbacks* callbacks) { DCHECK(callbacks); int callbacks_id = registration_callbacks_.Add(callbacks); Send(new PushMessagingHostMsg_Register( routing_id(), callbacks_id, sender_id.utf8())); } void PushMessagingDispatcher::OnRegisterSuccess( int32 callbacks_id, const GURL& endpoint, const std::string& registration_id) { blink::WebPushRegistrationCallbacks* callbacks = registration_callbacks_.Lookup(callbacks_id); CHECK(callbacks); scoped_ptr registration( new blink::WebPushRegistration( WebString::fromUTF8(endpoint.spec()), WebString::fromUTF8(registration_id))); callbacks->onSuccess(registration.release()); registration_callbacks_.Remove(callbacks_id); } void PushMessagingDispatcher::OnRegisterError(int32 callbacks_id) { const std::string kAbortErrorReason = "Registration failed."; blink::WebPushRegistrationCallbacks* callbacks = registration_callbacks_.Lookup(callbacks_id); CHECK(callbacks); scoped_ptr error( new blink::WebPushError( blink::WebPushError::ErrorTypeAbort, WebString::fromUTF8(kAbortErrorReason))); callbacks->onError(error.release()); registration_callbacks_.Remove(callbacks_id); } } // namespace content