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

Unified Diff: components/autofill/core/common/form_field_data.cc

Issue 23033010: [password autofill] Add serialization for FormData and FormFieldData (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Windows Created 7 years, 4 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: components/autofill/core/common/form_field_data.cc
diff --git a/components/autofill/core/common/form_field_data.cc b/components/autofill/core/common/form_field_data.cc
index 1de786dcf3ca65b59ac429cc2f400000fdfdbb4f..afa9f53e0bc691f3df6b314583e3231307c7f5ab 100644
--- a/components/autofill/core/common/form_field_data.cc
+++ b/components/autofill/core/common/form_field_data.cc
@@ -4,9 +4,59 @@
#include "components/autofill/core/common/form_field_data.h"
+#include "base/pickle.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
+namespace {
+
+const int kPickleVersion = 1;
+
+void AddVectorToPickle(std::vector<base::string16> strings,
+ Pickle* pickle) {
+ pickle->WriteInt(static_cast<int>(strings.size()));
+ for (size_t i = 0; i < strings.size(); ++i) {
+ pickle->WriteString16(strings[i]);
+ }
+}
+
+bool ReadStringVector(PickleIterator* iter,
+ std::vector<base::string16>* strings) {
+ int size;
+ if (!iter->ReadInt(&size))
+ return false;
+
+ string16 pickle_data;
+ for (int i = 0; i < size; i++) {
+ if (!iter->ReadString16(&pickle_data))
+ return false;
+
+ strings->push_back(pickle_data);
+ }
+ return true;
+}
+
+bool ReadTextDirection(PickleIterator* iter,
+ base::i18n::TextDirection* direction) {
+ int pickle_data;
+ if (!iter->ReadInt(&pickle_data))
+ return false;
+
+ *direction = static_cast<base::i18n::TextDirection>(pickle_data);
+ return true;
+}
+
+bool ReadSize(PickleIterator* iter, size_t* size) {
+ uint64 pickle_data;
+ if (!iter->ReadUInt64(&pickle_data))
+ return false;
+
+ *size = static_cast<size_t>(pickle_data);
+ return true;
+}
+
+} // namespace
+
namespace autofill {
FormFieldData::FormFieldData()
@@ -43,6 +93,62 @@ bool FormFieldData::operator<(const FormFieldData& field) const {
return label < field.label;
}
+void SerializeFormFieldData(const FormFieldData& field_data,
+ Pickle* pickle) {
+ pickle->WriteInt(kPickleVersion);
+ pickle->WriteString16(field_data.label);
+ pickle->WriteString16(field_data.name);
+ pickle->WriteString16(field_data.value);
+ pickle->WriteString(field_data.form_control_type);
+ pickle->WriteString(field_data.autocomplete_attribute);
+ pickle->WriteUInt64(static_cast<uint64>(field_data.max_length));
+ pickle->WriteBool(field_data.is_autofilled);
+ pickle->WriteBool(field_data.is_checked);
+ pickle->WriteBool(field_data.is_checkable);
+ pickle->WriteBool(field_data.is_focusable);
+ pickle->WriteBool(field_data.should_autocomplete);
+ pickle->WriteInt(field_data.text_direction);
+ AddVectorToPickle(field_data.option_values, pickle);
+ AddVectorToPickle(field_data.option_contents, pickle);
+}
+
+bool DeserializeFormFieldData(PickleIterator* iter,
+ FormFieldData* field_data) {
+ int version;
+ if (!iter->ReadInt(&version)) {
+ LOG(ERROR) << "Bad pickle of FormFieldData, no version present";
+ return false;
+ }
+
+ switch (version) {
+ case 1: {
+ if (!iter->ReadString16(&field_data->label) ||
+ !iter->ReadString16(&field_data->name) ||
+ !iter->ReadString16(&field_data->value) ||
+ !iter->ReadString(&field_data->form_control_type) ||
+ !iter->ReadString(&field_data->autocomplete_attribute) ||
+ !ReadSize(iter, &field_data->max_length) ||
+ !iter->ReadBool(&field_data->is_autofilled) ||
+ !iter->ReadBool(&field_data->is_checked) ||
+ !iter->ReadBool(&field_data->is_checkable) ||
+ !iter->ReadBool(&field_data->is_focusable) ||
+ !iter->ReadBool(&field_data->should_autocomplete) ||
+ !ReadTextDirection(iter, &field_data->text_direction) ||
+ !ReadStringVector(iter, &field_data->option_values) ||
+ !ReadStringVector(iter, &field_data->option_contents)) {
+ LOG(ERROR) << "Could not deserialize FormFieldData from pickle";
+ return false;
+ }
+ break;
+ }
+ default: {
+ LOG(ERROR) << "Unknown FormFieldData pickle version " << version;
+ return false;
+ }
+ }
+ return true;
+}
+
std::ostream& operator<<(std::ostream& os, const FormFieldData& field) {
return os
<< UTF16ToUTF8(field.label)
« no previous file with comments | « components/autofill/core/common/form_field_data.h ('k') | components/autofill/core/common/form_field_data_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698