Chromium Code Reviews| 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 |