| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/geolocation/network_location_request.h" | 5 #include "content/browser/geolocation/network_location_request.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 int age_milliseconds, | 96 int age_milliseconds, |
| 97 base::DictionaryValue* request); | 97 base::DictionaryValue* request); |
| 98 } // namespace | 98 } // namespace |
| 99 | 99 |
| 100 int NetworkLocationRequest::url_fetcher_id_for_tests = 0; | 100 int NetworkLocationRequest::url_fetcher_id_for_tests = 0; |
| 101 | 101 |
| 102 NetworkLocationRequest::NetworkLocationRequest( | 102 NetworkLocationRequest::NetworkLocationRequest( |
| 103 net::URLRequestContextGetter* context, | 103 net::URLRequestContextGetter* context, |
| 104 const GURL& url, | 104 const GURL& url, |
| 105 LocationResponseCallback callback) | 105 LocationResponseCallback callback) |
| 106 : url_context_(context), | 106 : url_context_(context), location_response_callback_(callback), url_(url) { |
| 107 callback_(callback), | |
| 108 url_(url) { | |
| 109 } | 107 } |
| 110 | 108 |
| 111 NetworkLocationRequest::~NetworkLocationRequest() { | 109 NetworkLocationRequest::~NetworkLocationRequest() { |
| 112 } | 110 } |
| 113 | 111 |
| 114 bool NetworkLocationRequest::MakeRequest(const base::string16& access_token, | 112 bool NetworkLocationRequest::MakeRequest(const base::string16& access_token, |
| 115 const WifiData& wifi_data, | 113 const WifiData& wifi_data, |
| 116 const base::Time& timestamp) { | 114 const base::Time& timestamp) { |
| 117 RecordUmaEvent(NETWORK_LOCATION_REQUEST_EVENT_REQUEST_START); | 115 RecordUmaEvent(NETWORK_LOCATION_REQUEST_EVENT_REQUEST_START); |
| 118 RecordUmaAccessPoints(wifi_data.access_point_data.size()); | 116 RecordUmaAccessPoints(wifi_data.access_point_data.size()); |
| 119 if (url_fetcher_ != NULL) { | 117 if (url_fetcher_ != NULL) { |
| 120 DVLOG(1) << "NetworkLocationRequest : Cancelling pending request"; | 118 DVLOG(1) << "NetworkLocationRequest : Cancelling pending request"; |
| 121 RecordUmaEvent(NETWORK_LOCATION_REQUEST_EVENT_REQUEST_CANCEL); | 119 RecordUmaEvent(NETWORK_LOCATION_REQUEST_EVENT_REQUEST_CANCEL); |
| 122 url_fetcher_.reset(); | 120 url_fetcher_.reset(); |
| 123 } | 121 } |
| 124 wifi_data_ = wifi_data; | 122 wifi_data_ = wifi_data; |
| 125 timestamp_ = timestamp; | 123 wifi_data_timestamp_ = timestamp; |
| 126 | 124 |
| 127 GURL request_url = FormRequestURL(url_); | 125 GURL request_url = FormRequestURL(url_); |
| 128 url_fetcher_.reset(net::URLFetcher::Create( | 126 url_fetcher_.reset(net::URLFetcher::Create( |
| 129 url_fetcher_id_for_tests, request_url, net::URLFetcher::POST, this)); | 127 url_fetcher_id_for_tests, request_url, net::URLFetcher::POST, this)); |
| 130 url_fetcher_->SetRequestContext(url_context_.get()); | 128 url_fetcher_->SetRequestContext(url_context_.get()); |
| 131 std::string upload_data; | 129 std::string upload_data; |
| 132 FormUploadData(wifi_data, timestamp, access_token, &upload_data); | 130 FormUploadData(wifi_data, timestamp, access_token, &upload_data); |
| 133 url_fetcher_->SetUploadData("application/json", upload_data); | 131 url_fetcher_->SetUploadData("application/json", upload_data); |
| 134 url_fetcher_->SetLoadFlags( | 132 url_fetcher_->SetLoadFlags( |
| 135 net::LOAD_BYPASS_CACHE | net::LOAD_DISABLE_CACHE | | 133 net::LOAD_BYPASS_CACHE | net::LOAD_DISABLE_CACHE | |
| 136 net::LOAD_DO_NOT_SAVE_COOKIES | net::LOAD_DO_NOT_SEND_COOKIES | | 134 net::LOAD_DO_NOT_SAVE_COOKIES | net::LOAD_DO_NOT_SEND_COOKIES | |
| 137 net::LOAD_DO_NOT_SEND_AUTH_DATA); | 135 net::LOAD_DO_NOT_SEND_AUTH_DATA); |
| 138 | 136 |
| 139 start_time_ = base::TimeTicks::Now(); | 137 request_start_time_ = base::TimeTicks::Now(); |
| 140 url_fetcher_->Start(); | 138 url_fetcher_->Start(); |
| 141 return true; | 139 return true; |
| 142 } | 140 } |
| 143 | 141 |
| 144 void NetworkLocationRequest::OnURLFetchComplete( | 142 void NetworkLocationRequest::OnURLFetchComplete( |
| 145 const net::URLFetcher* source) { | 143 const net::URLFetcher* source) { |
| 146 DCHECK_EQ(url_fetcher_.get(), source); | 144 DCHECK_EQ(url_fetcher_.get(), source); |
| 147 | 145 |
| 148 net::URLRequestStatus status = source->GetStatus(); | 146 net::URLRequestStatus status = source->GetStatus(); |
| 149 int response_code = source->GetResponseCode(); | 147 int response_code = source->GetResponseCode(); |
| 150 RecordUmaResponseCode(response_code); | 148 RecordUmaResponseCode(response_code); |
| 151 | 149 |
| 152 Geoposition position; | 150 Geoposition position; |
| 153 base::string16 access_token; | 151 base::string16 access_token; |
| 154 std::string data; | 152 std::string data; |
| 155 source->GetResponseAsString(&data); | 153 source->GetResponseAsString(&data); |
| 156 GetLocationFromResponse(status.is_success(), | 154 GetLocationFromResponse(status.is_success(), |
| 157 response_code, | 155 response_code, |
| 158 data, | 156 data, |
| 159 timestamp_, | 157 wifi_data_timestamp_, |
| 160 source->GetURL(), | 158 source->GetURL(), |
| 161 &position, | 159 &position, |
| 162 &access_token); | 160 &access_token); |
| 163 const bool server_error = | 161 const bool server_error = |
| 164 !status.is_success() || (response_code >= 500 && response_code < 600); | 162 !status.is_success() || (response_code >= 500 && response_code < 600); |
| 165 url_fetcher_.reset(); | 163 url_fetcher_.reset(); |
| 166 | 164 |
| 167 if (!server_error) { | 165 if (!server_error) { |
| 168 const base::TimeDelta request_time = base::TimeTicks::Now() - start_time_; | 166 const base::TimeDelta request_time = |
| 167 base::TimeTicks::Now() - request_start_time_; |
| 169 | 168 |
| 170 UMA_HISTOGRAM_CUSTOM_TIMES( | 169 UMA_HISTOGRAM_CUSTOM_TIMES( |
| 171 "Net.Wifi.LbsLatency", | 170 "Net.Wifi.LbsLatency", |
| 172 request_time, | 171 request_time, |
| 173 base::TimeDelta::FromMilliseconds(1), | 172 base::TimeDelta::FromMilliseconds(1), |
| 174 base::TimeDelta::FromSeconds(10), | 173 base::TimeDelta::FromSeconds(10), |
| 175 100); | 174 100); |
| 176 } | 175 } |
| 177 | 176 |
| 178 DVLOG(1) << "NetworkLocationRequest::OnURLFetchComplete() : run callback."; | 177 DVLOG(1) << "NetworkLocationRequest::OnURLFetchComplete() : run callback."; |
| 179 callback_.Run(position, server_error, access_token, wifi_data_); | 178 location_response_callback_.Run( |
| 179 position, server_error, access_token, wifi_data_); |
| 180 } | 180 } |
| 181 | 181 |
| 182 // Local functions. | 182 // Local functions. |
| 183 namespace { | 183 namespace { |
| 184 | 184 |
| 185 struct AccessPointLess { | 185 struct AccessPointLess { |
| 186 bool operator()(const AccessPointData* ap1, | 186 bool operator()(const AccessPointData* ap1, |
| 187 const AccessPointData* ap2) const { | 187 const AccessPointData* ap2) const { |
| 188 return ap2->radio_signal_strength < ap1->radio_signal_strength; | 188 return ap2->radio_signal_strength < ap1->radio_signal_strength; |
| 189 } | 189 } |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 | 423 |
| 424 // Other fields are optional. | 424 // Other fields are optional. |
| 425 GetAsDouble(*response_object, kAccuracyString, &position->accuracy); | 425 GetAsDouble(*response_object, kAccuracyString, &position->accuracy); |
| 426 | 426 |
| 427 return true; | 427 return true; |
| 428 } | 428 } |
| 429 | 429 |
| 430 } // namespace | 430 } // namespace |
| 431 | 431 |
| 432 } // namespace content | 432 } // namespace content |
| OLD | NEW |