Chromium Code Reviews| Index: content/renderer/push_messaging_dispatcher.cc |
| diff --git a/content/renderer/push_messaging_dispatcher.cc b/content/renderer/push_messaging_dispatcher.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6b148014de3ab6121ac4d9025b2a528e75d77a73 |
| --- /dev/null |
| +++ b/content/renderer/push_messaging_dispatcher.cc |
| @@ -0,0 +1,98 @@ |
| +// 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 "third_party/WebKit/public/platform/WebPushRegistration.h" |
| + |
| +namespace { |
| + |
| +const char* PushMessagingStatusToString(content::PushMessagingStatus status) { |
| + switch (status) { |
| + case content::PUSH_MESSAGING_STATUS_OK: |
| + return "Successful operation"; |
| + case content::PUSH_MESSAGING_STATUS_INVALID_PARAMETER: |
| + return "Invalid parameter"; |
| + case content::PUSH_MESSAGING_STATUS_NOT_SIGNED_IN: |
| + return "Profile not signed in"; |
| + case content::PUSH_MESSAGING_STATUS_OPERATION_PENDING: |
| + return "Previous asynchronous operation is still pending"; |
| + case content::PUSH_MESSAGING_STATUS_NETWORK_ERROR: |
| + return "Network socket error"; |
| + case content::PUSH_MESSAGING_STATUS_SERVER_ERROR: |
| + return "Server error"; |
| + case content::PUSH_MESSAGING_STATUS_TTL_EXCEEDED: |
| + return "Exceeded the specified TTL during message sending"; |
| + case content::PUSH_MESSAGING_STATUS_UNKNOWN_ERROR: |
| + return "Unknown error"; |
| + } |
| + NOTREACHED(); |
| + return ""; |
| +} |
| + |
| +} // namespace |
| + |
| +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 blink::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 std::string& endpoint, |
| + const std::string& registration_id) { |
| + blink::WebPushRegistrationCallbacks* callbacks = |
| + registration_callbacks_.Lookup(callbacks_id); |
| + CHECK(callbacks); |
| + if (!callbacks) |
| + return; |
| + |
| + scoped_ptr<blink::WebPushRegistration> registration( |
| + new blink::WebPushRegistration( |
| + blink::WebString::fromUTF8(endpoint), |
| + blink::WebString::fromUTF8(registration_id))); |
|
Peter Beverloo
2014/04/02 14:46:05
You could use "using blink::WebString" to avoid a
Michael van Ouwerkerk
2014/04/02 15:49:30
Done.
|
| + callbacks->onSuccess(registration.release()); |
|
Peter Beverloo
2014/04/02 14:46:05
You want to use .get() here, since .release() will
Michael van Ouwerkerk
2014/04/02 15:49:30
Done.
|
| + registration_callbacks_.Remove(callbacks_id); |
| +} |
| + |
| +void PushMessagingDispatcher::OnRegisterError(int32 callbacks_id, |
| + PushMessagingStatus status) { |
| + blink::WebPushRegistrationCallbacks* callbacks = |
| + registration_callbacks_.Lookup(callbacks_id); |
| + DCHECK(callbacks); |
|
Peter Beverloo
2014/04/02 14:46:05
Same comment as I left on line 70 in my previous r
Michael van Ouwerkerk
2014/04/02 15:49:30
Done.
|
| + if (!callbacks) |
| + return; |
| + |
| + scoped_ptr<blink::WebPushError> error( |
| + new blink::WebPushError( |
| + blink::WebPushError::ErrorTypeAbort, |
| + blink::WebString::fromUTF8(PushMessagingStatusToString(status)))); |
| + callbacks->onError(error.release()); |
| + registration_callbacks_.Remove(callbacks_id); |
| +} |
| + |
| +} // namespace content |