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

Unified Diff: chrome/browser/autofill/autofill_download.cc

Issue 6213002: Propagate correct data to the Toolbar servers (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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 side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698