Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(278)

Unified Diff: components/gcm_driver/gcm_driver_desktop.cc

Issue 320993003: [GCM] Add app handler support for connection events (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/gcm_driver/gcm_driver_desktop.h ('k') | components/gcm_driver/gcm_driver_desktop_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/gcm_driver/gcm_driver_desktop.cc
diff --git a/components/gcm_driver/gcm_driver_desktop.cc b/components/gcm_driver/gcm_driver_desktop.cc
index 9f6a7c2c24b7996428458929cd64b6f2869ad4ba..d69a98cffa4802c3fecaae185fa2e8f5055c2b86 100644
--- a/components/gcm_driver/gcm_driver_desktop.cc
+++ b/components/gcm_driver/gcm_driver_desktop.cc
@@ -17,10 +17,18 @@
#include "components/gcm_driver/gcm_client_factory.h"
#include "components/gcm_driver/system_encryptor.h"
#include "google_apis/gaia/oauth2_token_service.h"
+#include "net/base/ip_endpoint.h"
#include "net/url_request/url_request_context_getter.h"
namespace gcm {
+namespace {
+
+// Empty string is reserved for the default app handler.
+const char kDefaultAppHandler[] = "";
+
+} // namespace
+
// Helper class to save tasks to run until we're ready to execute them.
class GCMDriverDesktop::DelayedTaskController {
public:
@@ -103,6 +111,8 @@ class GCMDriverDesktop::IOWorker : public GCMClient::Delegate {
const GCMClient::SendErrorDetails& send_error_details) OVERRIDE;
virtual void OnGCMReady() OVERRIDE;
virtual void OnActivityRecorded() OVERRIDE;
+ virtual void OnConnected(const net::IPEndPoint& ip_endpoint) OVERRIDE;
+ virtual void OnDisconnected() OVERRIDE;
// Called on IO thread.
void Initialize(
@@ -250,6 +260,19 @@ void GCMDriverDesktop::IOWorker::OnActivityRecorded() {
GetGCMStatistics(false);
}
+void GCMDriverDesktop::IOWorker::OnConnected(
+ const net::IPEndPoint& ip_endpoint) {
+ ui_thread_->PostTask(FROM_HERE,
+ base::Bind(&GCMDriverDesktop::OnConnected,
+ service_,
+ ip_endpoint));
+}
+
+void GCMDriverDesktop::IOWorker::OnDisconnected() {
+ ui_thread_->PostTask(FROM_HERE,
+ base::Bind(&GCMDriverDesktop::OnDisconnected, service_));
+}
+
void GCMDriverDesktop::IOWorker::Start(
const base::WeakPtr<GCMDriverDesktop>& service) {
DCHECK(io_thread_->RunsTasksOnCurrentThread());
@@ -337,6 +360,7 @@ GCMDriverDesktop::GCMDriverDesktop(
const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner)
: gcm_enabled_(true),
gcm_client_ready_(false),
+ connected_(false),
identity_provider_(identity_provider.Pass()),
ui_thread_(ui_thread),
io_thread_(io_thread),
@@ -534,6 +558,10 @@ bool GCMDriverDesktop::IsGCMClientReady() const {
return gcm_client_ready_;
}
+bool GCMDriverDesktop::IsConnected() const {
+ return connected_;
+}
+
void GCMDriverDesktop::GetGCMStatistics(
const GetGCMStatisticsCallback& callback,
bool clear_logs) {
@@ -667,6 +695,42 @@ void GCMDriverDesktop::GCMClientReady() {
delayed_task_controller_->SetReady();
}
+void GCMDriverDesktop::OnConnected(const net::IPEndPoint& ip_endpoint) {
+ DCHECK(ui_thread_->RunsTasksOnCurrentThread());
+
+ connected_ = true;
+
+ // Drop the event if signed out.
+ if (account_id_.empty())
+ return;
+
+ const GCMAppHandlerMap& app_handler_map = app_handlers();
+ for (GCMAppHandlerMap::const_iterator iter = app_handler_map.begin();
+ iter != app_handler_map.end(); ++iter) {
+ iter->second->OnConnected(ip_endpoint);
+ }
+
+ GetAppHandler(kDefaultAppHandler)->OnConnected(ip_endpoint);
+}
+
+void GCMDriverDesktop::OnDisconnected() {
+ DCHECK(ui_thread_->RunsTasksOnCurrentThread());
+
+ connected_ = false;
+
+ // Drop the event if signed out.
+ if (account_id_.empty())
+ return;
+
+ const GCMAppHandlerMap& app_handler_map = app_handlers();
+ for (GCMAppHandlerMap::const_iterator iter = app_handler_map.begin();
+ iter != app_handler_map.end(); ++iter) {
+ iter->second->OnDisconnected();
+ }
+
+ GetAppHandler(kDefaultAppHandler)->OnDisconnected();
+}
+
void GCMDriverDesktop::GetGCMStatisticsFinished(
const GCMClient::GCMStatistics& stats) {
DCHECK(ui_thread_->RunsTasksOnCurrentThread());
@@ -685,3 +749,4 @@ std::string GCMDriverDesktop::SignedInUserName() const {
}
} // namespace gcm
+
« no previous file with comments | « components/gcm_driver/gcm_driver_desktop.h ('k') | components/gcm_driver/gcm_driver_desktop_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698