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

Side by Side Diff: google_apis/gcm/engine/mcs_client.cc

Issue 160703002: [GCM] Track connection failures properly (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "google_apis/gcm/engine/mcs_client.h" 5 #include "google_apis/gcm/engine/mcs_client.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 DCHECK_EQ(CONNECTING, state_); 525 DCHECK_EQ(CONNECTING, state_);
526 mcs_proto::LoginResponse* login_response = 526 mcs_proto::LoginResponse* login_response =
527 reinterpret_cast<mcs_proto::LoginResponse*>(protobuf.get()); 527 reinterpret_cast<mcs_proto::LoginResponse*>(protobuf.get());
528 DVLOG(1) << "Received login response:"; 528 DVLOG(1) << "Received login response:";
529 DVLOG(1) << " Id: " << login_response->id(); 529 DVLOG(1) << " Id: " << login_response->id();
530 DVLOG(1) << " Timestamp: " << login_response->server_timestamp(); 530 DVLOG(1) << " Timestamp: " << login_response->server_timestamp();
531 if (login_response->has_error() && login_response->error().code() != 0) { 531 if (login_response->has_error() && login_response->error().code() != 0) {
532 state_ = UNINITIALIZED; 532 state_ = UNINITIALIZED;
533 DVLOG(1) << " Error code: " << login_response->error().code(); 533 DVLOG(1) << " Error code: " << login_response->error().code();
534 DVLOG(1) << " Error message: " << login_response->error().message(); 534 DVLOG(1) << " Error message: " << login_response->error().message();
535 LOG(ERROR) << "Failed to log in to GCM, resetting connection.";
536 connection_factory_->SignalConnectionReset(
537 ConnectionFactory::LOGIN_FAILURE);
535 mcs_error_callback_.Run(); 538 mcs_error_callback_.Run();
536 return; 539 return;
537 } 540 }
538 541
539 if (login_response->has_heartbeat_config()) { 542 if (login_response->has_heartbeat_config()) {
540 heartbeat_manager_.UpdateHeartbeatConfig( 543 heartbeat_manager_.UpdateHeartbeatConfig(
541 login_response->heartbeat_config()); 544 login_response->heartbeat_config());
542 } 545 }
543 546
544 state_ = CONNECTED; 547 state_ = CONNECTED;
(...skipping 30 matching lines...) Expand all
575 MCSMessage(kHeartbeatAckTag, mcs_proto::HeartbeatAck())); 578 MCSMessage(kHeartbeatAckTag, mcs_proto::HeartbeatAck()));
576 return; 579 return;
577 case kHeartbeatAckTag: 580 case kHeartbeatAckTag:
578 DCHECK_GE(stream_id_in_, 1U); 581 DCHECK_GE(stream_id_in_, 1U);
579 DVLOG(1) << "Received heartbeat ack."; 582 DVLOG(1) << "Received heartbeat ack.";
580 // Do nothing else, all messages act as heartbeat acks. 583 // Do nothing else, all messages act as heartbeat acks.
581 return; 584 return;
582 case kCloseTag: 585 case kCloseTag:
583 LOG(ERROR) << "Received close command, resetting connection."; 586 LOG(ERROR) << "Received close command, resetting connection.";
584 state_ = LOADED; 587 state_ = LOADED;
585 connection_factory_->SignalConnectionReset(); 588 connection_factory_->SignalConnectionReset(
589 ConnectionFactory::CLOSE_COMMAND);
586 return; 590 return;
587 case kIqStanzaTag: { 591 case kIqStanzaTag: {
588 DCHECK_GE(stream_id_in_, 1U); 592 DCHECK_GE(stream_id_in_, 1U);
589 mcs_proto::IqStanza* iq_stanza = 593 mcs_proto::IqStanza* iq_stanza =
590 reinterpret_cast<mcs_proto::IqStanza*>(protobuf.get()); 594 reinterpret_cast<mcs_proto::IqStanza*>(protobuf.get());
591 const mcs_proto::Extension& iq_extension = iq_stanza->extension(); 595 const mcs_proto::Extension& iq_extension = iq_stanza->extension();
592 switch (iq_extension.id()) { 596 switch (iq_extension.id()) {
593 case kSelectiveAck: { 597 case kSelectiveAck: {
594 PersistentIdList acked_ids; 598 PersistentIdList acked_ids;
595 if (BuildPersistentIdListFromProto(iq_extension.data(), 599 if (BuildPersistentIdListFromProto(iq_extension.data(),
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 acked_incoming_ids, 730 acked_incoming_ids,
727 base::Bind(&MCSClient::OnGCMUpdateFinished, 731 base::Bind(&MCSClient::OnGCMUpdateFinished,
728 weak_ptr_factory_.GetWeakPtr())); 732 weak_ptr_factory_.GetWeakPtr()));
729 } 733 }
730 734
731 MCSClient::PersistentId MCSClient::GetNextPersistentId() { 735 MCSClient::PersistentId MCSClient::GetNextPersistentId() {
732 return base::Uint64ToString(base::TimeTicks::Now().ToInternalValue()); 736 return base::Uint64ToString(base::TimeTicks::Now().ToInternalValue());
733 } 737 }
734 738
735 void MCSClient::OnConnectionResetByHeartbeat() { 739 void MCSClient::OnConnectionResetByHeartbeat() {
736 connection_factory_->SignalConnectionReset(); 740 connection_factory_->SignalConnectionReset(
741 ConnectionFactory::HEARTBEAT_FAILURE);
737 } 742 }
738 743
739 void MCSClient::NotifyMessageSendStatus( 744 void MCSClient::NotifyMessageSendStatus(
740 const google::protobuf::MessageLite& protobuf, 745 const google::protobuf::MessageLite& protobuf,
741 MessageSendStatus status) { 746 MessageSendStatus status) {
742 if (GetMCSProtoTag(protobuf) != kDataMessageStanzaTag) 747 if (GetMCSProtoTag(protobuf) != kDataMessageStanzaTag)
743 return; 748 return;
744 749
745 const mcs_proto::DataMessageStanza* data_message_stanza = 750 const mcs_proto::DataMessageStanza* data_message_stanza =
746 reinterpret_cast<const mcs_proto::DataMessageStanza*>(&protobuf); 751 reinterpret_cast<const mcs_proto::DataMessageStanza*>(&protobuf);
747 message_sent_callback_.Run( 752 message_sent_callback_.Run(
748 data_message_stanza->device_user_id(), 753 data_message_stanza->device_user_id(),
749 data_message_stanza->category(), 754 data_message_stanza->category(),
750 data_message_stanza->id(), 755 data_message_stanza->id(),
751 status); 756 status);
752 } 757 }
753 758
754 void MCSClient::SetGCMStoreForTesting(GCMStore* gcm_store) { 759 void MCSClient::SetGCMStoreForTesting(GCMStore* gcm_store) {
755 gcm_store_ = gcm_store; 760 gcm_store_ = gcm_store;
756 } 761 }
757 762
758 } // namespace gcm 763 } // namespace gcm
OLDNEW
« no previous file with comments | « google_apis/gcm/engine/fake_connection_handler.cc ('k') | google_apis/gcm/engine/mcs_client_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698