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

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

Issue 165903002: Add 3 more registartion status codes for UMA collection. Also added tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/registration_request.h" 5 #include "google_apis/gcm/engine/registration_request.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.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 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 if (error == kInvalidParameters) 63 if (error == kInvalidParameters)
64 return RegistrationRequest::INVALID_PARAMETERS; 64 return RegistrationRequest::INVALID_PARAMETERS;
65 return RegistrationRequest::UNKNOWN_ERROR; 65 return RegistrationRequest::UNKNOWN_ERROR;
66 } 66 }
67 67
68 // Indicates whether a retry attempt should be made based on the status of the 68 // Indicates whether a retry attempt should be made based on the status of the
69 // last request. 69 // last request.
70 bool ShouldRetryWithStatus(RegistrationRequest::Status status) { 70 bool ShouldRetryWithStatus(RegistrationRequest::Status status) {
71 return status == RegistrationRequest::UNKNOWN_ERROR || 71 return status == RegistrationRequest::UNKNOWN_ERROR ||
72 status == RegistrationRequest::AUTHENTICATION_FAILED || 72 status == RegistrationRequest::AUTHENTICATION_FAILED ||
73 status == RegistrationRequest::DEVICE_REGISTRATION_ERROR; 73 status == RegistrationRequest::DEVICE_REGISTRATION_ERROR ||
74 status == RegistrationRequest::HTTP_NOT_OK ||
75 status == RegistrationRequest::URL_FETCHING_FAILED ||
76 status == RegistrationRequest::RESPONSE_PARSING_FAILED;
74 } 77 }
75 78
76 void RecordRegistrationStatusToUMA(RegistrationRequest::Status status) { 79 void RecordRegistrationStatusToUMA(RegistrationRequest::Status status) {
77 UMA_HISTOGRAM_ENUMERATION("GCM.RegistrationRequestStatus", status, 80 UMA_HISTOGRAM_ENUMERATION("GCM.RegistrationRequestStatus", status,
78 RegistrationRequest::STATUS_COUNT); 81 RegistrationRequest::STATUS_COUNT);
79 } 82 }
80 83
81 } // namespace 84 } // namespace
82 85
83 RegistrationRequest::RequestInfo::RequestInfo( 86 RegistrationRequest::RequestInfo::RequestInfo(
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 base::Bind(&RegistrationRequest::RetryWithBackoff, 171 base::Bind(&RegistrationRequest::RetryWithBackoff,
169 weak_ptr_factory_.GetWeakPtr(), 172 weak_ptr_factory_.GetWeakPtr(),
170 false), 173 false),
171 backoff_entry_.GetTimeUntilRelease()); 174 backoff_entry_.GetTimeUntilRelease());
172 return; 175 return;
173 } 176 }
174 177
175 Start(); 178 Start();
176 } 179 }
177 180
178 void RegistrationRequest::OnURLFetchComplete(const net::URLFetcher* source) { 181 RegistrationRequest::Status RegistrationRequest::ParseResponse(
182 const net::URLFetcher* source, std::string* token) {
183 if (!source->GetStatus().is_success()) {
184 LOG(ERROR) << "URL fetching failed.";
185 return URL_FETCHING_FAILED;
186 }
187 if (source->GetResponseCode() != net::HTTP_OK) {
188 LOG(ERROR) << "URL fetching HTTP response code is not OK. It is "
189 << source->GetResponseCode();
190 return HTTP_NOT_OK;
191 }
179 std::string response; 192 std::string response;
180 if (!source->GetStatus().is_success() || 193 if (!source->GetResponseAsString(&response)) {
181 source->GetResponseCode() != net::HTTP_OK || 194 LOG(ERROR) << "Failed to parse registration response as a string.";
182 !source->GetResponseAsString(&response)) { 195 return RESPONSE_PARSING_FAILED;
183 LOG(ERROR) << "Failed to get registration response: "
184 << source->GetStatus().is_success() << " "
185 << source->GetResponseCode();
186 RetryWithBackoff(true);
187 return;
188 } 196 }
189 197
190 DVLOG(1) << "Parsing registration response: " << response; 198 DVLOG(1) << "Parsing registration response: " << response;
191 size_t token_pos = response.find(kTokenPrefix); 199 size_t token_pos = response.find(kTokenPrefix);
192 if (token_pos != std::string::npos) { 200 if (token_pos != std::string::npos) {
193 std::string token = 201 *token = response.substr(token_pos + arraysize(kTokenPrefix) - 1);
194 response.substr(token_pos + arraysize(kTokenPrefix) - 1); 202 return SUCCESS;
195 RecordRegistrationStatusToUMA(SUCCESS);
196 callback_.Run(SUCCESS, token);
197 return;
198 } 203 }
199 204
200 size_t error_pos = response.find(kErrorPrefix); 205 size_t error_pos = response.find(kErrorPrefix);
201 Status status = UNKNOWN_ERROR; 206 if (error_pos == std::string::npos)
202 if (error_pos != std::string::npos) { 207 return UNKNOWN_ERROR;
203 std::string error = 208 std::string error = response.substr(error_pos + arraysize(kErrorPrefix) - 1);
204 response.substr(error_pos + arraysize(kErrorPrefix) - 1); 209 return GetStatusFromError(error);
205 status = GetStatusFromError(error); 210 }
206 }
207 RecordRegistrationStatusToUMA(status);
208 211
209 if (ShouldRetryWithStatus(status)) { 212 void RegistrationRequest::OnURLFetchComplete(const net::URLFetcher* source) {
213 std::string token;
214 Status status = ParseResponse(source, &token);
215 RecordRegistrationStatusToUMA(status );
216 if (ShouldRetryWithStatus(status))
210 RetryWithBackoff(true); 217 RetryWithBackoff(true);
211 return; 218 else
212 } 219 callback_.Run(status, token);
213
214 callback_.Run(status, std::string());
215 } 220 }
216 221
217 } // namespace gcm 222 } // namespace gcm
OLDNEW
« no previous file with comments | « google_apis/gcm/engine/registration_request.h ('k') | google_apis/gcm/engine/registration_request_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698