| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/autofill/core/common/form_data.h" | 5 #include "components/autofill/core/common/form_data.h" |
| 6 | 6 |
| 7 #include "base/base64.h" | 7 #include "base/base64.h" |
| 8 #include "base/pickle.h" | 8 #include "base/pickle.h" |
| 9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| 11 #include "components/autofill/core/common/form_field_data.h" | 11 #include "components/autofill/core/common/form_field_data.h" |
| 12 | 12 |
| 13 namespace autofill { | 13 namespace autofill { |
| 14 | 14 |
| 15 namespace { | 15 namespace { |
| 16 | 16 |
| 17 const int kPickleVersion = 3; | 17 const int kPickleVersion = 3; |
| 18 | 18 |
| 19 bool ReadGURL(PickleIterator* iter, GURL* url) { | 19 bool ReadGURL(base::PickleIterator* iter, GURL* url) { |
| 20 std::string spec; | 20 std::string spec; |
| 21 if (!iter->ReadString(&spec)) | 21 if (!iter->ReadString(&spec)) |
| 22 return false; | 22 return false; |
| 23 | 23 |
| 24 *url = GURL(spec); | 24 *url = GURL(spec); |
| 25 return true; | 25 return true; |
| 26 } | 26 } |
| 27 | 27 |
| 28 void SerializeFormFieldDataVector(const std::vector<FormFieldData>& fields, | 28 void SerializeFormFieldDataVector(const std::vector<FormFieldData>& fields, |
| 29 Pickle* pickle) { | 29 base::Pickle* pickle) { |
| 30 pickle->WriteInt(static_cast<int>(fields.size())); | 30 pickle->WriteInt(static_cast<int>(fields.size())); |
| 31 for (size_t i = 0; i < fields.size(); ++i) { | 31 for (size_t i = 0; i < fields.size(); ++i) { |
| 32 SerializeFormFieldData(fields[i], pickle); | 32 SerializeFormFieldData(fields[i], pickle); |
| 33 } | 33 } |
| 34 } | 34 } |
| 35 | 35 |
| 36 bool DeserializeFormFieldDataVector(PickleIterator* iter, | 36 bool DeserializeFormFieldDataVector(base::PickleIterator* iter, |
| 37 std::vector<FormFieldData>* fields) { | 37 std::vector<FormFieldData>* fields) { |
| 38 int size; | 38 int size; |
| 39 if (!iter->ReadInt(&size)) | 39 if (!iter->ReadInt(&size)) |
| 40 return false; | 40 return false; |
| 41 | 41 |
| 42 FormFieldData temp; | 42 FormFieldData temp; |
| 43 for (int i = 0; i < size; ++i) { | 43 for (int i = 0; i < size; ++i) { |
| 44 if (!DeserializeFormFieldData(iter, &temp)) | 44 if (!DeserializeFormFieldData(iter, &temp)) |
| 45 return false; | 45 return false; |
| 46 | 46 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 << form.action << " " | 108 << form.action << " " |
| 109 << form.user_submitted << " " | 109 << form.user_submitted << " " |
| 110 << form.is_form_tag << " " | 110 << form.is_form_tag << " " |
| 111 << "Fields:"; | 111 << "Fields:"; |
| 112 for (size_t i = 0; i < form.fields.size(); ++i) { | 112 for (size_t i = 0; i < form.fields.size(); ++i) { |
| 113 os << form.fields[i] << ","; | 113 os << form.fields[i] << ","; |
| 114 } | 114 } |
| 115 return os; | 115 return os; |
| 116 } | 116 } |
| 117 | 117 |
| 118 void SerializeFormData(const FormData& form_data, Pickle* pickle) { | 118 void SerializeFormData(const FormData& form_data, base::Pickle* pickle) { |
| 119 pickle->WriteInt(kPickleVersion); | 119 pickle->WriteInt(kPickleVersion); |
| 120 pickle->WriteString16(form_data.name); | 120 pickle->WriteString16(form_data.name); |
| 121 pickle->WriteString(form_data.origin.spec()); | 121 pickle->WriteString(form_data.origin.spec()); |
| 122 pickle->WriteString(form_data.action.spec()); | 122 pickle->WriteString(form_data.action.spec()); |
| 123 pickle->WriteBool(form_data.user_submitted); | 123 pickle->WriteBool(form_data.user_submitted); |
| 124 SerializeFormFieldDataVector(form_data.fields, pickle); | 124 SerializeFormFieldDataVector(form_data.fields, pickle); |
| 125 pickle->WriteBool(form_data.is_form_tag); | 125 pickle->WriteBool(form_data.is_form_tag); |
| 126 } | 126 } |
| 127 | 127 |
| 128 void SerializeFormDataToBase64String(const FormData& form_data, | 128 void SerializeFormDataToBase64String(const FormData& form_data, |
| 129 std::string* output) { | 129 std::string* output) { |
| 130 Pickle pickle; | 130 base::Pickle pickle; |
| 131 SerializeFormData(form_data, &pickle); | 131 SerializeFormData(form_data, &pickle); |
| 132 Base64Encode( | 132 Base64Encode( |
| 133 base::StringPiece(static_cast<const char*>(pickle.data()), pickle.size()), | 133 base::StringPiece(static_cast<const char*>(pickle.data()), pickle.size()), |
| 134 output); | 134 output); |
| 135 } | 135 } |
| 136 | 136 |
| 137 bool DeserializeFormData(PickleIterator* iter, FormData* form_data) { | 137 bool DeserializeFormData(base::PickleIterator* iter, FormData* form_data) { |
| 138 int version; | 138 int version; |
| 139 FormData temp_form_data; | 139 FormData temp_form_data; |
| 140 if (!iter->ReadInt(&version)) { | 140 if (!iter->ReadInt(&version)) { |
| 141 DVLOG(1) << "Bad pickle of FormData, no version present"; | 141 DVLOG(1) << "Bad pickle of FormData, no version present"; |
| 142 return false; | 142 return false; |
| 143 } | 143 } |
| 144 | 144 |
| 145 if (version < 1 || version > kPickleVersion) { | 145 if (version < 1 || version > kPickleVersion) { |
| 146 DVLOG(1) << "Unknown FormData pickle version " << version; | 146 DVLOG(1) << "Unknown FormData pickle version " << version; |
| 147 return false; | 147 return false; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 *form_data = temp_form_data; | 180 *form_data = temp_form_data; |
| 181 return true; | 181 return true; |
| 182 } | 182 } |
| 183 | 183 |
| 184 bool DeserializeFormDataFromBase64String(const base::StringPiece& input, | 184 bool DeserializeFormDataFromBase64String(const base::StringPiece& input, |
| 185 FormData* form_data) { | 185 FormData* form_data) { |
| 186 if (input.empty()) | 186 if (input.empty()) |
| 187 return false; | 187 return false; |
| 188 std::string pickle_data; | 188 std::string pickle_data; |
| 189 Base64Decode(input, &pickle_data); | 189 Base64Decode(input, &pickle_data); |
| 190 Pickle pickle(pickle_data.data(), static_cast<int>(pickle_data.size())); | 190 base::Pickle pickle(pickle_data.data(), static_cast<int>(pickle_data.size())); |
| 191 PickleIterator iter(pickle); | 191 base::PickleIterator iter(pickle); |
| 192 return DeserializeFormData(&iter, form_data); | 192 return DeserializeFormData(&iter, form_data); |
| 193 } | 193 } |
| 194 | 194 |
| 195 } // namespace autofill | 195 } // namespace autofill |
| OLD | NEW |