| 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
|
| +
|
|
|