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

Side by Side Diff: components/autofill/core/common/form_data.cc

Issue 1671753004: [Autofill] Fill fields that have an autocomplete attributes even if not in a form. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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 unified diff | Download patch
OLDNEW
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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <tuple> 9 #include <tuple>
10 10
11 #include "base/base64.h" 11 #include "base/base64.h"
12 #include "base/pickle.h" 12 #include "base/pickle.h"
13 #include "base/strings/string_util.h" 13 #include "base/strings/string_util.h"
14 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
15 #include "components/autofill/core/common/form_field_data.h" 15 #include "components/autofill/core/common/form_field_data.h"
16 16
17 namespace autofill { 17 namespace autofill {
18 18
19 namespace { 19 namespace {
20 20
21 const int kPickleVersion = 4; 21 const int kPickleVersion = 5;
22 22
23 bool ReadGURL(base::PickleIterator* iter, GURL* url) { 23 bool ReadGURL(base::PickleIterator* iter, GURL* url) {
24 std::string spec; 24 std::string spec;
25 if (!iter->ReadString(&spec)) 25 if (!iter->ReadString(&spec))
26 return false; 26 return false;
27 27
28 *url = GURL(spec); 28 *url = GURL(spec);
29 return true; 29 return true;
30 } 30 }
31 31
(...skipping 22 matching lines...) Expand all
54 } 54 }
55 55
56 void LogDeserializationError(int version) { 56 void LogDeserializationError(int version) {
57 DVLOG(1) << "Could not deserialize version " << version 57 DVLOG(1) << "Could not deserialize version " << version
58 << " FormData from pickle."; 58 << " FormData from pickle.";
59 } 59 }
60 60
61 } // namespace 61 } // namespace
62 62
63 FormData::FormData() 63 FormData::FormData()
64 : is_form_tag(true) { 64 : is_form_tag(true), is_syntehtic_non_checkout_form(false) {}
65 }
66 65
67 FormData::FormData(const FormData& data) 66 FormData::FormData(const FormData& data)
68 : name(data.name), 67 : name(data.name),
69 origin(data.origin), 68 origin(data.origin),
70 action(data.action), 69 action(data.action),
71 is_form_tag(data.is_form_tag), 70 is_form_tag(data.is_form_tag),
72 fields(data.fields) { 71 is_syntehtic_non_checkout_form(data.is_syntehtic_non_checkout_form),
73 } 72 fields(data.fields) {}
74 73
75 FormData::~FormData() { 74 FormData::~FormData() {
76 } 75 }
77 76
78 bool FormData::SameFormAs(const FormData& form) const { 77 bool FormData::SameFormAs(const FormData& form) const {
79 if (name != form.name || 78 if (name != form.name || origin != form.origin || action != form.action ||
80 origin != form.origin ||
81 action != form.action ||
82 is_form_tag != form.is_form_tag || 79 is_form_tag != form.is_form_tag ||
80 is_syntehtic_non_checkout_form != form.is_syntehtic_non_checkout_form ||
83 fields.size() != form.fields.size()) 81 fields.size() != form.fields.size())
84 return false; 82 return false;
85 for (size_t i = 0; i < fields.size(); ++i) { 83 for (size_t i = 0; i < fields.size(); ++i) {
86 if (!fields[i].SameFieldAs(form.fields[i])) 84 if (!fields[i].SameFieldAs(form.fields[i]))
87 return false; 85 return false;
88 } 86 }
89 return true; 87 return true;
90 } 88 }
91 89
92 bool FormData::operator<(const FormData& form) const { 90 bool FormData::operator<(const FormData& form) const {
93 return std::tie(name, origin, action, is_form_tag, fields) < 91 return std::tie(name, origin, action, is_form_tag,
92 is_syntehtic_non_checkout_form, fields) <
94 std::tie(form.name, form.origin, form.action, form.is_form_tag, 93 std::tie(form.name, form.origin, form.action, form.is_form_tag,
95 form.fields); 94 form.is_syntehtic_non_checkout_form, form.fields);
96 } 95 }
97 96
98 std::ostream& operator<<(std::ostream& os, const FormData& form) { 97 std::ostream& operator<<(std::ostream& os, const FormData& form) {
99 os << base::UTF16ToUTF8(form.name) << " " 98 os << base::UTF16ToUTF8(form.name) << " " << form.origin << " " << form.action
100 << form.origin << " " 99 << " " << form.is_form_tag << " " << form.is_syntehtic_non_checkout_form
101 << form.action << " " 100 << " "
102 << form.is_form_tag << " "
103 << "Fields:"; 101 << "Fields:";
104 for (size_t i = 0; i < form.fields.size(); ++i) { 102 for (size_t i = 0; i < form.fields.size(); ++i) {
105 os << form.fields[i] << ","; 103 os << form.fields[i] << ",";
106 } 104 }
107 return os; 105 return os;
108 } 106 }
109 107
110 void SerializeFormData(const FormData& form_data, base::Pickle* pickle) { 108 void SerializeFormData(const FormData& form_data, base::Pickle* pickle) {
111 pickle->WriteInt(kPickleVersion); 109 pickle->WriteInt(kPickleVersion);
112 pickle->WriteString16(form_data.name); 110 pickle->WriteString16(form_data.name);
113 pickle->WriteString(form_data.origin.spec()); 111 pickle->WriteString(form_data.origin.spec());
114 pickle->WriteString(form_data.action.spec()); 112 pickle->WriteString(form_data.action.spec());
115 SerializeFormFieldDataVector(form_data.fields, pickle); 113 SerializeFormFieldDataVector(form_data.fields, pickle);
116 pickle->WriteBool(form_data.is_form_tag); 114 pickle->WriteBool(form_data.is_form_tag);
115 pickle->WriteBool(form_data.is_syntehtic_non_checkout_form);
117 } 116 }
118 117
119 void SerializeFormDataToBase64String(const FormData& form_data, 118 void SerializeFormDataToBase64String(const FormData& form_data,
120 std::string* output) { 119 std::string* output) {
121 base::Pickle pickle; 120 base::Pickle pickle;
122 SerializeFormData(form_data, &pickle); 121 SerializeFormData(form_data, &pickle);
123 Base64Encode( 122 Base64Encode(
124 base::StringPiece(static_cast<const char*>(pickle.data()), pickle.size()), 123 base::StringPiece(static_cast<const char*>(pickle.data()), pickle.size()),
125 output); 124 output);
126 } 125 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 162
164 if (version >= 3) { 163 if (version >= 3) {
165 if (!iter->ReadBool(&temp_form_data.is_form_tag)) { 164 if (!iter->ReadBool(&temp_form_data.is_form_tag)) {
166 LogDeserializationError(version); 165 LogDeserializationError(version);
167 return false; 166 return false;
168 } 167 }
169 } else { 168 } else {
170 form_data->is_form_tag = true; 169 form_data->is_form_tag = true;
171 } 170 }
172 171
172 if (version >= 5) {
173 if (!iter->ReadBool(&temp_form_data.is_syntehtic_non_checkout_form)) {
174 LogDeserializationError(version);
175 return false;
176 }
177 }
178
173 *form_data = temp_form_data; 179 *form_data = temp_form_data;
174 return true; 180 return true;
175 } 181 }
176 182
177 bool DeserializeFormDataFromBase64String(const base::StringPiece& input, 183 bool DeserializeFormDataFromBase64String(const base::StringPiece& input,
178 FormData* form_data) { 184 FormData* form_data) {
179 if (input.empty()) 185 if (input.empty())
180 return false; 186 return false;
181 std::string pickle_data; 187 std::string pickle_data;
182 Base64Decode(input, &pickle_data); 188 Base64Decode(input, &pickle_data);
183 base::Pickle pickle(pickle_data.data(), static_cast<int>(pickle_data.size())); 189 base::Pickle pickle(pickle_data.data(), static_cast<int>(pickle_data.size()));
184 base::PickleIterator iter(pickle); 190 base::PickleIterator iter(pickle);
185 return DeserializeFormData(&iter, form_data); 191 return DeserializeFormData(&iter, form_data);
186 } 192 }
187 193
188 } // namespace autofill 194 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698