Index: chrome/browser/autofill/autofill_download.cc |
=================================================================== |
--- chrome/browser/autofill/autofill_download.cc (revision 71495) |
+++ chrome/browser/autofill/autofill_download.cc (working copy) |
@@ -101,7 +101,9 @@ |
return false; |
} |
std::string form_xml; |
- if (!form.EncodeUploadRequest(form_was_matched, &form_xml)) |
+ if (!form.EncodeUploadRequest(form_was_matched, |
+ ConvertPresenceBitsToString().c_str(), |
+ &form_xml)) |
return false; |
FormRequestData request_data; |
@@ -160,6 +162,36 @@ |
preferences->SetReal(prefs::kAutoFillNegativeUploadRate, rate); |
} |
+void AutoFillDownloadManager::ClearPresence() { |
+ // Determine all of the field types that were autofilled. Pack bits into |
+ // |presence_bitfield|. The necessary size for |presence_bitfield| is |
+ // ceil((MAX_VALID_FIELD_TYPE + 7) / 8) bytes (uint8). |
+ presence_bitfield_.resize((MAX_VALID_FIELD_TYPE + 0x7) >> 3); |
+ for (size_t i = 0; i < presence_bitfield_.size(); ++i) |
+ presence_bitfield_[i] = 0; |
+} |
+ |
+void AutoFillDownloadManager::SetPresenceBit(AutoFillFieldType field_type) { |
+ DCHECK(presence_bitfield_.size() > (static_cast<size_t>(field_type) >> 3)); |
+ // Set bit in the bitfield: byte |field_type| / 8, bit in byte |
+ // |field_type| % 8 from the left. |
+ presence_bitfield_[field_type >> 3] |= (0x80 >> (field_type & 7)); |
+} |
+ |
+std::string AutoFillDownloadManager::ConvertPresenceBitsToString() { |
+ std::string data_presence; |
+ data_presence.reserve(presence_bitfield_.size() * 2 + 1); |
+ // Skip leading zeroes. If all mask is 0 - return empty string. |
+ size_t data_end = presence_bitfield_.size(); |
+ for (; data_end > 0 && !presence_bitfield_[data_end - 1]; --data_end) { |
+ } |
+ // Print all non-zero bytes into the string. |
+ for (size_t i = 0; i < data_end; ++i) { |
+ base::StringAppendF(&data_presence, "%02x", presence_bitfield_[i]); |
+ } |
+ return data_presence; |
+} |
+ |
bool AutoFillDownloadManager::StartRequest( |
const std::string& form_xml, |
const FormRequestData& request_data) { |