diff options
author | mlamouri <mlamouri@chromium.org> | 2014-09-30 04:22:46 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-30 11:23:00 +0000 |
commit | 4fff199018de7d518127d1fa29e4d38c9242642f (patch) | |
tree | 1af14a2a4d709deb482e417d91b0ff734790a4f2 /content | |
parent | 45a1583ba9f782ae59d739d74727774089c77868 (diff) | |
download | chromium_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.cc | 30 | ||||
-rw-r--r-- | content/renderer/push_messaging_dispatcher.h | 13 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.cc | 4 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.h | 2 |
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); |