summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/services/gcm/push_messaging_service_impl.cc20
-rw-r--r--chrome/browser/services/gcm/push_messaging_service_impl.h2
-rw-r--r--content/browser/push_messaging_message_filter.cc45
-rw-r--r--content/browser/push_messaging_message_filter.h10
-rw-r--r--content/public/browser/push_messaging_service.h2
-rw-r--r--content/renderer/push_messaging_dispatcher.cc6
-rw-r--r--content/renderer/push_messaging_dispatcher.h10
-rw-r--r--content/renderer/render_frame_impl.cc8
-rw-r--r--content/renderer/render_frame_impl.h11
-rw-r--r--content/renderer/render_view_impl.cc8
-rw-r--r--content/renderer/render_view_impl.h4
11 files changed, 68 insertions, 58 deletions
diff --git a/chrome/browser/services/gcm/push_messaging_service_impl.cc b/chrome/browser/services/gcm/push_messaging_service_impl.cc
index b0bd5d4..351b97a 100644
--- a/chrome/browser/services/gcm/push_messaging_service_impl.cc
+++ b/chrome/browser/services/gcm/push_messaging_service_impl.cc
@@ -16,11 +16,11 @@
#include "chrome/browser/services/gcm/gcm_profile_service_factory.h"
#include "chrome/browser/services/gcm/push_messaging_permission_context.h"
#include "chrome/browser/services/gcm/push_messaging_permission_context_factory.h"
-#include "chrome/browser/tab_contents/tab_util.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
#include "components/gcm_driver/gcm_driver.h"
#include "components/pref_registry/pref_registry_syncable.h"
+#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
namespace gcm {
@@ -133,7 +133,7 @@ void PushMessagingServiceImpl::Register(
const std::string& app_id,
const std::string& sender_id,
int renderer_id,
- int render_view_id,
+ int render_frame_id,
const content::PushMessagingService::RegisterCallback& callback) {
if (!gcm_profile_service_->driver()) {
NOTREACHED() << "There is no GCMDriver. Has GCMProfileService shut down?";
@@ -150,10 +150,17 @@ void PushMessagingServiceImpl::Register(
if (gcm_profile_service_->driver()->GetAppHandler(kAppIdPrefix) != this)
gcm_profile_service_->driver()->AddAppHandler(kAppIdPrefix, this);
+ content::RenderFrameHost* render_frame_host =
+ content::RenderFrameHost::FromID(renderer_id, render_frame_id);
+
+ // The frame doesn't exist any more, or we received a bad frame id.
+ if (!render_frame_host)
+ return;
+
content::WebContents* web_contents =
- tab_util::GetWebContentsByID(renderer_id, render_view_id);
+ content::WebContents::FromRenderFrameHost(render_frame_host);
- // The page doesn't exist any more.
+ // The page doesn't exist any more or we got a bad render frame host.
if (!web_contents)
return;
@@ -161,9 +168,10 @@ void PushMessagingServiceImpl::Register(
// implemented.
int bridge_id = -1;
- const PermissionRequestID id(renderer_id, render_view_id, bridge_id, GURL());
+ const PermissionRequestID id(
+ renderer_id, web_contents->GetRoutingID(), bridge_id, GURL());
- GURL embedder = web_contents->GetURL();
+ GURL embedder = web_contents->GetLastCommittedURL();
gcm::PushMessagingPermissionContext* permission_context =
gcm::PushMessagingPermissionContextFactory::GetForProfile(profile_);
diff --git a/chrome/browser/services/gcm/push_messaging_service_impl.h b/chrome/browser/services/gcm/push_messaging_service_impl.h
index 4a049fb..5dff831 100644
--- a/chrome/browser/services/gcm/push_messaging_service_impl.h
+++ b/chrome/browser/services/gcm/push_messaging_service_impl.h
@@ -49,7 +49,7 @@ class PushMessagingServiceImpl : public content::PushMessagingService,
const std::string& app_id,
const std::string& sender_id,
int renderer_id,
- int router_id,
+ int render_frame_id,
const content::PushMessagingService::RegisterCallback& callback) OVERRIDE;
private:
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_;