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

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: Unittests 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..26367a054bc52bcef4842f9213e2a05414597f71 100644
--- a/components/autofill/core/common/form_field_data.cc
+++ b/components/autofill/core/common/form_field_data.cc
@@ -4,9 +4,49 @@
#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(strings.size());
+ for (size_t i = 0; i < strings.size(); ++i) {
+ pickle->WriteString16(strings[i]);
+ }
+}
+
+bool ReadVector(PickleIterator* iter, std::vector<base::string16>* strings) {
Evan Stade 2013/08/28 22:42:11 suggested fn name: ReadStringVector or ReadStrings
Garrett Casto 2013/08/29 06:48:34 Done.
+ int size;
+ if (!iter->ReadInt(&size))
+ return false;
+
+ string16 temp;
Evan Stade 2013/08/28 22:42:11 nit: temp is not a super useful var name, how abou
Garrett Casto 2013/08/29 06:48:34 Done.
+ for (int i = 0; i < size; i++) {
+ if (!iter->ReadString16(&temp))
+ return false;
+
+ strings->push_back(temp);
+ }
+ return true;
+}
+
+bool ReadTextDirection(PickleIterator* iter,
+ base::i18n::TextDirection* direction) {
+ int temp;
Evan Stade 2013/08/28 22:42:11 ditto
Garrett Casto 2013/08/29 06:48:34 Done.
+ if (!iter->ReadInt(&temp))
+ return false;
+
+ *direction = static_cast<base::i18n::TextDirection>(temp);
+ return true;
+}
+
+} // namespace
+
namespace autofill {
FormFieldData::FormFieldData()
@@ -43,6 +83,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(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) ||
+ !iter->ReadUInt64(&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) ||
+ !ReadVector(iter, &field_data->option_values) ||
+ !ReadVector(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)

Powered by Google App Engine
This is Rietveld 408576698