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

Side by Side Diff: google_apis/gcm/gcm_client_impl.cc

Issue 270873002: Extract GCMClient data types into separate gcm_types.h (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Reupload Created 6 years, 7 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
« no previous file with comments | « google_apis/gcm/gcm_client.cc ('k') | google_apis/gcm/gcm_client_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/gcm_client_impl.h" 5 #include "google_apis/gcm/gcm_client_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 78
79 const int kMaxRegistrationRetries = 5; 79 const int kMaxRegistrationRetries = 5;
80 const char kMessageTypeDataMessage[] = "gcm"; 80 const char kMessageTypeDataMessage[] = "gcm";
81 const char kMessageTypeDeletedMessagesKey[] = "deleted_messages"; 81 const char kMessageTypeDeletedMessagesKey[] = "deleted_messages";
82 const char kMessageTypeKey[] = "message_type"; 82 const char kMessageTypeKey[] = "message_type";
83 const char kMessageTypeSendErrorKey[] = "send_error"; 83 const char kMessageTypeSendErrorKey[] = "send_error";
84 const char kSendErrorMessageIdKey[] = "google.message_id"; 84 const char kSendErrorMessageIdKey[] = "google.message_id";
85 const char kSendMessageFromValue[] = "gcm@chrome.com"; 85 const char kSendMessageFromValue[] = "gcm@chrome.com";
86 const int64 kDefaultUserSerialNumber = 0LL; 86 const int64 kDefaultUserSerialNumber = 0LL;
87 87
88 GCMClient::Result ToGCMClientResult(MCSClient::MessageSendStatus status) { 88 Result ToGCMClientResult(MCSClient::MessageSendStatus status) {
89 switch (status) { 89 switch (status) {
90 case MCSClient::QUEUED: 90 case MCSClient::QUEUED:
91 return GCMClient::SUCCESS; 91 return RESULT_SUCCESS;
92 case MCSClient::QUEUE_SIZE_LIMIT_REACHED: 92 case MCSClient::QUEUE_SIZE_LIMIT_REACHED:
93 return GCMClient::NETWORK_ERROR; 93 return RESULT_NETWORK_ERROR;
94 case MCSClient::APP_QUEUE_SIZE_LIMIT_REACHED: 94 case MCSClient::APP_QUEUE_SIZE_LIMIT_REACHED:
95 return GCMClient::NETWORK_ERROR; 95 return RESULT_NETWORK_ERROR;
96 case MCSClient::MESSAGE_TOO_LARGE: 96 case MCSClient::MESSAGE_TOO_LARGE:
97 return GCMClient::INVALID_PARAMETER; 97 return RESULT_INVALID_PARAMETER;
98 case MCSClient::NO_CONNECTION_ON_ZERO_TTL: 98 case MCSClient::NO_CONNECTION_ON_ZERO_TTL:
99 return GCMClient::NETWORK_ERROR; 99 return RESULT_NETWORK_ERROR;
100 case MCSClient::TTL_EXCEEDED: 100 case MCSClient::TTL_EXCEEDED:
101 return GCMClient::NETWORK_ERROR; 101 return RESULT_NETWORK_ERROR;
102 case MCSClient::SENT: 102 case MCSClient::SENT:
103 default: 103 default:
104 NOTREACHED(); 104 NOTREACHED();
105 break; 105 break;
106 } 106 }
107 return GCMClientImpl::UNKNOWN_ERROR; 107 return RESULT_UNKNOWN_ERROR;
108 } 108 }
109 109
110 MessageType DecodeMessageType(const std::string& value) { 110 MessageType DecodeMessageType(const std::string& value) {
111 if (kMessageTypeDeletedMessagesKey == value) 111 if (kMessageTypeDeletedMessagesKey == value)
112 return DELETED_MESSAGES; 112 return DELETED_MESSAGES;
113 if (kMessageTypeSendErrorKey == value) 113 if (kMessageTypeSendErrorKey == value)
114 return SEND_ERROR; 114 return SEND_ERROR;
115 if (kMessageTypeDataMessage == value) 115 if (kMessageTypeDataMessage == value)
116 return DATA_MESSAGE; 116 return DATA_MESSAGE;
117 return UNKNOWN; 117 return UNKNOWN;
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 const std::vector<std::string>& sender_ids) { 422 const std::vector<std::string>& sender_ids) {
423 DCHECK_EQ(state_, READY); 423 DCHECK_EQ(state_, READY);
424 424
425 // If the same sender ids is provided, return the cached registration ID 425 // If the same sender ids is provided, return the cached registration ID
426 // directly. 426 // directly.
427 RegistrationInfoMap::const_iterator registrations_iter = 427 RegistrationInfoMap::const_iterator registrations_iter =
428 registrations_.find(app_id); 428 registrations_.find(app_id);
429 if (registrations_iter != registrations_.end() && 429 if (registrations_iter != registrations_.end() &&
430 registrations_iter->second->sender_ids == sender_ids) { 430 registrations_iter->second->sender_ids == sender_ids) {
431 delegate_->OnRegisterFinished( 431 delegate_->OnRegisterFinished(
432 app_id, registrations_iter->second->registration_id, SUCCESS); 432 app_id, registrations_iter->second->registration_id, RESULT_SUCCESS);
433 return; 433 return;
434 } 434 }
435 435
436 RegistrationRequest::RequestInfo request_info( 436 RegistrationRequest::RequestInfo request_info(
437 device_checkin_info_.android_id, 437 device_checkin_info_.android_id,
438 device_checkin_info_.secret, 438 device_checkin_info_.secret,
439 app_id, 439 app_id,
440 sender_ids); 440 sender_ids);
441 DCHECK_EQ(0u, pending_registration_requests_.count(app_id)); 441 DCHECK_EQ(0u, pending_registration_requests_.count(app_id));
442 442
(...skipping 16 matching lines...) Expand all
459 const std::string& app_id, 459 const std::string& app_id,
460 const std::vector<std::string>& sender_ids, 460 const std::vector<std::string>& sender_ids,
461 RegistrationRequest::Status status, 461 RegistrationRequest::Status status,
462 const std::string& registration_id) { 462 const std::string& registration_id) {
463 DCHECK(delegate_); 463 DCHECK(delegate_);
464 464
465 Result result; 465 Result result;
466 PendingRegistrationRequests::iterator iter = 466 PendingRegistrationRequests::iterator iter =
467 pending_registration_requests_.find(app_id); 467 pending_registration_requests_.find(app_id);
468 if (iter == pending_registration_requests_.end()) 468 if (iter == pending_registration_requests_.end())
469 result = UNKNOWN_ERROR; 469 result = RESULT_UNKNOWN_ERROR;
470 else if (status == RegistrationRequest::INVALID_SENDER) 470 else if (status == RegistrationRequest::INVALID_SENDER)
471 result = INVALID_PARAMETER; 471 result = RESULT_INVALID_PARAMETER;
472 else if (registration_id.empty()) 472 else if (registration_id.empty())
473 result = SERVER_ERROR; 473 result = RESULT_SERVER_ERROR;
474 else 474 else
475 result = SUCCESS; 475 result = RESULT_SUCCESS;
476 476
477 if (result == SUCCESS) { 477 if (result == RESULT_SUCCESS) {
478 // Cache it. 478 // Cache it.
479 linked_ptr<RegistrationInfo> registration(new RegistrationInfo); 479 linked_ptr<RegistrationInfo> registration(new RegistrationInfo);
480 registration->sender_ids = sender_ids; 480 registration->sender_ids = sender_ids;
481 registration->registration_id = registration_id; 481 registration->registration_id = registration_id;
482 registrations_[app_id] = registration; 482 registrations_[app_id] = registration;
483 483
484 // Save it in the persistent store. 484 // Save it in the persistent store.
485 gcm_store_->AddRegistration( 485 gcm_store_->AddRegistration(
486 app_id, 486 app_id,
487 registration, 487 registration,
488 base::Bind(&GCMClientImpl::UpdateRegistrationCallback, 488 base::Bind(&GCMClientImpl::UpdateRegistrationCallback,
489 weak_ptr_factory_.GetWeakPtr())); 489 weak_ptr_factory_.GetWeakPtr()));
490 } 490 }
491 491
492 delegate_->OnRegisterFinished( 492 delegate_->OnRegisterFinished(
493 app_id, result == SUCCESS ? registration_id : std::string(), result); 493 app_id,
494 result == RESULT_SUCCESS ? registration_id : std::string(),
495 result);
494 496
495 if (iter != pending_registration_requests_.end()) { 497 if (iter != pending_registration_requests_.end()) {
496 delete iter->second; 498 delete iter->second;
497 pending_registration_requests_.erase(iter); 499 pending_registration_requests_.erase(iter);
498 } 500 }
499 } 501 }
500 502
501 void GCMClientImpl::Unregister(const std::string& app_id) { 503 void GCMClientImpl::Unregister(const std::string& app_id) {
502 DCHECK_EQ(state_, READY); 504 DCHECK_EQ(state_, READY);
503 if (pending_unregistration_requests_.count(app_id) == 1) 505 if (pending_unregistration_requests_.count(app_id) == 1)
(...skipping 25 matching lines...) Expand all
529 unregistration_request->Start(); 531 unregistration_request->Start();
530 } 532 }
531 533
532 void GCMClientImpl::OnUnregisterCompleted( 534 void GCMClientImpl::OnUnregisterCompleted(
533 const std::string& app_id, 535 const std::string& app_id,
534 UnregistrationRequest::Status status) { 536 UnregistrationRequest::Status status) {
535 DVLOG(1) << "Unregister completed for app: " << app_id 537 DVLOG(1) << "Unregister completed for app: " << app_id
536 << " with " << (status ? "success." : "failure."); 538 << " with " << (status ? "success." : "failure.");
537 delegate_->OnUnregisterFinished( 539 delegate_->OnUnregisterFinished(
538 app_id, 540 app_id,
539 status == UnregistrationRequest::SUCCESS ? SUCCESS : SERVER_ERROR); 541 status == UnregistrationRequest::SUCCESS ? RESULT_SUCCESS
542 : RESULT_SERVER_ERROR);
540 543
541 PendingUnregistrationRequests::iterator iter = 544 PendingUnregistrationRequests::iterator iter =
542 pending_unregistration_requests_.find(app_id); 545 pending_unregistration_requests_.find(app_id);
543 if (iter == pending_unregistration_requests_.end()) 546 if (iter == pending_unregistration_requests_.end())
544 return; 547 return;
545 548
546 delete iter->second; 549 delete iter->second;
547 pending_unregistration_requests_.erase(iter); 550 pending_unregistration_requests_.erase(iter);
548 } 551 }
549 552
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 // than |OnSendFinished|. SendErrorDetails.additional_data is left empty. 657 // than |OnSendFinished|. SendErrorDetails.additional_data is left empty.
655 // All other errors will be raised immediately, through asynchronous callback. 658 // All other errors will be raised immediately, through asynchronous callback.
656 // It is expected that TTL_EXCEEDED will be issued for a message that was 659 // It is expected that TTL_EXCEEDED will be issued for a message that was
657 // previously issued |OnSendFinished| with status SUCCESS. 660 // previously issued |OnSendFinished| with status SUCCESS.
658 // For now, we do not report that the message has been sent and acked 661 // For now, we do not report that the message has been sent and acked
659 // successfully. 662 // successfully.
660 // TODO(jianli): Consider adding UMA for this status. 663 // TODO(jianli): Consider adding UMA for this status.
661 if (status == MCSClient::TTL_EXCEEDED) { 664 if (status == MCSClient::TTL_EXCEEDED) {
662 SendErrorDetails send_error_details; 665 SendErrorDetails send_error_details;
663 send_error_details.message_id = message_id; 666 send_error_details.message_id = message_id;
664 send_error_details.result = GCMClient::TTL_EXCEEDED; 667 send_error_details.result = RESULT_TTL_EXCEEDED;
665 delegate_->OnMessageSendError(app_id, send_error_details); 668 delegate_->OnMessageSendError(app_id, send_error_details);
666 } else if (status != MCSClient::SENT) { 669 } else if (status != MCSClient::SENT) {
667 delegate_->OnSendFinished(app_id, message_id, ToGCMClientResult(status)); 670 delegate_->OnSendFinished(app_id, message_id, ToGCMClientResult(status));
668 } 671 }
669 } 672 }
670 673
671 void GCMClientImpl::OnMCSError() { 674 void GCMClientImpl::OnMCSError() {
672 // TODO(fgorski): For now it replaces the initialization method. Long term it 675 // TODO(fgorski): For now it replaces the initialization method. Long term it
673 // should have an error or status passed in. 676 // should have an error or status passed in.
674 } 677 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 incoming_message.collapse_key = data_message_stanza.token(); 749 incoming_message.collapse_key = data_message_stanza.token();
747 incoming_message.data = message_data; 750 incoming_message.data = message_data;
748 delegate_->OnMessageReceived(app_id, incoming_message); 751 delegate_->OnMessageReceived(app_id, incoming_message);
749 } 752 }
750 753
751 void GCMClientImpl::HandleIncomingSendError( 754 void GCMClientImpl::HandleIncomingSendError(
752 const mcs_proto::DataMessageStanza& data_message_stanza, 755 const mcs_proto::DataMessageStanza& data_message_stanza,
753 MessageData& message_data) { 756 MessageData& message_data) {
754 SendErrorDetails send_error_details; 757 SendErrorDetails send_error_details;
755 send_error_details.additional_data = message_data; 758 send_error_details.additional_data = message_data;
756 send_error_details.result = SERVER_ERROR; 759 send_error_details.result = RESULT_SERVER_ERROR;
757 760
758 MessageData::iterator iter = 761 MessageData::iterator iter =
759 send_error_details.additional_data.find(kSendErrorMessageIdKey); 762 send_error_details.additional_data.find(kSendErrorMessageIdKey);
760 if (iter != send_error_details.additional_data.end()) { 763 if (iter != send_error_details.additional_data.end()) {
761 send_error_details.message_id = iter->second; 764 send_error_details.message_id = iter->second;
762 send_error_details.additional_data.erase(iter); 765 send_error_details.additional_data.erase(iter);
763 } 766 }
764 767
765 recorder_.RecordIncomingSendError( 768 recorder_.RecordIncomingSendError(
766 data_message_stanza.category(), 769 data_message_stanza.category(),
767 data_message_stanza.to(), 770 data_message_stanza.to(),
768 data_message_stanza.id()); 771 data_message_stanza.id());
769 delegate_->OnMessageSendError(data_message_stanza.category(), 772 delegate_->OnMessageSendError(data_message_stanza.category(),
770 send_error_details); 773 send_error_details);
771 } 774 }
772 775
773 } // namespace gcm 776 } // namespace gcm
OLDNEW
« no previous file with comments | « google_apis/gcm/gcm_client.cc ('k') | google_apis/gcm/gcm_client_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698