Index: chrome/browser/sync/notifier/cache_invalidation_packet_handler.cc |
diff --git a/chrome/browser/sync/notifier/cache_invalidation_packet_handler.cc b/chrome/browser/sync/notifier/cache_invalidation_packet_handler.cc |
index a5d23f2d68d0aa98f0fb0c3b878fa508dfa4f070..7edfc736d50fd1703d082aebdeb32b080c11330a 100644 |
--- a/chrome/browser/sync/notifier/cache_invalidation_packet_handler.cc |
+++ b/chrome/browser/sync/notifier/cache_invalidation_packet_handler.cc |
@@ -202,6 +202,13 @@ CacheInvalidationPacketHandler::CacheInvalidationPacketHandler( |
sid_(MakeSid()) { |
CHECK(xmpp_client_); |
CHECK(invalidation_client_); |
+ if (xmpp_client_->GetState() != buzz::XmppEngine::STATE_OPEN) { |
+ LOG(DFATAL) << "non-open xmpp_client_ passed to " |
+ << "CacheInvalidationPacketHandler"; |
+ return; |
+ } |
+ xmpp_client_->SignalStateChange.connect( |
+ this, &CacheInvalidationPacketHandler::OnClientStateChange); |
invalidation::NetworkEndpoint* network_endpoint = |
invalidation_client_->network_endpoint(); |
CHECK(network_endpoint); |
@@ -227,6 +234,10 @@ CacheInvalidationPacketHandler::~CacheInvalidationPacketHandler() { |
void CacheInvalidationPacketHandler::HandleOutboundPacket( |
invalidation::NetworkEndpoint* const& network_endpoint) { |
CHECK_EQ(network_endpoint, invalidation_client_->network_endpoint()); |
+ if (!xmpp_client_) { |
+ LOG(DFATAL) << "HandleOutboundPacket() called with NULL xmpp_client_"; |
+ return; |
+ } |
invalidation::string message; |
network_endpoint->TakeOutboundMessage(&message); |
std::string encoded_message; |
@@ -258,4 +269,21 @@ void CacheInvalidationPacketHandler::HandleInboundPacket( |
network_endpoint->HandleInboundMessage(decoded_message); |
} |
+void CacheInvalidationPacketHandler::OnClientStateChange( |
+ buzz::XmppEngine::State state) { |
+ switch (state) { |
+ case buzz::XmppEngine::STATE_OPEN: |
+ LOG(INFO) << "redundant STATE_OPEN message received"; |
+ break; |
+ case buzz::XmppEngine::STATE_CLOSED: |
+ LOG(INFO) << "xmpp_client_ closed -- setting to NULL"; |
+ xmpp_client_->SignalStateChange.disconnect(this); |
+ xmpp_client_ = NULL; |
+ break; |
+ default: |
+ LOG(INFO) << "xmpp_client_ state changed to " << state; |
+ break; |
+ } |
+} |
+ |
} // namespace sync_notifier |