OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/autofill/autofill_download.h" | 5 #include "chrome/browser/autofill/autofill_download.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 | 94 |
95 // Check if we need to upload form. | 95 // Check if we need to upload form. |
96 double upload_rate = form_was_matched ? GetPositiveUploadRate() : | 96 double upload_rate = form_was_matched ? GetPositiveUploadRate() : |
97 GetNegativeUploadRate(); | 97 GetNegativeUploadRate(); |
98 if (base::RandDouble() > upload_rate) { | 98 if (base::RandDouble() > upload_rate) { |
99 VLOG(1) << "AutoFillDownloadManager: Upload request is ignored"; | 99 VLOG(1) << "AutoFillDownloadManager: Upload request is ignored"; |
100 // If we ever need notification that upload was skipped, add it here. | 100 // If we ever need notification that upload was skipped, add it here. |
101 return false; | 101 return false; |
102 } | 102 } |
103 std::string form_xml; | 103 std::string form_xml; |
104 if (!form.EncodeUploadRequest(form_was_matched, &form_xml)) | 104 if (!form.EncodeUploadRequest(form_was_matched, |
| 105 ConvertPresenceBitsToString().c_str(), |
| 106 &form_xml)) |
105 return false; | 107 return false; |
106 | 108 |
107 FormRequestData request_data; | 109 FormRequestData request_data; |
108 request_data.form_signatures.push_back(form.FormSignature()); | 110 request_data.form_signatures.push_back(form.FormSignature()); |
109 request_data.request_type = AutoFillDownloadManager::REQUEST_UPLOAD; | 111 request_data.request_type = AutoFillDownloadManager::REQUEST_UPLOAD; |
110 | 112 |
111 return StartRequest(form_xml, request_data); | 113 return StartRequest(form_xml, request_data); |
112 } | 114 } |
113 | 115 |
114 bool AutoFillDownloadManager::CancelRequest( | 116 bool AutoFillDownloadManager::CancelRequest( |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 if (rate == negative_upload_rate_) | 155 if (rate == negative_upload_rate_) |
154 return; | 156 return; |
155 negative_upload_rate_ = rate; | 157 negative_upload_rate_ = rate; |
156 DCHECK_GE(rate, 0.0); | 158 DCHECK_GE(rate, 0.0); |
157 DCHECK_LE(rate, 1.0); | 159 DCHECK_LE(rate, 1.0); |
158 DCHECK(profile_); | 160 DCHECK(profile_); |
159 PrefService* preferences = profile_->GetPrefs(); | 161 PrefService* preferences = profile_->GetPrefs(); |
160 preferences->SetReal(prefs::kAutoFillNegativeUploadRate, rate); | 162 preferences->SetReal(prefs::kAutoFillNegativeUploadRate, rate); |
161 } | 163 } |
162 | 164 |
| 165 void AutoFillDownloadManager::ClearPresence() { |
| 166 // Determine all of the field types that were autofilled. Pack bits into |
| 167 // |presence_bitfield|. The necessary size for |presence_bitfield| is |
| 168 // ceil((MAX_VALID_FIELD_TYPE + 7) / 8) bytes (uint8). |
| 169 presence_bitfield_.resize((MAX_VALID_FIELD_TYPE + 0x7) >> 3); |
| 170 for (size_t i = 0; i < presence_bitfield_.size(); ++i) |
| 171 presence_bitfield_[i] = 0; |
| 172 } |
| 173 |
| 174 void AutoFillDownloadManager::SetPresenceBit(AutoFillFieldType field_type) { |
| 175 DCHECK(presence_bitfield_.size() > (static_cast<size_t>(field_type) >> 3)); |
| 176 // Set bit in the bitfield: byte |field_type| / 8, bit in byte |
| 177 // |field_type| % 8 from the left. |
| 178 presence_bitfield_[field_type >> 3] |= (0x80 >> (field_type & 7)); |
| 179 } |
| 180 |
| 181 std::string AutoFillDownloadManager::ConvertPresenceBitsToString() { |
| 182 std::string data_presence; |
| 183 data_presence.reserve(presence_bitfield_.size() * 2 + 1); |
| 184 // Skip leading zeroes. If all mask is 0 - return empty string. |
| 185 size_t data_end = presence_bitfield_.size(); |
| 186 for (; data_end > 0 && !presence_bitfield_[data_end - 1]; --data_end) { |
| 187 } |
| 188 // Print all non-zero bytes into the string. |
| 189 for (size_t i = 0; i < data_end; ++i) { |
| 190 base::StringAppendF(&data_presence, "%02x", presence_bitfield_[i]); |
| 191 } |
| 192 return data_presence; |
| 193 } |
| 194 |
163 bool AutoFillDownloadManager::StartRequest( | 195 bool AutoFillDownloadManager::StartRequest( |
164 const std::string& form_xml, | 196 const std::string& form_xml, |
165 const FormRequestData& request_data) { | 197 const FormRequestData& request_data) { |
166 std::string request_url; | 198 std::string request_url; |
167 if (request_data.request_type == AutoFillDownloadManager::REQUEST_QUERY) | 199 if (request_data.request_type == AutoFillDownloadManager::REQUEST_QUERY) |
168 request_url = AUTO_FILL_QUERY_SERVER_REQUEST_URL; | 200 request_url = AUTO_FILL_QUERY_SERVER_REQUEST_URL; |
169 else | 201 else |
170 request_url = AUTO_FILL_UPLOAD_SERVER_REQUEST_URL; | 202 request_url = AUTO_FILL_UPLOAD_SERVER_REQUEST_URL; |
171 | 203 |
172 if (!request_url.compare(DISABLED_REQUEST_URL) && !is_testing_) { | 204 if (!request_url.compare(DISABLED_REQUEST_URL) && !is_testing_) { |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 SetNegativeUploadRate(new_negative_upload_rate); | 296 SetNegativeUploadRate(new_negative_upload_rate); |
265 } | 297 } |
266 | 298 |
267 if (observer_) | 299 if (observer_) |
268 observer_->OnUploadedAutoFillHeuristics(it->second.form_signatures[0]); | 300 observer_->OnUploadedAutoFillHeuristics(it->second.form_signatures[0]); |
269 } | 301 } |
270 } | 302 } |
271 delete it->first; | 303 delete it->first; |
272 url_fetchers_.erase(it); | 304 url_fetchers_.erase(it); |
273 } | 305 } |
OLD | NEW |