Chromium Code Reviews| Index: content/renderer/push_messaging/push_messaging_client.cc |
| diff --git a/content/renderer/push_messaging/push_messaging_dispatcher.cc b/content/renderer/push_messaging/push_messaging_client.cc |
| similarity index 57% |
| rename from content/renderer/push_messaging/push_messaging_dispatcher.cc |
| rename to content/renderer/push_messaging/push_messaging_client.cc |
| index cc4fda70d7dd1a52bfac48d0ea096c7285f0a65e..1e4cbd820a9285cdd385f5ee8bd3eec44437e840 100644 |
| --- a/content/renderer/push_messaging/push_messaging_dispatcher.cc |
| +++ b/content/renderer/push_messaging/push_messaging_client.cc |
| @@ -2,19 +2,20 @@ |
| // 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_dispatcher.h" |
| +#include "content/renderer/push_messaging/push_messaging_client.h" |
| #include <memory> |
| #include <utility> |
| +#include "base/bind_helpers.h" |
| #include "base/memory/ptr_util.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "content/child/child_thread_impl.h" |
| #include "content/child/push_messaging/push_provider.h" |
| #include "content/child/service_worker/web_service_worker_registration_impl.h" |
| -#include "content/common/push_messaging_messages.h" |
| #include "content/renderer/manifest/manifest_manager.h" |
| #include "content/renderer/render_frame_impl.h" |
| -#include "ipc/ipc_message.h" |
| +#include "services/service_manager/public/cpp/interface_provider.h" |
| #include "third_party/WebKit/public/platform/WebString.h" |
| #include "third_party/WebKit/public/platform/modules/push_messaging/WebPushError.h" |
| #include "third_party/WebKit/public/platform/modules/push_messaging/WebPushSubscription.h" |
| @@ -26,40 +27,34 @@ |
| namespace content { |
| -PushMessagingDispatcher::PushMessagingDispatcher(RenderFrame* render_frame) |
| - : RenderFrameObserver(render_frame) {} |
| - |
| -PushMessagingDispatcher::~PushMessagingDispatcher() {} |
| - |
| -bool PushMessagingDispatcher::OnMessageReceived(const IPC::Message& message) { |
| - bool handled = true; |
| - IPC_BEGIN_MESSAGE_MAP(PushMessagingDispatcher, message) |
| - IPC_MESSAGE_HANDLER(PushMessagingMsg_SubscribeFromDocumentSuccess, |
| - OnSubscribeFromDocumentSuccess) |
| - IPC_MESSAGE_HANDLER(PushMessagingMsg_SubscribeFromDocumentError, |
| - OnSubscribeFromDocumentError) |
| - IPC_MESSAGE_UNHANDLED(handled = false) |
| - IPC_END_MESSAGE_MAP() |
| - return handled; |
| +PushMessagingClient::PushMessagingClient(RenderFrame* render_frame) |
| + : RenderFrameObserver(render_frame) { |
| + if (ChildThreadImpl::current()) { |
|
ke.he
2017/02/14 08:31:11
ChildThread may not exist in some tests, so we can
|
| + ChildThreadImpl::current()->GetRemoteInterfaces()->GetInterface( |
| + mojo::MakeRequest(&push_messaging_)); |
| + } |
| } |
| -void PushMessagingDispatcher::OnDestruct() { |
| +PushMessagingClient::~PushMessagingClient() {} |
| + |
| +void PushMessagingClient::OnDestruct() { |
| delete this; |
| } |
| -void PushMessagingDispatcher::subscribe( |
| +void PushMessagingClient::subscribe( |
| blink::WebServiceWorkerRegistration* service_worker_registration, |
| const blink::WebPushSubscriptionOptions& options, |
| std::unique_ptr<blink::WebPushSubscriptionCallbacks> callbacks) { |
| DCHECK(service_worker_registration); |
| DCHECK(callbacks); |
| + |
| // If a developer provided an application server key in |options|, skip |
| // fetching the manifest. |
| if (options.applicationServerKey.isEmpty()) { |
| RenderFrameImpl::FromRoutingID(routing_id()) |
| ->manifest_manager() |
| ->GetManifest(base::Bind( |
| - &PushMessagingDispatcher::DidGetManifest, base::Unretained(this), |
| + &PushMessagingClient::DidGetManifest, base::Unretained(this), |
| service_worker_registration, options, base::Passed(&callbacks))); |
| } else { |
| PushSubscriptionOptions content_options; |
| @@ -72,7 +67,7 @@ void PushMessagingDispatcher::subscribe( |
| } |
| } |
| -void PushMessagingDispatcher::DidGetManifest( |
| +void PushMessagingClient::DidGetManifest( |
| blink::WebServiceWorkerRegistration* service_worker_registration, |
| const blink::WebPushSubscriptionOptions& options, |
| std::unique_ptr<blink::WebPushSubscriptionCallbacks> callbacks, |
| @@ -82,9 +77,10 @@ void PushMessagingDispatcher::DidGetManifest( |
| // Get the sender_info from the manifest since it wasn't provided by |
| // the caller. |
| if (manifest.IsEmpty()) { |
| - int request_id = subscription_callbacks_.Add(std::move(callbacks)); |
| - OnSubscribeFromDocumentError( |
| - request_id, PUSH_REGISTRATION_STATUS_MANIFEST_EMPTY_OR_MISSING); |
| + SubscribeCallback(std::move(callbacks), |
| + PUSH_REGISTRATION_STATUS_MANIFEST_EMPTY_OR_MISSING, |
| + base::nullopt, base::nullopt, base::nullopt, |
| + base::nullopt); |
| return; |
| } |
| @@ -99,52 +95,54 @@ void PushMessagingDispatcher::DidGetManifest( |
| std::move(callbacks)); |
| } |
| -void PushMessagingDispatcher::DoSubscribe( |
| +void PushMessagingClient::DoSubscribe( |
| blink::WebServiceWorkerRegistration* service_worker_registration, |
| const PushSubscriptionOptions& options, |
| std::unique_ptr<blink::WebPushSubscriptionCallbacks> callbacks) { |
| - int request_id = subscription_callbacks_.Add(std::move(callbacks)); |
| int64_t service_worker_registration_id = |
| static_cast<WebServiceWorkerRegistrationImpl*>( |
| service_worker_registration) |
| ->registrationId(); |
| if (options.sender_info.empty()) { |
| - OnSubscribeFromDocumentError(request_id, |
| - PUSH_REGISTRATION_STATUS_NO_SENDER_ID); |
| + SubscribeCallback(std::move(callbacks), |
| + PUSH_REGISTRATION_STATUS_NO_SENDER_ID, base::nullopt, |
| + base::nullopt, base::nullopt, base::nullopt); |
| return; |
| } |
| - Send(new PushMessagingHostMsg_Subscribe( |
| - routing_id(), request_id, service_worker_registration_id, options)); |
| -} |
| - |
| -void PushMessagingDispatcher::OnSubscribeFromDocumentSuccess( |
| - int32_t request_id, |
| - const GURL& endpoint, |
| - const PushSubscriptionOptions& options, |
| - const std::vector<uint8_t>& p256dh, |
| - const std::vector<uint8_t>& auth) { |
| - blink::WebPushSubscriptionCallbacks* callbacks = |
| - subscription_callbacks_.Lookup(request_id); |
| - DCHECK(callbacks); |
| - |
| - callbacks->onSuccess(base::MakeUnique<blink::WebPushSubscription>( |
| - endpoint, options.user_visible_only, |
| - blink::WebString::fromLatin1(options.sender_info), p256dh, auth)); |
| - |
| - subscription_callbacks_.Remove(request_id); |
| + if (push_messaging_) { |
|
Peter Beverloo
2017/02/16 16:08:33
DCHECK on push_messaging_
It's fine for it to be
ke.he
2017/02/17 08:22:40
Done.
|
| + push_messaging_->Subscribe( |
| + routing_id(), service_worker_registration_id, options, |
| + base::Bind(&PushMessagingClient::SubscribeCallback, |
| + base::Unretained(this), base::Passed(&callbacks))); |
| + } |
| } |
| -void PushMessagingDispatcher::OnSubscribeFromDocumentError( |
| - int32_t request_id, |
| - PushRegistrationStatus status) { |
| - blink::WebPushSubscriptionCallbacks* callbacks = |
| - subscription_callbacks_.Lookup(request_id); |
| - DCHECK(callbacks); |
| - |
| - callbacks->onError(PushRegistrationStatusToWebPushError(status)); |
| +void PushMessagingClient::SubscribeCallback( |
| + std::unique_ptr<blink::WebPushSubscriptionCallbacks> callbacks, |
| + content::PushRegistrationStatus status, |
| + const base::Optional<GURL>& endpoint, |
| + const base::Optional<content::PushSubscriptionOptions>& options, |
| + const base::Optional<std::vector<uint8_t>>& p256dh, |
| + const base::Optional<std::vector<uint8_t>>& auth) { |
| + if (!callbacks) { |
|
Peter Beverloo
2017/02/16 16:08:33
DCHECK(callbacks)
ke.he
2017/02/17 08:22:40
Done.
|
| + return; |
| + } |
| - subscription_callbacks_.Remove(request_id); |
| + if (status == PUSH_REGISTRATION_STATUS_SUCCESS_FROM_PUSH_SERVICE || |
| + status == PUSH_REGISTRATION_STATUS_SUCCESS_FROM_CACHE) { |
| + DCHECK(endpoint != base::nullopt); |
| + DCHECK(options != base::nullopt); |
| + DCHECK(p256dh != base::nullopt); |
| + DCHECK(auth != base::nullopt); |
| + |
| + callbacks->onSuccess(base::MakeUnique<blink::WebPushSubscription>( |
| + endpoint.value(), options.value().user_visible_only, |
| + blink::WebString::fromLatin1(options.value().sender_info), |
| + p256dh.value(), auth.value())); |
| + } else { |
| + callbacks->onError(PushRegistrationStatusToWebPushError(status)); |
| + } |
| } |
| } // namespace content |