Index: content/browser/push_messaging_message_filter.cc |
diff --git a/content/browser/push_messaging_message_filter.cc b/content/browser/push_messaging_message_filter.cc |
index e0787a7c9fd91a63bcb703df33ee867361533350..1828f1db4f0cd115ac5311a93b6a588e5f92819c 100644 |
--- a/content/browser/push_messaging_message_filter.cc |
+++ b/content/browser/push_messaging_message_filter.cc |
@@ -6,13 +6,21 @@ |
#include <string> |
+#include "base/bind.h" |
+#include "content/browser/renderer_host/render_process_host_impl.h" |
#include "content/common/push_messaging_messages.h" |
#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/content_browser_client.h" |
+#include "content/public/browser/push_messaging_service.h" |
+#include "content/public/common/content_client.h" |
namespace content { |
-PushMessagingMessageFilter::PushMessagingMessageFilter() |
- : BrowserMessageFilter(PushMessagingMsgStart) {} |
+PushMessagingMessageFilter::PushMessagingMessageFilter(int render_process_id) |
+ : BrowserMessageFilter(PushMessagingMsgStart), |
+ render_process_id_(render_process_id), |
+ service_(NULL), |
+ weak_factory_(this) {} |
PushMessagingMessageFilter::~PushMessagingMessageFilter() {} |
@@ -29,19 +37,31 @@ bool PushMessagingMessageFilter::OnMessageReceived( |
void PushMessagingMessageFilter::OnRegister(int routing_id, |
int callbacks_id, |
const std::string& sender_id) { |
- // TODO(mvanouwerkerk): Really implement, the below simply returns an error. |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- GURL endpoint = GURL("https://android.googleapis.com/gcm/send"); |
+ // TODO(mvanouwerkerk): Validate arguments? |
BrowserThread::PostTask(BrowserThread::UI, |
FROM_HERE, |
- base::Bind(&PushMessagingMessageFilter::DidRegister, |
+ base::Bind(&PushMessagingMessageFilter::DoRegister, |
this, |
routing_id, |
callbacks_id, |
- endpoint, |
- "", |
- true)); |
+ sender_id)); |
+} |
+void PushMessagingMessageFilter::DoRegister(int routing_id, |
+ int callbacks_id, |
+ const std::string& sender_id) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
Michael van Ouwerkerk
2014/06/06 10:43:30
Looks like we really do everything on the browser
|
+ if (!service()) |
+ return; |
+ // TODO(mvanouwerkerk): Pass in app ID based on Service Worker ID. |
+ std::string app_id = "unknown-app-id"; |
+ service_->Register(app_id, |
+ sender_id, |
+ base::Bind(&PushMessagingMessageFilter::DidRegister, |
+ weak_factory_.GetWeakPtr(), |
+ routing_id, |
+ callbacks_id)); |
} |
void PushMessagingMessageFilter::DidRegister(int routing_id, |
@@ -60,4 +80,16 @@ void PushMessagingMessageFilter::DidRegister(int routing_id, |
} |
} |
+PushMessagingService* PushMessagingMessageFilter::service() { |
+ if (!service_) { |
+ RenderProcessHostImpl* host = static_cast<RenderProcessHostImpl*>( |
+ RenderProcessHost::FromID(render_process_id_)); |
+ if (!host) |
+ return NULL; |
+ service_ = GetContentClient()->browser()->CreatePushMessagingService( |
+ host->GetBrowserContext()); |
+ } |
+ return service_; |
+} |
+ |
} // namespace content |