form_data.cc revision 424c4d7b64af9d0d8fd9624f381f469654d5e3d2
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "components/autofill/core/common/form_data.h" 6 7#include "base/pickle.h" 8#include "base/strings/string_util.h" 9#include "components/autofill/core/common/form_field_data.h" 10 11namespace autofill { 12 13namespace { 14 15const int kPickleVersion = 1; 16 17bool ReadGURL(PickleIterator* iter, GURL* url) { 18 std::string spec; 19 if (!iter->ReadString(&spec)) 20 return false; 21 22 *url = GURL(spec); 23 return true; 24} 25 26void SerializeFormFieldDataVector(const std::vector<FormFieldData> fields, 27 Pickle* pickle) { 28 pickle->WriteInt(static_cast<int>(fields.size())); 29 for (size_t i = 0; i < fields.size(); ++i) { 30 SerializeFormFieldData(fields[i], pickle); 31 } 32} 33 34bool DeserializeFormFieldDataVector(PickleIterator* iter, 35 std::vector<FormFieldData>* fields) { 36 int size; 37 if (!iter->ReadInt(&size)) 38 return false; 39 40 FormFieldData temp; 41 for (int i = 0; i < size; ++i) { 42 if (!DeserializeFormFieldData(iter, &temp)) 43 return false; 44 45 fields->push_back(temp); 46 } 47 return true; 48} 49 50} // namespace 51 52FormData::FormData() 53 : user_submitted(false) { 54} 55 56FormData::FormData(const FormData& data) 57 : name(data.name), 58 method(data.method), 59 origin(data.origin), 60 action(data.action), 61 user_submitted(data.user_submitted), 62 fields(data.fields) { 63} 64 65FormData::~FormData() { 66} 67 68bool FormData::operator==(const FormData& form) const { 69 return name == form.name && 70 StringToLowerASCII(method) == StringToLowerASCII(form.method) && 71 origin == form.origin && 72 action == form.action && 73 user_submitted == form.user_submitted && 74 fields == form.fields; 75} 76 77bool FormData::operator!=(const FormData& form) const { 78 return !operator==(form); 79} 80 81void SerializeFormData(const FormData& form_data, Pickle* pickle) { 82 pickle->WriteInt(kPickleVersion); 83 pickle->WriteString16(form_data.name); 84 pickle->WriteString16(form_data.method); 85 pickle->WriteString(form_data.origin.spec()); 86 pickle->WriteString(form_data.action.spec()); 87 pickle->WriteBool(form_data.user_submitted); 88 SerializeFormFieldDataVector(form_data.fields, pickle); 89} 90 91bool DeserializeFormData(PickleIterator* iter, FormData* form_data) { 92 int version; 93 if (!iter->ReadInt(&version)) { 94 LOG(ERROR) << "Bad pickle of FormData, no version present"; 95 return false; 96 } 97 98 switch (version) { 99 case 1: { 100 if (!iter->ReadString16(&form_data->name) || 101 !iter->ReadString16(&form_data->method) || 102 !ReadGURL(iter, &form_data->origin) || 103 !ReadGURL(iter, &form_data->action) || 104 !iter->ReadBool(&form_data->user_submitted) || 105 !DeserializeFormFieldDataVector(iter, &form_data->fields)) { 106 LOG(ERROR) << "Could not deserialize FormData from pickle"; 107 return false; 108 } 109 break; 110 } 111 default: { 112 LOG(ERROR) << "Unknown FormData pickle version " << version; 113 return false; 114 } 115 } 116 return true; 117} 118 119} // namespace autofill 120