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

Side by Side Diff: chrome/browser/chromeos/geolocation/simple_geolocation_request.cc

Issue 289313005: Add SimpleGeolocationTest unit test. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update after review. 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 "chrome/browser/chromeos/geolocation/simple_geolocation_request.h" 5 #include "chrome/browser/chromeos/geolocation/simple_geolocation_request.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 198
199 if (error_object) { 199 if (error_object) {
200 if (!error_object->GetStringWithoutPathExpansion( 200 if (!error_object->GetStringWithoutPathExpansion(
201 kMessageString, &(position->error_message))) { 201 kMessageString, &(position->error_message))) {
202 position->error_message = "Server returned error without message."; 202 position->error_message = "Server returned error without message.";
203 } 203 }
204 204
205 // Ignore result (code defaults to zero). 205 // Ignore result (code defaults to zero).
206 error_object->GetIntegerWithoutPathExpansion(kCodeString, 206 error_object->GetIntegerWithoutPathExpansion(kCodeString,
207 &(position->error_code)); 207 &(position->error_code));
208 } else {
209 position->error_message.erase();
208 } 210 }
209 211
210 if (location_object) { 212 if (location_object) {
211 if (!location_object->GetDoubleWithoutPathExpansion( 213 if (!location_object->GetDoubleWithoutPathExpansion(
212 kLatString, &(position->latitude))) { 214 kLatString, &(position->latitude))) {
213 PrintGeolocationError(server_url, "Missing 'lat' attribute.", position); 215 PrintGeolocationError(server_url, "Missing 'lat' attribute.", position);
214 RecordUmaEvent(SIMPLE_GEOLOCATION_REQUEST_EVENT_RESPONSE_MALFORMED); 216 RecordUmaEvent(SIMPLE_GEOLOCATION_REQUEST_EVENT_RESPONSE_MALFORMED);
215 return false; 217 return false;
216 } 218 }
217 if (!location_object->GetDoubleWithoutPathExpansion( 219 if (!location_object->GetDoubleWithoutPathExpansion(
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 } 267 }
266 268
267 } // namespace 269 } // namespace
268 270
269 SimpleGeolocationRequest::SimpleGeolocationRequest( 271 SimpleGeolocationRequest::SimpleGeolocationRequest(
270 net::URLRequestContextGetter* url_context_getter, 272 net::URLRequestContextGetter* url_context_getter,
271 const GURL& service_url, 273 const GURL& service_url,
272 base::TimeDelta timeout) 274 base::TimeDelta timeout)
273 : url_context_getter_(url_context_getter), 275 : url_context_getter_(url_context_getter),
274 service_url_(service_url), 276 service_url_(service_url),
277 retry_sleep_on_server_error_(base::TimeDelta::FromSeconds(
278 kResolveGeolocationRetrySleepOnServerErrorSeconds)),
279 retry_sleep_on_bad_response_(base::TimeDelta::FromSeconds(
280 kResolveGeolocationRetrySleepBadResponseSeconds)),
275 timeout_(timeout), 281 timeout_(timeout),
276 retries_(0) { 282 retries_(0) {
277 } 283 }
278 284
279 SimpleGeolocationRequest::~SimpleGeolocationRequest() { 285 SimpleGeolocationRequest::~SimpleGeolocationRequest() {
280 DCHECK(thread_checker_.CalledOnValidThread()); 286 DCHECK(thread_checker_.CalledOnValidThread());
281 287
282 // If callback is not empty, request is cancelled. 288 // If callback is not empty, request is cancelled.
283 if (!callback_.is_null()) { 289 if (!callback_.is_null()) {
284 RecordUmaResponseTime(base::Time::Now() - request_started_at_, false); 290 RecordUmaResponseTime(base::Time::Now() - request_started_at_, false);
(...skipping 22 matching lines...) Expand all
307 void SimpleGeolocationRequest::MakeRequest(const ResponseCallback& callback) { 313 void SimpleGeolocationRequest::MakeRequest(const ResponseCallback& callback) {
308 callback_ = callback; 314 callback_ = callback;
309 request_url_ = GeolocationRequestURL(service_url_); 315 request_url_ = GeolocationRequestURL(service_url_);
310 timeout_timer_.Start( 316 timeout_timer_.Start(
311 FROM_HERE, timeout_, this, &SimpleGeolocationRequest::OnTimeout); 317 FROM_HERE, timeout_, this, &SimpleGeolocationRequest::OnTimeout);
312 request_started_at_ = base::Time::Now(); 318 request_started_at_ = base::Time::Now();
313 StartRequest(); 319 StartRequest();
314 } 320 }
315 321
316 void SimpleGeolocationRequest::Retry(bool server_error) { 322 void SimpleGeolocationRequest::Retry(bool server_error) {
317 const base::TimeDelta delay = base::TimeDelta::FromSeconds( 323 base::TimeDelta delay(server_error ? retry_sleep_on_server_error_
318 server_error ? kResolveGeolocationRetrySleepOnServerErrorSeconds 324 : retry_sleep_on_bad_response_);
319 : kResolveGeolocationRetrySleepBadResponseSeconds);
320 request_scheduled_.Start( 325 request_scheduled_.Start(
321 FROM_HERE, delay, this, &SimpleGeolocationRequest::StartRequest); 326 FROM_HERE, delay, this, &SimpleGeolocationRequest::StartRequest);
322 } 327 }
323 328
324 void SimpleGeolocationRequest::OnURLFetchComplete( 329 void SimpleGeolocationRequest::OnURLFetchComplete(
325 const net::URLFetcher* source) { 330 const net::URLFetcher* source) {
326 DCHECK_EQ(url_fetcher_.get(), source); 331 DCHECK_EQ(url_fetcher_.get(), source);
327 332
328 net::URLRequestStatus status = source->GetStatus(); 333 net::URLRequestStatus status = source->GetStatus();
329 int response_code = source->GetResponseCode(); 334 int response_code = source->GetResponseCode();
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 ? SIMPLE_GEOLOCATION_REQUEST_RESULT_SERVER_ERROR 383 ? SIMPLE_GEOLOCATION_REQUEST_RESULT_SERVER_ERROR
379 : SIMPLE_GEOLOCATION_REQUEST_RESULT_FAILURE); 384 : SIMPLE_GEOLOCATION_REQUEST_RESULT_FAILURE);
380 RecordUmaResult(result, retries_); 385 RecordUmaResult(result, retries_);
381 position_.status = Geoposition::STATUS_TIMEOUT; 386 position_.status = Geoposition::STATUS_TIMEOUT;
382 const base::TimeDelta elapsed = base::Time::Now() - request_started_at_; 387 const base::TimeDelta elapsed = base::Time::Now() - request_started_at_;
383 ReplyAndDestroySelf(elapsed, true /* server_error */); 388 ReplyAndDestroySelf(elapsed, true /* server_error */);
384 // "this" is already destroyed here. 389 // "this" is already destroyed here.
385 } 390 }
386 391
387 } // namespace chromeos 392 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698