| 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) {
|
|
|