Index: components/invalidation/gcm_invalidation_bridge.cc |
diff --git a/components/invalidation/gcm_invalidation_bridge.cc b/components/invalidation/gcm_invalidation_bridge.cc |
index ad52c3fda7cfadd655ed587bcc61f3891097bdd0..84efa004d95742c137c9e48a29865cb539312893 100644 |
--- a/components/invalidation/gcm_invalidation_bridge.cc |
+++ b/components/invalidation/gcm_invalidation_bridge.cc |
@@ -41,7 +41,7 @@ class GCMInvalidationBridge::Core : public syncer::GCMNetworkChannelDelegate, |
virtual ~Core(); |
// syncer::GCMNetworkChannelDelegate implementation. |
- virtual void Initialize() OVERRIDE; |
+ virtual void Initialize(ConnectionStateCallback callback) OVERRIDE; |
virtual void RequestToken(RequestTokenCallback callback) OVERRIDE; |
virtual void InvalidateToken(const std::string& token) OVERRIDE; |
virtual void Register(RegisterCallback callback) OVERRIDE; |
@@ -58,11 +58,14 @@ class GCMInvalidationBridge::Core : public syncer::GCMNetworkChannelDelegate, |
void OnIncomingMessage(const std::string& message, |
const std::string& echo_token); |
+ void OnConnectionStateChanged(ConnectionState connection_state); |
+ |
private: |
base::WeakPtr<GCMInvalidationBridge> bridge_; |
scoped_refptr<base::SingleThreadTaskRunner> ui_thread_task_runner_; |
MessageCallback message_callback_; |
+ ConnectionStateCallback connection_state_callback_; |
base::WeakPtrFactory<Core> weak_factory_; |
@@ -81,8 +84,9 @@ GCMInvalidationBridge::Core::Core( |
GCMInvalidationBridge::Core::~Core() {} |
-void GCMInvalidationBridge::Core::Initialize() { |
+void GCMInvalidationBridge::Core::Initialize(ConnectionStateCallback callback) { |
DCHECK(CalledOnValidThread()); |
+ connection_state_callback_ = callback; |
// Pass core WeapPtr and TaskRunner to GCMInvalidationBridge for it to be able |
// to post back. |
ui_thread_task_runner_->PostTask( |
@@ -145,6 +149,13 @@ void GCMInvalidationBridge::Core::OnIncomingMessage( |
message_callback_.Run(message, echo_token); |
} |
+void GCMInvalidationBridge::Core::OnConnectionStateChanged( |
+ ConnectionState connection_state) { |
+ if (!connection_state_callback_.is_null()) { |
+ connection_state_callback_.Run(connection_state); |
+ } |
+} |
+ |
GCMInvalidationBridge::GCMInvalidationBridge( |
gcm::GCMDriver* gcm_driver, |
IdentityProvider* identity_provider) |
@@ -317,11 +328,19 @@ void GCMInvalidationBridge::OnSendError( |
} |
void GCMInvalidationBridge::OnConnected(const net::IPEndPoint& ip_endpoint) { |
- // TODO(pavely): update invalidator state. |
+ core_thread_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&GCMInvalidationBridge::Core::OnConnectionStateChanged, |
+ core_, |
+ syncer::GCMNetworkChannelDelegate::CONNECTION_STATE_ONLINE)); |
} |
void GCMInvalidationBridge::OnDisconnected() { |
- // TODO(pavely): update invalidator state. |
+ core_thread_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&GCMInvalidationBridge::Core::OnConnectionStateChanged, |
+ core_, |
+ syncer::GCMNetworkChannelDelegate::CONNECTION_STATE_OFFLINE)); |
} |