diff options
author | mvanouwerkerk@chromium.org <mvanouwerkerk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-02 12:53:02 +0000 |
---|---|---|
committer | mvanouwerkerk@chromium.org <mvanouwerkerk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-02 12:53:02 +0000 |
commit | 4592086c33ec25a9498002d226ad9f7d1b1f5290 (patch) | |
tree | 8f8b6749d8fe1b7e2a837c4cbe868a22b95f0343 /content | |
parent | f5920b1b78b3adee59895ac93afc90a39570bdf1 (diff) | |
download | chromium_src-4592086c33ec25a9498002d226ad9f7d1b1f5290.zip chromium_src-4592086c33ec25a9498002d226ad9f7d1b1f5290.tar.gz chromium_src-4592086c33ec25a9498002d226ad9f7d1b1f5290.tar.bz2 |
Push API: move dispatcher to RenderFrame
BUG=304341,350378
Review URL: https://codereview.chromium.org/349653003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@281010 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/push_messaging_message_filter.cc | 45 | ||||
-rw-r--r-- | content/browser/push_messaging_message_filter.h | 10 | ||||
-rw-r--r-- | content/public/browser/push_messaging_service.h | 2 | ||||
-rw-r--r-- | content/renderer/push_messaging_dispatcher.cc | 6 | ||||
-rw-r--r-- | content/renderer/push_messaging_dispatcher.h | 10 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.cc | 8 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.h | 11 | ||||
-rw-r--r-- | content/renderer/render_view_impl.cc | 8 | ||||
-rw-r--r-- | content/renderer/render_view_impl.h | 4 |
9 files changed, 53 insertions, 51 deletions
diff --git a/content/browser/push_messaging_message_filter.cc b/content/browser/push_messaging_message_filter.cc index a4075c5..ef166d7 100644 --- a/content/browser/push_messaging_message_filter.cc +++ b/content/browser/push_messaging_message_filter.cc @@ -19,7 +19,8 @@ PushMessagingMessageFilter::PushMessagingMessageFilter(int render_process_id) : BrowserMessageFilter(PushMessagingMsgStart), render_process_id_(render_process_id), service_(NULL), - weak_factory_(this) {} + weak_factory_(this) { +} PushMessagingMessageFilter::~PushMessagingMessageFilter() {} @@ -33,65 +34,57 @@ bool PushMessagingMessageFilter::OnMessageReceived( return handled; } -void PushMessagingMessageFilter::OnRegister(int render_view_id, +void PushMessagingMessageFilter::OnRegister(int render_frame_id, int callbacks_id, const std::string& sender_id) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); // TODO(mvanouwerkerk): Validate arguments? - // TODO(mvanouwerkerk): A WebContentsObserver could avoid this PostTask - // by receiving the IPC on the UI thread. - // TODO(mvanouwerkerk): move WebPushClient to WebFrameClient and its - // content implementation to RenderFrameObserver instead of - // RenderViewObserver BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, base::Bind(&PushMessagingMessageFilter::DoRegister, weak_factory_.GetWeakPtr(), - render_view_id, + render_frame_id, callbacks_id, sender_id)); } -void PushMessagingMessageFilter::DoRegister(int render_view_id, +void PushMessagingMessageFilter::DoRegister(int render_frame_id, int callbacks_id, const std::string& sender_id) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); if (!service()) { - DidRegister(render_view_id, callbacks_id, GURL(), "", false); + DidRegister(render_frame_id, callbacks_id, GURL(), "", false); return; } // TODO(mvanouwerkerk): Pass in a real app ID based on Service Worker ID. std::string app_id = "https://example.com 0"; - service_->Register(app_id, - sender_id, - render_process_id_, - render_view_id, - base::Bind(&PushMessagingMessageFilter::DidRegister, - weak_factory_.GetWeakPtr(), - render_view_id, - callbacks_id)); + service()->Register(app_id, + sender_id, + render_process_id_, + render_frame_id, + base::Bind(&PushMessagingMessageFilter::DidRegister, + weak_factory_.GetWeakPtr(), + render_frame_id, + callbacks_id)); } -void PushMessagingMessageFilter::DidRegister(int render_view_id, +void PushMessagingMessageFilter::DidRegister(int render_frame_id, int callbacks_id, const GURL& endpoint, const std::string& registration_id, bool success) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); if (success) { - Send(new PushMessagingMsg_RegisterSuccess(render_view_id, - callbacks_id, - endpoint, - registration_id)); + Send(new PushMessagingMsg_RegisterSuccess( + render_frame_id, callbacks_id, endpoint, registration_id)); } else { - Send(new PushMessagingMsg_RegisterError(render_view_id, callbacks_id)); + Send(new PushMessagingMsg_RegisterError(render_frame_id, callbacks_id)); } } PushMessagingService* PushMessagingMessageFilter::service() { if (!service_) { - RenderProcessHostImpl* host = static_cast<RenderProcessHostImpl*>( - RenderProcessHost::FromID(render_process_id_)); + RenderProcessHost* host = RenderProcessHost::FromID(render_process_id_); if (!host) return NULL; service_ = host->GetBrowserContext()->GetPushMessagingService(); diff --git a/content/browser/push_messaging_message_filter.h b/content/browser/push_messaging_message_filter.h index 25ea50d..7a786a7 100644 --- a/content/browser/push_messaging_message_filter.h +++ b/content/browser/push_messaging_message_filter.h @@ -25,15 +25,15 @@ class PushMessagingMessageFilter : public BrowserMessageFilter { // BrowserMessageFilter implementation. virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; - void OnRegister(int render_view_id, + void OnRegister(int render_frame_id, int callbacks_id, const std::string& sender_id); - void DoRegister(int render_view_id, + void DoRegister(int render_frame_id, int callbacks_id, const std::string& sender_id); - void DidRegister(int render_view_id, + void DidRegister(int render_frame_id, int callbacks_id, const GURL& endpoint, const std::string& registration_id, @@ -42,7 +42,9 @@ class PushMessagingMessageFilter : public BrowserMessageFilter { PushMessagingService* service(); int render_process_id_; - PushMessagingService* service_; // Not owned. + + // Owned by the content embedder's browsing context. + PushMessagingService* service_; base::WeakPtrFactory<PushMessagingMessageFilter> weak_factory_; diff --git a/content/public/browser/push_messaging_service.h b/content/public/browser/push_messaging_service.h index 560d005..6175a43 100644 --- a/content/public/browser/push_messaging_service.h +++ b/content/public/browser/push_messaging_service.h @@ -26,7 +26,7 @@ class CONTENT_EXPORT PushMessagingService { virtual void Register(const std::string& app_id, const std::string& sender_id, int renderer_id, - int render_view_id, + int render_frame_id, const RegisterCallback& callback) = 0; }; diff --git a/content/renderer/push_messaging_dispatcher.cc b/content/renderer/push_messaging_dispatcher.cc index 136862c..d0a8a87 100644 --- a/content/renderer/push_messaging_dispatcher.cc +++ b/content/renderer/push_messaging_dispatcher.cc @@ -5,7 +5,6 @@ #include "content/renderer/push_messaging_dispatcher.h" #include "content/common/push_messaging_messages.h" -#include "content/renderer/render_view_impl.h" #include "ipc/ipc_message.h" #include "third_party/WebKit/public/platform/WebPushError.h" #include "third_party/WebKit/public/platform/WebPushRegistration.h" @@ -16,8 +15,9 @@ using blink::WebString; namespace content { -PushMessagingDispatcher::PushMessagingDispatcher(RenderViewImpl* render_view) - : RenderViewObserver(render_view) {} +PushMessagingDispatcher::PushMessagingDispatcher(RenderFrame* render_frame) + : RenderFrameObserver(render_frame) { +} PushMessagingDispatcher::~PushMessagingDispatcher() {} diff --git a/content/renderer/push_messaging_dispatcher.h b/content/renderer/push_messaging_dispatcher.h index ad441b2..1b0b45b 100644 --- a/content/renderer/push_messaging_dispatcher.h +++ b/content/renderer/push_messaging_dispatcher.h @@ -8,7 +8,7 @@ #include <string> #include "base/id_map.h" -#include "content/public/renderer/render_view_observer.h" +#include "content/public/renderer/render_frame_observer.h" #include "third_party/WebKit/public/platform/WebPushClient.h" class GURL; @@ -22,16 +22,14 @@ class WebString; } // namespace blink namespace content { -class RenderViewImpl; - -class PushMessagingDispatcher : public RenderViewObserver, +class PushMessagingDispatcher : public RenderFrameObserver, public blink::WebPushClient { public: - explicit PushMessagingDispatcher(RenderViewImpl* render_view); + explicit PushMessagingDispatcher(RenderFrame* render_frame); virtual ~PushMessagingDispatcher(); private: - // RenderView::Observer implementation. + // RenderFrame::Observer implementation. virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; // WebPushClient implementation. diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index cb8676c..fb4eecb 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc @@ -72,6 +72,7 @@ #include "content/renderer/media/webmediaplayer_params.h" #include "content/renderer/notification_provider.h" #include "content/renderer/npapi/plugin_channel_host.h" +#include "content/renderer/push_messaging_dispatcher.h" #include "content/renderer/render_process.h" #include "content/renderer/render_thread_impl.h" #include "content/renderer/render_view_impl.h" @@ -406,6 +407,7 @@ RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id) cdm_manager_(NULL), #endif geolocation_dispatcher_(NULL), + push_messaging_dispatcher_(NULL), screen_orientation_dispatcher_(NULL), weak_factory_(this) { std::pair<RoutingIDFrameMap::iterator, bool> result = @@ -2748,6 +2750,12 @@ blink::WebGeolocationClient* RenderFrameImpl::geolocationClient() { return geolocation_dispatcher_; } +blink::WebPushClient* RenderFrameImpl::pushClient() { + if (!push_messaging_dispatcher_) + push_messaging_dispatcher_ = new PushMessagingDispatcher(this); + return push_messaging_dispatcher_; +} + void RenderFrameImpl::willStartUsingPeerConnectionHandler( blink::WebLocalFrame* frame, blink::WebRTCPeerConnectionHandler* handler) { diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index 117cc0b..5fca735 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h @@ -41,6 +41,7 @@ class WebMouseEvent; class WebContentDecryptionModule; class WebMediaPlayer; class WebNotificationPresenter; +class WebPushClient; class WebSecurityOrigin; struct WebCompositionUnderline; struct WebContextMenuData; @@ -61,6 +62,7 @@ class MediaStreamRendererFactory; class MidiDispatcher; class NotificationProvider; class PepperPluginInstanceImpl; +class PushMessagingDispatcher; class RendererCdmManager; class RendererMediaPlayerManager; class RendererPpapiHost; @@ -369,6 +371,7 @@ class CONTENT_EXPORT RenderFrameImpl blink::WebSocketStreamHandle* handle); virtual void willOpenWebSocket(blink::WebSocketHandle* handle); virtual blink::WebGeolocationClient* geolocationClient(); + virtual blink::WebPushClient* pushClient(); virtual void willStartUsingPeerConnectionHandler( blink::WebLocalFrame* frame, blink::WebRTCPeerConnectionHandler* handler); @@ -635,12 +638,16 @@ class CONTENT_EXPORT RenderFrameImpl RendererCdmManager* cdm_manager_; #endif - // The geolocation dispatcher attached to this view, lazily initialized. + // The geolocation dispatcher attached to this frame, lazily initialized. GeolocationDispatcher* geolocation_dispatcher_; + // The push messaging dispatcher attached to this frame, lazily initialized. + PushMessagingDispatcher* push_messaging_dispatcher_; + ServiceRegistryImpl service_registry_; - // The screen orientation dispatcher attached to the view, lazily initialized. + // The screen orientation dispatcher attached to the frame, lazily + // initialized. ScreenOrientationDispatcher* screen_orientation_dispatcher_; base::WeakPtrFactory<RenderFrameImpl> weak_factory_; diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 2fb4589..50c5ae6 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -92,7 +92,6 @@ #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" #include "content/renderer/memory_benchmarking_extension.h" #include "content/renderer/mhtml_generator.h" -#include "content/renderer/push_messaging_dispatcher.h" #include "content/renderer/render_frame_impl.h" #include "content/renderer/render_frame_proxy.h" #include "content/renderer/render_process.h" @@ -637,7 +636,6 @@ RenderViewImpl::RenderViewImpl(RenderViewImplParams* params) top_controls_constraints_(cc::BOTH), #endif has_scrolled_focused_editable_node_into_rect_(false), - push_messaging_dispatcher_(NULL), speech_recognition_dispatcher_(NULL), media_stream_dispatcher_(NULL), browser_plugin_manager_(NULL), @@ -3681,9 +3679,9 @@ blink::WebPageVisibilityState RenderViewImpl::visibilityState() const { } blink::WebPushClient* RenderViewImpl::webPushClient() { - if (!push_messaging_dispatcher_) - push_messaging_dispatcher_ = new PushMessagingDispatcher(this); - return push_messaging_dispatcher_; + // TODO(mvanouwerkerk): Remove this method once the Push API code in Blink + // has also switched over to Frame. + return main_render_frame_->pushClient(); } void RenderViewImpl::draggableRegionsChanged() { diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h index 96f52f6..beba1f2 100644 --- a/content/renderer/render_view_impl.h +++ b/content/renderer/render_view_impl.h @@ -137,7 +137,6 @@ class MediaStreamDispatcher; class MouseLockDispatcher; class NavigationState; class PepperPluginInstanceImpl; -class PushMessagingDispatcher; class RenderViewObserver; class RenderViewTest; class RendererAccessibility; @@ -1039,9 +1038,6 @@ class CONTENT_EXPORT RenderViewImpl // along with the RenderView automatically. This is why we just store // weak references. - // The push messaging dispatcher attached to this view, lazily initialized. - PushMessagingDispatcher* push_messaging_dispatcher_; - // The speech recognition dispatcher attached to this view, lazily // initialized. SpeechRecognitionDispatcher* speech_recognition_dispatcher_; |