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

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

Issue 248213004: Record connection, registration, and receiving activities. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . 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
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/unregistration_request.h" 5 #include "google_apis/gcm/engine/unregistration_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"
11 #include "base/strings/string_piece.h" 11 #include "base/strings/string_piece.h"
12 #include "base/values.h" 12 #include "base/values.h"
13 #include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
13 #include "net/base/escape.h" 14 #include "net/base/escape.h"
14 #include "net/http/http_request_headers.h" 15 #include "net/http/http_request_headers.h"
15 #include "net/http/http_status_code.h" 16 #include "net/http/http_status_code.h"
16 #include "net/url_request/url_fetcher.h" 17 #include "net/url_request/url_fetcher.h"
17 #include "net/url_request/url_request_context_getter.h" 18 #include "net/url_request/url_request_context_getter.h"
18 #include "net/url_request/url_request_status.h" 19 #include "net/url_request/url_request_status.h"
19 #include "url/gurl.h" 20 #include "url/gurl.h"
20 21
21 namespace gcm { 22 namespace gcm {
22 23
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 security_token(security_token), 109 security_token(security_token),
109 app_id(app_id) { 110 app_id(app_id) {
110 } 111 }
111 112
112 UnregistrationRequest::RequestInfo::~RequestInfo() {} 113 UnregistrationRequest::RequestInfo::~RequestInfo() {}
113 114
114 UnregistrationRequest::UnregistrationRequest( 115 UnregistrationRequest::UnregistrationRequest(
115 const RequestInfo& request_info, 116 const RequestInfo& request_info,
116 const net::BackoffEntry::Policy& backoff_policy, 117 const net::BackoffEntry::Policy& backoff_policy,
117 const UnregistrationCallback& callback, 118 const UnregistrationCallback& callback,
118 scoped_refptr<net::URLRequestContextGetter> request_context_getter) 119 scoped_refptr<net::URLRequestContextGetter> request_context_getter,
120 GCMStatsRecorder* recorder)
119 : callback_(callback), 121 : callback_(callback),
120 request_info_(request_info), 122 request_info_(request_info),
121 backoff_entry_(&backoff_policy), 123 backoff_entry_(&backoff_policy),
122 request_context_getter_(request_context_getter), 124 request_context_getter_(request_context_getter),
125 recorder_(recorder),
123 weak_ptr_factory_(this) { 126 weak_ptr_factory_(this) {
124 } 127 }
125 128
126 UnregistrationRequest::~UnregistrationRequest() {} 129 UnregistrationRequest::~UnregistrationRequest() {}
127 130
128 void UnregistrationRequest::Start() { 131 void UnregistrationRequest::Start() {
129 DCHECK(!callback_.is_null()); 132 DCHECK(!callback_.is_null());
130 DCHECK(request_info_.android_id != 0UL); 133 DCHECK(request_info_.android_id != 0UL);
131 DCHECK(request_info_.security_token != 0UL); 134 DCHECK(request_info_.security_token != 0UL);
132 DCHECK(!url_fetcher_.get()); 135 DCHECK(!url_fetcher_.get());
(...skipping 16 matching lines...) Expand all
149 BuildFormEncoding(kDeviceIdKey, android_id, &body); 152 BuildFormEncoding(kDeviceIdKey, android_id, &body);
150 BuildFormEncoding(kDeleteKey, kDeleteValue, &body); 153 BuildFormEncoding(kDeleteKey, kDeleteValue, &body);
151 BuildFormEncoding(kUnregistrationCallerKey, 154 BuildFormEncoding(kUnregistrationCallerKey,
152 kUnregistrationCallerValue, 155 kUnregistrationCallerValue,
153 &body); 156 &body);
154 157
155 DVLOG(1) << "Unregistration request: " << body; 158 DVLOG(1) << "Unregistration request: " << body;
156 url_fetcher_->SetUploadData(kRequestContentType, body); 159 url_fetcher_->SetUploadData(kRequestContentType, body);
157 160
158 DVLOG(1) << "Performing unregistration for: " << request_info_.app_id; 161 DVLOG(1) << "Performing unregistration for: " << request_info_.app_id;
162 recorder_->RecordUnregistrationSent(request_info_.app_id);
159 url_fetcher_->Start(); 163 url_fetcher_->Start();
160 } 164 }
161 165
162 void UnregistrationRequest::RetryWithBackoff(bool update_backoff) { 166 void UnregistrationRequest::RetryWithBackoff(bool update_backoff) {
163 if (update_backoff) { 167 if (update_backoff) {
164 url_fetcher_.reset(); 168 url_fetcher_.reset();
165 backoff_entry_.InformOfRequest(false); 169 backoff_entry_.InformOfRequest(false);
166 } 170 }
167 171
168 if (backoff_entry_.ShouldRejectRequest()) { 172 if (backoff_entry_.ShouldRejectRequest()) {
169 DVLOG(1) << "Delaying GCM unregistration of app: " 173 DVLOG(1) << "Delaying GCM unregistration of app: "
170 << request_info_.app_id << ", for " 174 << request_info_.app_id << ", for "
171 << backoff_entry_.GetTimeUntilRelease().InMilliseconds() 175 << backoff_entry_.GetTimeUntilRelease().InMilliseconds()
172 << " milliseconds."; 176 << " milliseconds.";
177 recorder_->RecordUnregistrationRetryDelayed(
178 request_info_.app_id,
179 backoff_entry_.GetTimeUntilRelease().InMilliseconds());
173 base::MessageLoop::current()->PostDelayedTask( 180 base::MessageLoop::current()->PostDelayedTask(
174 FROM_HERE, 181 FROM_HERE,
175 base::Bind(&UnregistrationRequest::RetryWithBackoff, 182 base::Bind(&UnregistrationRequest::RetryWithBackoff,
176 weak_ptr_factory_.GetWeakPtr(), 183 weak_ptr_factory_.GetWeakPtr(),
177 false), 184 false),
178 backoff_entry_.GetTimeUntilRelease()); 185 backoff_entry_.GetTimeUntilRelease());
179 return; 186 return;
180 } 187 }
181 188
182 Start(); 189 Start();
183 } 190 }
184 191
185 void UnregistrationRequest::OnURLFetchComplete(const net::URLFetcher* source) { 192 void UnregistrationRequest::OnURLFetchComplete(const net::URLFetcher* source) {
186 UnregistrationRequest::Status status = 193 UnregistrationRequest::Status status =
187 ParseFetcherResponse(source, request_info_.app_id); 194 ParseFetcherResponse(source, request_info_.app_id);
188 195
189 DVLOG(1) << "UnregistrationRequestStauts: " << status; 196 DVLOG(1) << "UnregistrationRequestStauts: " << status;
190 UMA_HISTOGRAM_ENUMERATION("GCM.UnregistrationRequestStatus", 197 UMA_HISTOGRAM_ENUMERATION("GCM.UnregistrationRequestStatus",
191 status, 198 status,
192 UNREGISTRATION_STATUS_COUNT); 199 UNREGISTRATION_STATUS_COUNT);
200 recorder_->RecordUnregistrationResponse(request_info_.app_id, status);
193 201
194 if (status == URL_FETCHING_FAILED || 202 if (status == URL_FETCHING_FAILED ||
195 status == SERVICE_UNAVAILABLE || 203 status == SERVICE_UNAVAILABLE ||
196 status == INTERNAL_SERVER_ERROR || 204 status == INTERNAL_SERVER_ERROR ||
197 status == INCORRECT_APP_ID || 205 status == INCORRECT_APP_ID ||
198 status == RESPONSE_PARSING_FAILED) { 206 status == RESPONSE_PARSING_FAILED) {
199 RetryWithBackoff(true); 207 RetryWithBackoff(true);
200 } else { 208 } else {
201 // status == SUCCESS || HTTP_NOT_OK || NO_RESPONSE_BODY || 209 // status == SUCCESS || HTTP_NOT_OK || NO_RESPONSE_BODY ||
202 // INVALID_PARAMETERS || UNKNOWN_ERROR 210 // INVALID_PARAMETERS || UNKNOWN_ERROR
203 callback_.Run(status); 211 callback_.Run(status);
204 } 212 }
205 } 213 }
206 214
207 } // namespace gcm 215 } // namespace gcm
OLDNEW
« no previous file with comments | « google_apis/gcm/engine/unregistration_request.h ('k') | google_apis/gcm/engine/unregistration_request_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698