| 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..3cef773bb8b7e8ce9512b9df971e9e114e18ea11 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()) {
|
| + ChildThreadImpl::current()->GetRemoteInterfaces()->GetInterface(
|
| + mojo::MakeRequest(&push_messaging_manager_));
|
| + }
|
| }
|
|
|
| -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);
|
| + DCHECK(push_messaging_manager_);
|
| + push_messaging_manager_->Subscribe(
|
| + routing_id(), service_worker_registration_id, options,
|
| + // Safe to use base::Unretained because |push_messaging_manager_ |is
|
| + // owned by |this|.
|
| + 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);
|
| +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) {
|
| DCHECK(callbacks);
|
|
|
| - callbacks->onError(PushRegistrationStatusToWebPushError(status));
|
| -
|
| - subscription_callbacks_.Remove(request_id);
|
| + if (status == PUSH_REGISTRATION_STATUS_SUCCESS_FROM_PUSH_SERVICE ||
|
| + status == PUSH_REGISTRATION_STATUS_SUCCESS_FROM_CACHE) {
|
| + DCHECK(endpoint);
|
| + DCHECK(options);
|
| + DCHECK(p256dh);
|
| + DCHECK(auth);
|
| +
|
| + 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
|
|
|