summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authormlamouri <mlamouri@chromium.org>2014-09-30 04:22:46 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-30 11:23:00 +0000
commit4fff199018de7d518127d1fa29e4d38c9242642f (patch)
tree1af14a2a4d709deb482e417d91b0ff734790a4f2 /content
parent45a1583ba9f782ae59d739d74727774089c77868 (diff)
downloadchromium_src-4fff199018de7d518127d1fa29e4d38c9242642f.zip
chromium_src-4fff199018de7d518127d1fa29e4d38c9242642f.tar.gz
chromium_src-4fff199018de7d518127d1fa29e4d38c9242642f.tar.bz2
[Push] Use Manifest.gcm_sender_id instead of API sender_id if possible.
PushMessagingDispatcher is now trying to get the Manifest before asking the registration to happen. If the gcm_sender_id is set, it will be used. Otherwise, the flow is unchanged. This is an considered option in order to no longer require an opaque property bag to be passed when registering. It might or might not stay as is. BUG=414873 Review URL: https://codereview.chromium.org/609393002 Cr-Commit-Position: refs/heads/master@{#297403}
Diffstat (limited to 'content')
-rw-r--r--content/renderer/push_messaging_dispatcher.cc30
-rw-r--r--content/renderer/push_messaging_dispatcher.h13
-rw-r--r--content/renderer/render_frame_impl.cc4
-rw-r--r--content/renderer/render_frame_impl.h2
4 files changed, 32 insertions, 17 deletions
diff --git a/content/renderer/push_messaging_dispatcher.cc b/content/renderer/push_messaging_dispatcher.cc
index b2bb850..1de8da9 100644
--- a/content/renderer/push_messaging_dispatcher.cc
+++ b/content/renderer/push_messaging_dispatcher.cc
@@ -4,8 +4,11 @@
#include "content/renderer/push_messaging_dispatcher.h"
+#include "base/strings/utf_string_conversions.h"
#include "content/child/service_worker/web_service_worker_provider_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 "third_party/WebKit/public/platform/WebPushError.h"
#include "third_party/WebKit/public/platform/WebPushRegistration.h"
@@ -36,20 +39,21 @@ bool PushMessagingDispatcher::OnMessageReceived(const IPC::Message& message) {
void PushMessagingDispatcher::registerPushMessaging(
const WebString& sender_id,
- blink::WebPushRegistrationCallbacks* callbacks) {
- DCHECK(callbacks);
- scoped_ptr<blink::WebPushError> error(new blink::WebPushError(
- blink::WebPushError::ErrorTypeAbort,
- WebString::fromUTF8(PushMessagingStatusToString(
- PUSH_MESSAGING_STATUS_REGISTRATION_FAILED_NO_SERVICE_WORKER))));
- callbacks->onError(error.release());
- delete callbacks;
+ blink::WebPushRegistrationCallbacks* callbacks,
+ blink::WebServiceWorkerProvider* service_worker_provider) {
+ RenderFrameImpl::FromRoutingID(routing_id())->manifest_manager()->GetManifest(
+ base::Bind(&PushMessagingDispatcher::DoRegister,
+ base::Unretained(this),
+ sender_id.utf8(),
+ callbacks,
+ service_worker_provider));
}
-void PushMessagingDispatcher::registerPushMessaging(
- const WebString& sender_id,
+void PushMessagingDispatcher::DoRegister(
+ const std::string& sender_id,
blink::WebPushRegistrationCallbacks* callbacks,
- blink::WebServiceWorkerProvider* service_worker_provider) {
+ blink::WebServiceWorkerProvider* service_worker_provider,
+ const Manifest& manifest) {
DCHECK(callbacks);
int callbacks_id = registration_callbacks_.Add(callbacks);
int service_worker_provider_id = static_cast<WebServiceWorkerProviderImpl*>(
@@ -57,7 +61,9 @@ void PushMessagingDispatcher::registerPushMessaging(
Send(new PushMessagingHostMsg_Register(
routing_id(),
callbacks_id,
- sender_id.utf8(),
+ manifest.gcm_sender_id.is_null()
+ ? sender_id
+ : base::UTF16ToUTF8(manifest.gcm_sender_id.string()),
blink::WebUserGestureIndicator::isProcessingUserGesture(),
service_worker_provider_id));
}
diff --git a/content/renderer/push_messaging_dispatcher.h b/content/renderer/push_messaging_dispatcher.h
index 33ac7bd..70ec977 100644
--- a/content/renderer/push_messaging_dispatcher.h
+++ b/content/renderer/push_messaging_dispatcher.h
@@ -24,6 +24,9 @@ class WebString;
} // namespace blink
namespace content {
+
+struct Manifest;
+
class PushMessagingDispatcher : public RenderFrameObserver,
public blink::WebPushClient {
public:
@@ -35,16 +38,16 @@ class PushMessagingDispatcher : public RenderFrameObserver,
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
// WebPushClient implementation.
- // TODO(mvanouwerkerk): Delete this method once its callers are gone and
- // WebPushClient no longer defines it (as pure virtual).
- virtual void registerPushMessaging(
- const blink::WebString& sender_id,
- blink::WebPushRegistrationCallbacks* callbacks);
virtual void registerPushMessaging(
const blink::WebString& sender_id,
blink::WebPushRegistrationCallbacks* callbacks,
blink::WebServiceWorkerProvider* service_worker_provider);
+ void DoRegister(const std::string& sender_id,
+ blink::WebPushRegistrationCallbacks* callbacks,
+ blink::WebServiceWorkerProvider* service_worker_provider,
+ const Manifest& manifest);
+
void OnRegisterSuccess(int32 callbacks_id,
const GURL& endpoint,
const std::string& registration_id);
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index b65e764..9dba04f 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -1006,6 +1006,10 @@ void RenderFrameImpl::BindServiceRegistry(
service_registry_.BindRemoteServiceProvider(service_provider_handle.Pass());
}
+ManifestManager* RenderFrameImpl::manifest_manager() {
+ return manifest_manager_;
+}
+
void RenderFrameImpl::OnBeforeUnload() {
TRACE_EVENT1("navigation", "RenderFrameImpl::OnBeforeUnload",
"id", routing_id_);
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 76a373a..7dd2860 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -461,6 +461,8 @@ class CONTENT_EXPORT RenderFrameImpl
void BindServiceRegistry(
mojo::ScopedMessagePipeHandle service_provider_handle);
+ ManifestManager* manifest_manager();
+
protected:
RenderFrameImpl(RenderViewImpl* render_view, int32 routing_id);