Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1268)

Unified Diff: content/renderer/push_messaging/push_messaging_client.cc

Issue 2690203003: Convert push_messaging IPC msgs into mojo interfaces (Closed)
Patch Set: code rebase Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « content/renderer/push_messaging/push_messaging_client.h ('k') | content/renderer/push_messaging/push_messaging_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698