OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
6 #include "base/string_util.h" | 6 #include "base/string_util.h" |
7 #include "base/utf_string_conversions.h" | 7 #include "base/utf_string_conversions.h" |
8 #include "chrome/browser/autofill/form_structure.h" | 8 #include "chrome/browser/autofill/form_structure.h" |
9 #include "googleurl/src/gurl.h" | 9 #include "googleurl/src/gurl.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputElement.h" | 11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputElement.h" |
12 #include "webkit/glue/form_data.h" | 12 #include "webkit/glue/form_data.h" |
13 #include "webkit/glue/form_field.h" | 13 #include "webkit/glue/form_field.h" |
14 | 14 |
15 using webkit_glue::FormData; | 15 using webkit_glue::FormData; |
| 16 using webkit_glue::FormField; |
16 using WebKit::WebInputElement; | 17 using WebKit::WebInputElement; |
17 | 18 |
18 namespace webkit_glue { | 19 namespace webkit_glue { |
19 | 20 |
20 std::ostream& operator<<(std::ostream& os, const FormData& form) { | 21 std::ostream& operator<<(std::ostream& os, const FormData& form) { |
21 os << UTF16ToUTF8(form.name) | 22 os << UTF16ToUTF8(form.name) |
22 << " " | 23 << " " |
23 << UTF16ToUTF8(form.method) | 24 << UTF16ToUTF8(form.method) |
24 << " " | 25 << " " |
25 << form.origin.spec() | 26 << form.origin.spec() |
(...skipping 18 matching lines...) Expand all Loading... |
44 static std::string Hash64Bit(const std::string& str) { | 45 static std::string Hash64Bit(const std::string& str) { |
45 return FormStructure::Hash64Bit(str); | 46 return FormStructure::Hash64Bit(str); |
46 } | 47 } |
47 }; | 48 }; |
48 | 49 |
49 namespace { | 50 namespace { |
50 | 51 |
51 TEST(FormStructureTest, FieldCount) { | 52 TEST(FormStructureTest, FieldCount) { |
52 FormData form; | 53 FormData form; |
53 form.method = ASCIIToUTF16("post"); | 54 form.method = ASCIIToUTF16("post"); |
54 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("username"), | 55 |
55 ASCIIToUTF16("username"), | 56 FormField field; |
56 string16(), | 57 field.label = ASCIIToUTF16("username"); |
57 ASCIIToUTF16("text"), | 58 field.name = ASCIIToUTF16("username"); |
58 0, | 59 field.form_control_type = ASCIIToUTF16("text"); |
59 false)); | 60 form.fields.push_back(field); |
60 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("password"), | 61 |
61 ASCIIToUTF16("password"), | 62 field.label = ASCIIToUTF16("password"); |
62 string16(), | 63 field.name = ASCIIToUTF16("password"); |
63 ASCIIToUTF16("password"), | 64 field.form_control_type = ASCIIToUTF16("password"); |
64 0, | 65 form.fields.push_back(field); |
65 false)); | 66 |
66 form.fields.push_back(webkit_glue::FormField(string16(), | 67 field.label = string16(); |
67 ASCIIToUTF16("Submit"), | 68 field.name = ASCIIToUTF16("Submit"); |
68 string16(), | 69 field.form_control_type = ASCIIToUTF16("submit"); |
69 ASCIIToUTF16("submit"), | 70 form.fields.push_back(field); |
70 0, | 71 |
71 false)); | |
72 FormStructure form_structure(form); | 72 FormStructure form_structure(form); |
73 | 73 |
74 // All fields are counted. | 74 // All fields are counted. |
75 EXPECT_EQ(3U, form_structure.field_count()); | 75 EXPECT_EQ(3U, form_structure.field_count()); |
76 } | 76 } |
77 | 77 |
78 TEST(FormStructureTest, AutofillCount) { | 78 TEST(FormStructureTest, AutofillCount) { |
79 FormData form; | 79 FormData form; |
80 form.method = ASCIIToUTF16("post"); | 80 form.method = ASCIIToUTF16("post"); |
81 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("username"), | 81 |
82 ASCIIToUTF16("username"), | 82 FormField field; |
83 string16(), | 83 field.label = ASCIIToUTF16("username"); |
84 ASCIIToUTF16("text"), | 84 field.name = ASCIIToUTF16("username"); |
85 0, | 85 field.form_control_type = ASCIIToUTF16("text"); |
86 false)); | 86 form.fields.push_back(field); |
87 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("password"), | 87 |
88 ASCIIToUTF16("password"), | 88 field.label = ASCIIToUTF16("password"); |
89 string16(), | 89 field.name = ASCIIToUTF16("password"); |
90 ASCIIToUTF16("password"), | 90 field.form_control_type = ASCIIToUTF16("password"); |
91 0, | 91 form.fields.push_back(field); |
92 false)); | 92 |
93 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("state"), | 93 field.label = ASCIIToUTF16("state"); |
94 ASCIIToUTF16("state"), | 94 field.name = ASCIIToUTF16("state"); |
95 string16(), | 95 field.form_control_type = ASCIIToUTF16("select-one"); |
96 ASCIIToUTF16("select-one"), | 96 form.fields.push_back(field); |
97 0, | 97 |
98 false)); | 98 field.label = string16(); |
99 form.fields.push_back(webkit_glue::FormField(string16(), | 99 field.name = ASCIIToUTF16("Submit"); |
100 ASCIIToUTF16("Submit"), | 100 field.form_control_type = ASCIIToUTF16("submit"); |
101 string16(), | 101 form.fields.push_back(field); |
102 ASCIIToUTF16("submit"), | 102 |
103 0, | |
104 false)); | |
105 FormStructure form_structure(form); | 103 FormStructure form_structure(form); |
106 form_structure.DetermineHeuristicTypes(); | 104 form_structure.DetermineHeuristicTypes(); |
107 | 105 |
108 // Only text and select fields that are heuristically matched are counted. | 106 // Only text and select fields that are heuristically matched are counted. |
109 EXPECT_EQ(1U, form_structure.autofill_count()); | 107 EXPECT_EQ(1U, form_structure.autofill_count()); |
110 } | 108 } |
111 | 109 |
112 TEST(FormStructureTest, SourceURL) { | 110 TEST(FormStructureTest, SourceURL) { |
113 FormData form; | 111 FormData form; |
114 form.origin = GURL("http://www.foo.com/"); | 112 form.origin = GURL("http://www.foo.com/"); |
115 form.method = ASCIIToUTF16("post"); | 113 form.method = ASCIIToUTF16("post"); |
116 FormStructure form_structure(form); | 114 FormStructure form_structure(form); |
117 | 115 |
118 EXPECT_EQ(form.origin, form_structure.source_url()); | 116 EXPECT_EQ(form.origin, form_structure.source_url()); |
119 } | 117 } |
120 | 118 |
121 TEST(FormStructureTest, IsAutofillable) { | 119 TEST(FormStructureTest, IsAutofillable) { |
122 scoped_ptr<FormStructure> form_structure; | 120 scoped_ptr<FormStructure> form_structure; |
123 FormData form; | 121 FormData form; |
124 | 122 |
125 // We need at least three text fields to be auto-fillable. | 123 // We need at least three text fields to be auto-fillable. |
126 form.method = ASCIIToUTF16("post"); | 124 form.method = ASCIIToUTF16("post"); |
127 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("username"), | 125 |
128 ASCIIToUTF16("username"), | 126 FormField field; |
129 string16(), | 127 field.label = ASCIIToUTF16("username"); |
130 ASCIIToUTF16("text"), | 128 field.name = ASCIIToUTF16("username"); |
131 0, | 129 field.form_control_type = ASCIIToUTF16("text"); |
132 false)); | 130 form.fields.push_back(field); |
133 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("password"), | 131 |
134 ASCIIToUTF16("password"), | 132 field.label = ASCIIToUTF16("password"); |
135 string16(), | 133 field.name = ASCIIToUTF16("password"); |
136 ASCIIToUTF16("password"), | 134 field.form_control_type = ASCIIToUTF16("password"); |
137 0, | 135 form.fields.push_back(field); |
138 false)); | 136 |
139 form.fields.push_back(webkit_glue::FormField(string16(), | 137 field.label = string16(); |
140 ASCIIToUTF16("Submit"), | 138 field.name = ASCIIToUTF16("Submit"); |
141 string16(), | 139 field.form_control_type = ASCIIToUTF16("submit"); |
142 ASCIIToUTF16("submit"), | 140 form.fields.push_back(field); |
143 0, | 141 |
144 false)); | |
145 form_structure.reset(new FormStructure(form)); | 142 form_structure.reset(new FormStructure(form)); |
146 form_structure->DetermineHeuristicTypes(); | 143 form_structure->DetermineHeuristicTypes(); |
147 EXPECT_FALSE(form_structure->IsAutofillable(true)); | 144 EXPECT_FALSE(form_structure->IsAutofillable(true)); |
148 | 145 |
149 // We now have three text fields, but only two auto-fillable fields. | 146 // We now have three text fields, but only two auto-fillable fields. |
150 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("First Name"), | 147 field.label = ASCIIToUTF16("First Name"); |
151 ASCIIToUTF16("firstname"), | 148 field.name = ASCIIToUTF16("firstname"); |
152 string16(), | 149 field.form_control_type = ASCIIToUTF16("text"); |
153 ASCIIToUTF16("text"), | 150 form.fields.push_back(field); |
154 0, | 151 |
155 false)); | 152 field.label = ASCIIToUTF16("Last Name"); |
156 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Last Name"), | 153 field.name = ASCIIToUTF16("lastname"); |
157 ASCIIToUTF16("lastname"), | 154 field.form_control_type = ASCIIToUTF16("text"); |
158 string16(), | 155 form.fields.push_back(field); |
159 ASCIIToUTF16("text"), | 156 |
160 0, | |
161 false)); | |
162 form_structure.reset(new FormStructure(form)); | 157 form_structure.reset(new FormStructure(form)); |
163 form_structure->DetermineHeuristicTypes(); | 158 form_structure->DetermineHeuristicTypes(); |
164 EXPECT_FALSE(form_structure->IsAutofillable(true)); | 159 EXPECT_FALSE(form_structure->IsAutofillable(true)); |
165 | 160 |
166 // We now have three auto-fillable fields. | 161 // We now have three auto-fillable fields. |
167 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Email"), | 162 field.label = ASCIIToUTF16("Email"); |
168 ASCIIToUTF16("email"), | 163 field.name = ASCIIToUTF16("email"); |
169 string16(), | 164 field.form_control_type = ASCIIToUTF16("email"); |
170 ASCIIToUTF16("text"), | 165 form.fields.push_back(field); |
171 0, | 166 |
172 false)); | |
173 form_structure.reset(new FormStructure(form)); | 167 form_structure.reset(new FormStructure(form)); |
174 form_structure->DetermineHeuristicTypes(); | 168 form_structure->DetermineHeuristicTypes(); |
175 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 169 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
176 | 170 |
177 // The method must be 'post', though we can intentionally ignore this | 171 // The method must be 'post', though we can intentionally ignore this |
178 // criterion for the sake of providing a helpful warning message to the user. | 172 // criterion for the sake of providing a helpful warning message to the user. |
179 form.method = ASCIIToUTF16("get"); | 173 form.method = ASCIIToUTF16("get"); |
180 form_structure.reset(new FormStructure(form)); | 174 form_structure.reset(new FormStructure(form)); |
181 form_structure->DetermineHeuristicTypes(); | 175 form_structure->DetermineHeuristicTypes(); |
182 EXPECT_FALSE(form_structure->IsAutofillable(true)); | 176 EXPECT_FALSE(form_structure->IsAutofillable(true)); |
(...skipping 12 matching lines...) Expand all Loading... |
195 form_structure->DetermineHeuristicTypes(); | 189 form_structure->DetermineHeuristicTypes(); |
196 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 190 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
197 } | 191 } |
198 | 192 |
199 TEST(FormStructureTest, ShouldBeParsed) { | 193 TEST(FormStructureTest, ShouldBeParsed) { |
200 scoped_ptr<FormStructure> form_structure; | 194 scoped_ptr<FormStructure> form_structure; |
201 FormData form; | 195 FormData form; |
202 | 196 |
203 // We need at least three text fields to be parseable. | 197 // We need at least three text fields to be parseable. |
204 form.method = ASCIIToUTF16("post"); | 198 form.method = ASCIIToUTF16("post"); |
205 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("username"), | 199 |
206 ASCIIToUTF16("username"), | 200 FormField field; |
207 string16(), | 201 field.label = ASCIIToUTF16("username"); |
208 ASCIIToUTF16("text"), | 202 field.name = ASCIIToUTF16("username"); |
209 0, | 203 field.form_control_type = ASCIIToUTF16("text"); |
210 false)); | 204 form.fields.push_back(field); |
| 205 |
211 form_structure.reset(new FormStructure(form)); | 206 form_structure.reset(new FormStructure(form)); |
212 EXPECT_FALSE(form_structure->ShouldBeParsed(true)); | 207 EXPECT_FALSE(form_structure->ShouldBeParsed(true)); |
213 | 208 |
214 // We now have three text fields, though only two are auto-fillable. | 209 // We now have three text fields, though only two are auto-fillable. |
215 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("First Name"), | 210 field.label = ASCIIToUTF16("First Name"); |
216 ASCIIToUTF16("firstname"), | 211 field.name = ASCIIToUTF16("firstname"); |
217 string16(), | 212 field.form_control_type = ASCIIToUTF16("text"); |
218 ASCIIToUTF16("text"), | 213 form.fields.push_back(field); |
219 0, | 214 |
220 false)); | 215 field.label = ASCIIToUTF16("Last Name"); |
221 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Last Name"), | 216 field.name = ASCIIToUTF16("lastname"); |
222 ASCIIToUTF16("lastname"), | 217 field.form_control_type = ASCIIToUTF16("text"); |
223 string16(), | 218 form.fields.push_back(field); |
224 ASCIIToUTF16("text"), | 219 |
225 0, | |
226 false)); | |
227 form_structure.reset(new FormStructure(form)); | 220 form_structure.reset(new FormStructure(form)); |
228 EXPECT_TRUE(form_structure->ShouldBeParsed(true)); | 221 EXPECT_TRUE(form_structure->ShouldBeParsed(true)); |
229 | 222 |
230 // The method must be 'post', though we can intentionally ignore this | 223 // The method must be 'post', though we can intentionally ignore this |
231 // criterion for the sake of providing a helpful warning message to the user. | 224 // criterion for the sake of providing a helpful warning message to the user. |
232 form.method = ASCIIToUTF16("get"); | 225 form.method = ASCIIToUTF16("get"); |
233 form_structure.reset(new FormStructure(form)); | 226 form_structure.reset(new FormStructure(form)); |
234 EXPECT_FALSE(form_structure->IsAutofillable(true)); | 227 EXPECT_FALSE(form_structure->IsAutofillable(true)); |
235 EXPECT_TRUE(form_structure->ShouldBeParsed(false)); | 228 EXPECT_TRUE(form_structure->ShouldBeParsed(false)); |
236 | 229 |
237 // The target cannot include http(s)://*/search... | 230 // The target cannot include http(s)://*/search... |
238 form.method = ASCIIToUTF16("post"); | 231 form.method = ASCIIToUTF16("post"); |
239 form.action = GURL("http://google.com/search?q=hello"); | 232 form.action = GURL("http://google.com/search?q=hello"); |
240 form_structure.reset(new FormStructure(form)); | 233 form_structure.reset(new FormStructure(form)); |
241 EXPECT_FALSE(form_structure->ShouldBeParsed(true)); | 234 EXPECT_FALSE(form_structure->ShouldBeParsed(true)); |
242 | 235 |
243 // But search can be in the URL. | 236 // But search can be in the URL. |
244 form.action = GURL("http://search.com/?q=hello"); | 237 form.action = GURL("http://search.com/?q=hello"); |
245 form_structure.reset(new FormStructure(form)); | 238 form_structure.reset(new FormStructure(form)); |
246 EXPECT_TRUE(form_structure->ShouldBeParsed(true)); | 239 EXPECT_TRUE(form_structure->ShouldBeParsed(true)); |
247 | 240 |
248 // The form need only have three fields, but at least one must be a text | 241 // The form need only have three fields, but at least one must be a text |
249 // field. | 242 // field. |
250 form.fields.clear(); | 243 form.fields.clear(); |
251 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Email"), | 244 |
252 ASCIIToUTF16("email"), | 245 field.label = ASCIIToUTF16("Email"); |
253 string16(), | 246 field.name = ASCIIToUTF16("email"); |
254 ASCIIToUTF16("email"), | 247 field.form_control_type = ASCIIToUTF16("email"); |
255 0, | 248 form.fields.push_back(field); |
256 false)); | 249 |
257 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("State"), | 250 field.label = ASCIIToUTF16("State"); |
258 ASCIIToUTF16("state"), | 251 field.name = ASCIIToUTF16("state"); |
259 string16(), | 252 field.form_control_type = ASCIIToUTF16("select-one"); |
260 ASCIIToUTF16("select-one"), | 253 form.fields.push_back(field); |
261 0, | 254 |
262 false)); | 255 field.label = ASCIIToUTF16("Country"); |
263 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Country"), | 256 field.name = ASCIIToUTF16("country"); |
264 ASCIIToUTF16("country"), | 257 field.form_control_type = ASCIIToUTF16("select-one"); |
265 string16(), | 258 form.fields.push_back(field); |
266 ASCIIToUTF16("select-one"), | 259 |
267 0, | |
268 false)); | |
269 form_structure.reset(new FormStructure(form)); | 260 form_structure.reset(new FormStructure(form)); |
270 EXPECT_TRUE(form_structure->ShouldBeParsed(true)); | 261 EXPECT_TRUE(form_structure->ShouldBeParsed(true)); |
271 | 262 |
272 form.fields[0].form_control_type = ASCIIToUTF16("select-one"); | 263 form.fields[0].form_control_type = ASCIIToUTF16("select-one"); |
273 form_structure.reset(new FormStructure(form)); | 264 form_structure.reset(new FormStructure(form)); |
274 EXPECT_FALSE(form_structure->ShouldBeParsed(true)); | 265 EXPECT_FALSE(form_structure->ShouldBeParsed(true)); |
275 } | 266 } |
276 | 267 |
277 TEST(FormStructureTest, HeuristicsContactInfo) { | 268 TEST(FormStructureTest, HeuristicsContactInfo) { |
278 scoped_ptr<FormStructure> form_structure; | 269 scoped_ptr<FormStructure> form_structure; |
279 FormData form; | 270 FormData form; |
| 271 form.method = ASCIIToUTF16("post"); |
280 | 272 |
281 form.method = ASCIIToUTF16("post"); | 273 FormField field; |
282 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("First Name"), | 274 field.form_control_type = ASCIIToUTF16("text"); |
283 ASCIIToUTF16("firstname"), | 275 |
284 string16(), | 276 field.label = ASCIIToUTF16("First Name"); |
285 ASCIIToUTF16("text"), | 277 field.name = ASCIIToUTF16("firstname"); |
286 0, | 278 form.fields.push_back(field); |
287 false)); | 279 |
288 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Last Name"), | 280 field.label = ASCIIToUTF16("Last Name"); |
289 ASCIIToUTF16("lastname"), | 281 field.name = ASCIIToUTF16("lastname"); |
290 string16(), | 282 form.fields.push_back(field); |
291 ASCIIToUTF16("text"), | 283 |
292 0, | 284 field.label = ASCIIToUTF16("Email"); |
293 false)); | 285 field.name = ASCIIToUTF16("email"); |
294 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("EMail"), | 286 form.fields.push_back(field); |
295 ASCIIToUTF16("email"), | 287 |
296 string16(), | 288 field.label = ASCIIToUTF16("Phone"); |
297 ASCIIToUTF16("text"), | 289 field.name = ASCIIToUTF16("phone"); |
298 0, | 290 form.fields.push_back(field); |
299 false)); | 291 |
300 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Phone"), | 292 field.label = ASCIIToUTF16("Fax"); |
301 ASCIIToUTF16("phone"), | 293 field.name = ASCIIToUTF16("fax"); |
302 string16(), | 294 form.fields.push_back(field); |
303 ASCIIToUTF16("text"), | 295 |
304 0, | 296 field.label = ASCIIToUTF16("Address"); |
305 false)); | 297 field.name = ASCIIToUTF16("address"); |
306 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Fax"), | 298 form.fields.push_back(field); |
307 ASCIIToUTF16("fax"), | 299 |
308 string16(), | 300 field.label = ASCIIToUTF16("City"); |
309 ASCIIToUTF16("text"), | 301 field.name = ASCIIToUTF16("city"); |
310 0, | 302 form.fields.push_back(field); |
311 false)); | 303 |
312 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Address"), | 304 field.label = ASCIIToUTF16("Zip code"); |
313 ASCIIToUTF16("address"), | 305 field.name = ASCIIToUTF16("zipcode"); |
314 string16(), | 306 form.fields.push_back(field); |
315 ASCIIToUTF16("text"), | 307 |
316 0, | 308 field.label = string16(); |
317 false)); | 309 field.name = ASCIIToUTF16("Submit"); |
318 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("City"), | 310 field.form_control_type = ASCIIToUTF16("submit"); |
319 ASCIIToUTF16("city"), | 311 form.fields.push_back(field); |
320 string16(), | 312 |
321 ASCIIToUTF16("text"), | |
322 0, | |
323 false)); | |
324 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Zip code"), | |
325 ASCIIToUTF16("zipcode"), | |
326 string16(), | |
327 ASCIIToUTF16("text"), | |
328 0, | |
329 false)); | |
330 form.fields.push_back(webkit_glue::FormField(string16(), | |
331 ASCIIToUTF16("Submit"), | |
332 string16(), | |
333 ASCIIToUTF16("submit"), | |
334 0, | |
335 false)); | |
336 form_structure.reset(new FormStructure(form)); | 313 form_structure.reset(new FormStructure(form)); |
337 form_structure->DetermineHeuristicTypes(); | 314 form_structure->DetermineHeuristicTypes(); |
338 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 315 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
339 | 316 |
340 // Expect the correct number of fields. | 317 // Expect the correct number of fields. |
341 ASSERT_EQ(9U, form_structure->field_count()); | 318 ASSERT_EQ(9U, form_structure->field_count()); |
342 ASSERT_EQ(8U, form_structure->autofill_count()); | 319 ASSERT_EQ(8U, form_structure->autofill_count()); |
343 | 320 |
344 // First name. | 321 // First name. |
345 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); | 322 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); |
(...skipping 12 matching lines...) Expand all Loading... |
358 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(6)->heuristic_type()); | 335 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(6)->heuristic_type()); |
359 // Zip. | 336 // Zip. |
360 EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(7)->heuristic_type()); | 337 EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(7)->heuristic_type()); |
361 // Submit. | 338 // Submit. |
362 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(8)->heuristic_type()); | 339 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(8)->heuristic_type()); |
363 } | 340 } |
364 | 341 |
365 TEST(FormStructureTest, HeuristicsSample8) { | 342 TEST(FormStructureTest, HeuristicsSample8) { |
366 scoped_ptr<FormStructure> form_structure; | 343 scoped_ptr<FormStructure> form_structure; |
367 FormData form; | 344 FormData form; |
| 345 form.method = ASCIIToUTF16("post"); |
368 | 346 |
369 form.method = ASCIIToUTF16("post"); | 347 FormField field; |
370 form.fields.push_back( | 348 field.form_control_type = ASCIIToUTF16("text"); |
371 webkit_glue::FormField(ASCIIToUTF16("Your First Name:"), | 349 |
372 ASCIIToUTF16("bill.first"), | 350 field.label = ASCIIToUTF16("Your First Name:"); |
373 string16(), | 351 field.name = ASCIIToUTF16("bill.first"); |
374 ASCIIToUTF16("text"), | 352 form.fields.push_back(field); |
375 0, | 353 |
376 false)); | 354 field.label = ASCIIToUTF16("Your Last Name:"); |
377 form.fields.push_back( | 355 field.name = ASCIIToUTF16("bill.last"); |
378 webkit_glue::FormField(ASCIIToUTF16("Your Last Name:"), | 356 form.fields.push_back(field); |
379 ASCIIToUTF16("bill.last"), | 357 |
380 string16(), | 358 field.label = ASCIIToUTF16("Street Address Line 1:"); |
381 ASCIIToUTF16("text"), | 359 field.name = ASCIIToUTF16("bill.street1"); |
382 0, | 360 form.fields.push_back(field); |
383 false)); | 361 |
384 form.fields.push_back( | 362 field.label = ASCIIToUTF16("Street Address Line 2:"); |
385 webkit_glue::FormField(ASCIIToUTF16("Street Address Line 1:"), | 363 field.name = ASCIIToUTF16("bill.street2"); |
386 ASCIIToUTF16("bill.street1"), | 364 form.fields.push_back(field); |
387 string16(), | 365 |
388 ASCIIToUTF16("text"), | 366 field.label = ASCIIToUTF16("City"); |
389 0, | 367 field.name = ASCIIToUTF16("bill.city"); |
390 false)); | 368 form.fields.push_back(field); |
391 form.fields.push_back( | 369 |
392 webkit_glue::FormField(ASCIIToUTF16("Street Address Line 2:"), | 370 field.label = ASCIIToUTF16("State (U.S.):"); |
393 ASCIIToUTF16("bill.street2"), | 371 field.name = ASCIIToUTF16("bill.state"); |
394 string16(), | 372 form.fields.push_back(field); |
395 ASCIIToUTF16("text"), | 373 |
396 0, | 374 field.label = ASCIIToUTF16("Zip/Postal Code:"); |
397 false)); | 375 field.name = ASCIIToUTF16("BillTo.PostalCode"); |
398 form.fields.push_back( | 376 form.fields.push_back(field); |
399 webkit_glue::FormField(ASCIIToUTF16("City:"), | 377 |
400 ASCIIToUTF16("bill.city"), | 378 field.label = ASCIIToUTF16("Country:"); |
401 string16(), | 379 field.name = ASCIIToUTF16("bill.country"); |
402 ASCIIToUTF16("text"), | 380 form.fields.push_back(field); |
403 0, | 381 |
404 false)); | 382 field.label = ASCIIToUTF16("Phone Number:"); |
405 form.fields.push_back( | 383 field.name = ASCIIToUTF16("BillTo.Phone"); |
406 webkit_glue::FormField(ASCIIToUTF16("State (U.S.):"), | 384 form.fields.push_back(field); |
407 ASCIIToUTF16("bill.state"), | 385 |
408 string16(), | 386 field.label = string16(); |
409 ASCIIToUTF16("text"), | 387 field.name = ASCIIToUTF16("Submit"); |
410 0, | 388 field.form_control_type = ASCIIToUTF16("submit"); |
411 false)); | 389 form.fields.push_back(field); |
412 form.fields.push_back( | 390 |
413 webkit_glue::FormField(ASCIIToUTF16("Zip/Postal Code:"), | |
414 ASCIIToUTF16("BillTo.PostalCode"), | |
415 string16(), | |
416 ASCIIToUTF16("text"), | |
417 0, | |
418 false)); | |
419 form.fields.push_back( | |
420 webkit_glue::FormField(ASCIIToUTF16("Country:"), | |
421 ASCIIToUTF16("bill.country"), | |
422 string16(), | |
423 ASCIIToUTF16("text"), | |
424 0, | |
425 false)); | |
426 form.fields.push_back( | |
427 webkit_glue::FormField(ASCIIToUTF16("Phone Number:"), | |
428 ASCIIToUTF16("BillTo.Phone"), | |
429 string16(), | |
430 ASCIIToUTF16("text"), | |
431 0, | |
432 false)); | |
433 form.fields.push_back( | |
434 webkit_glue::FormField(string16(), | |
435 ASCIIToUTF16("Submit"), | |
436 string16(), | |
437 ASCIIToUTF16("submit"), | |
438 0, | |
439 false)); | |
440 form_structure.reset(new FormStructure(form)); | 391 form_structure.reset(new FormStructure(form)); |
441 form_structure->DetermineHeuristicTypes(); | 392 form_structure->DetermineHeuristicTypes(); |
442 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 393 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
443 ASSERT_EQ(10U, form_structure->field_count()); | 394 ASSERT_EQ(10U, form_structure->field_count()); |
444 ASSERT_EQ(9U, form_structure->autofill_count()); | 395 ASSERT_EQ(9U, form_structure->autofill_count()); |
445 | 396 |
446 // First name. | 397 // First name. |
447 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); | 398 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); |
448 // Last name. | 399 // Last name. |
449 EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type()); | 400 EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type()); |
(...skipping 13 matching lines...) Expand all Loading... |
463 // Phone. | 414 // Phone. |
464 EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, | 415 EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, |
465 form_structure->field(8)->heuristic_type()); | 416 form_structure->field(8)->heuristic_type()); |
466 // Submit. | 417 // Submit. |
467 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(9)->heuristic_type()); | 418 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(9)->heuristic_type()); |
468 } | 419 } |
469 | 420 |
470 TEST(FormStructureTest, HeuristicsSample6) { | 421 TEST(FormStructureTest, HeuristicsSample6) { |
471 scoped_ptr<FormStructure> form_structure; | 422 scoped_ptr<FormStructure> form_structure; |
472 FormData form; | 423 FormData form; |
| 424 form.method = ASCIIToUTF16("post"); |
473 | 425 |
474 form.method = ASCIIToUTF16("post"); | 426 FormField field; |
475 form.fields.push_back( | 427 field.form_control_type = ASCIIToUTF16("text"); |
476 webkit_glue::FormField(ASCIIToUTF16("E-mail address"), | 428 |
477 ASCIIToUTF16("email"), | 429 field.label = ASCIIToUTF16("E-mail address"); |
478 string16(), | 430 field.name = ASCIIToUTF16("email"); |
479 ASCIIToUTF16("text"), | 431 form.fields.push_back(field); |
480 0, | 432 |
481 false)); | 433 field.label = ASCIIToUTF16("Full name"); |
482 form.fields.push_back( | 434 field.name = ASCIIToUTF16("name"); |
483 webkit_glue::FormField(ASCIIToUTF16("Full name"), | 435 form.fields.push_back(field); |
484 ASCIIToUTF16("name"), | 436 |
485 string16(), | 437 field.label = ASCIIToUTF16("Company"); |
486 ASCIIToUTF16("text"), | 438 field.name = ASCIIToUTF16("company"); |
487 0, | 439 form.fields.push_back(field); |
488 false)); | 440 |
489 form.fields.push_back( | 441 field.label = ASCIIToUTF16("Address"); |
490 webkit_glue::FormField(ASCIIToUTF16("Company"), | 442 field.name = ASCIIToUTF16("address"); |
491 ASCIIToUTF16("company"), | 443 form.fields.push_back(field); |
492 string16(), | 444 |
493 ASCIIToUTF16("text"), | 445 field.label = ASCIIToUTF16("City"); |
494 0, | 446 field.name = ASCIIToUTF16("city"); |
495 false)); | 447 form.fields.push_back(field); |
496 form.fields.push_back( | 448 |
497 webkit_glue::FormField(ASCIIToUTF16("Address"), | 449 field.label = ASCIIToUTF16("Zip Code"); |
498 ASCIIToUTF16("address"), | 450 field.name = ASCIIToUTF16("Home.PostalCode"); |
499 string16(), | 451 form.fields.push_back(field); |
500 ASCIIToUTF16("text"), | 452 |
501 0, | 453 field.label = string16(); |
502 false)); | 454 field.name = ASCIIToUTF16("Submit"); |
503 form.fields.push_back( | 455 field.value = ASCIIToUTF16("continue"); |
504 webkit_glue::FormField(ASCIIToUTF16("City"), | 456 field.form_control_type = ASCIIToUTF16("submit"); |
505 ASCIIToUTF16("city"), | 457 form.fields.push_back(field); |
506 string16(), | 458 |
507 ASCIIToUTF16("text"), | |
508 0, | |
509 false)); | |
510 // TODO(jhawkins): Add state select control. | |
511 form.fields.push_back( | |
512 webkit_glue::FormField(ASCIIToUTF16("Zip Code"), | |
513 ASCIIToUTF16("Home.PostalCode"), | |
514 string16(), | |
515 ASCIIToUTF16("text"), | |
516 0, | |
517 false)); | |
518 // TODO(jhawkins): Phone number. | |
519 form.fields.push_back( | |
520 webkit_glue::FormField(string16(), | |
521 ASCIIToUTF16("Submit"), | |
522 ASCIIToUTF16("continue"), | |
523 ASCIIToUTF16("submit"), | |
524 0, | |
525 false)); | |
526 form_structure.reset(new FormStructure(form)); | 459 form_structure.reset(new FormStructure(form)); |
527 form_structure->DetermineHeuristicTypes(); | 460 form_structure->DetermineHeuristicTypes(); |
528 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 461 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
529 ASSERT_EQ(7U, form_structure->field_count()); | 462 ASSERT_EQ(7U, form_structure->field_count()); |
530 ASSERT_EQ(6U, form_structure->autofill_count()); | 463 ASSERT_EQ(6U, form_structure->autofill_count()); |
531 | 464 |
532 // Email. | 465 // Email. |
533 EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(0)->heuristic_type()); | 466 EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(0)->heuristic_type()); |
534 // Full name. | 467 // Full name. |
535 EXPECT_EQ(NAME_FULL, form_structure->field(1)->heuristic_type()); | 468 EXPECT_EQ(NAME_FULL, form_structure->field(1)->heuristic_type()); |
536 // Company | 469 // Company |
537 EXPECT_EQ(COMPANY_NAME, form_structure->field(2)->heuristic_type()); | 470 EXPECT_EQ(COMPANY_NAME, form_structure->field(2)->heuristic_type()); |
538 // Address. | 471 // Address. |
539 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(3)->heuristic_type()); | 472 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(3)->heuristic_type()); |
540 // City. | 473 // City. |
541 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(4)->heuristic_type()); | 474 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(4)->heuristic_type()); |
542 // Zip. | 475 // Zip. |
543 EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(5)->heuristic_type()); | 476 EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(5)->heuristic_type()); |
544 // Submit. | 477 // Submit. |
545 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(6)->heuristic_type()); | 478 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(6)->heuristic_type()); |
546 } | 479 } |
547 | 480 |
548 // Tests a sequence of FormFields where only labels are supplied to heuristics | 481 // Tests a sequence of FormFields where only labels are supplied to heuristics |
549 // for matching. This works because FormField labels are matched in the case | 482 // for matching. This works because FormField labels are matched in the case |
550 // that input element ids (or |name| fields) are missing. | 483 // that input element ids (or |name| fields) are missing. |
551 TEST(FormStructureTest, HeuristicsLabelsOnly) { | 484 TEST(FormStructureTest, HeuristicsLabelsOnly) { |
552 scoped_ptr<FormStructure> form_structure; | 485 scoped_ptr<FormStructure> form_structure; |
553 FormData form; | 486 FormData form; |
| 487 form.method = ASCIIToUTF16("post"); |
554 | 488 |
555 form.method = ASCIIToUTF16("post"); | 489 FormField field; |
556 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("First Name"), | 490 field.form_control_type = ASCIIToUTF16("text"); |
557 string16(), | 491 |
558 string16(), | 492 field.label = ASCIIToUTF16("First Name"); |
559 ASCIIToUTF16("text"), | 493 field.name = string16(); |
560 0, | 494 form.fields.push_back(field); |
561 false)); | 495 |
562 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Last Name"), | 496 field.label = ASCIIToUTF16("Last Name"); |
563 string16(), | 497 field.name = string16(); |
564 string16(), | 498 form.fields.push_back(field); |
565 ASCIIToUTF16("text"), | 499 |
566 0, | 500 field.label = ASCIIToUTF16("Email"); |
567 false)); | 501 field.name = string16(); |
568 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("EMail"), | 502 form.fields.push_back(field); |
569 string16(), | 503 |
570 string16(), | 504 field.label = ASCIIToUTF16("Phone"); |
571 ASCIIToUTF16("text"), | 505 field.name = string16(); |
572 0, | 506 form.fields.push_back(field); |
573 false)); | 507 |
574 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Phone"), | 508 field.label = ASCIIToUTF16("Fax"); |
575 string16(), | 509 field.name = string16(); |
576 string16(), | 510 form.fields.push_back(field); |
577 ASCIIToUTF16("text"), | 511 |
578 0, | 512 field.label = ASCIIToUTF16("Address"); |
579 false)); | 513 field.name = string16(); |
580 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Fax"), | 514 form.fields.push_back(field); |
581 string16(), | 515 |
582 string16(), | 516 field.label = ASCIIToUTF16("Address"); |
583 ASCIIToUTF16("text"), | 517 field.name = string16(); |
584 0, | 518 form.fields.push_back(field); |
585 false)); | 519 |
586 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Address"), | 520 field.label = ASCIIToUTF16("Zip code"); |
587 string16(), | 521 field.name = string16(); |
588 string16(), | 522 form.fields.push_back(field); |
589 ASCIIToUTF16("text"), | 523 |
590 0, | 524 field.label = string16(); |
591 false)); | 525 field.name = ASCIIToUTF16("Submit"); |
592 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Address"), | 526 field.form_control_type = ASCIIToUTF16("submit"); |
593 string16(), | 527 form.fields.push_back(field); |
594 string16(), | 528 |
595 ASCIIToUTF16("text"), | |
596 0, | |
597 false)); | |
598 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Zip code"), | |
599 string16(), | |
600 string16(), | |
601 ASCIIToUTF16("text"), | |
602 0, | |
603 false)); | |
604 form.fields.push_back(webkit_glue::FormField(string16(), | |
605 ASCIIToUTF16("Submit"), | |
606 string16(), | |
607 ASCIIToUTF16("submit"), | |
608 0, | |
609 false)); | |
610 form_structure.reset(new FormStructure(form)); | 529 form_structure.reset(new FormStructure(form)); |
611 form_structure->DetermineHeuristicTypes(); | 530 form_structure->DetermineHeuristicTypes(); |
612 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 531 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
613 ASSERT_EQ(9U, form_structure->field_count()); | 532 ASSERT_EQ(9U, form_structure->field_count()); |
614 ASSERT_EQ(8U, form_structure->autofill_count()); | 533 ASSERT_EQ(8U, form_structure->autofill_count()); |
615 | 534 |
616 // First name. | 535 // First name. |
617 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); | 536 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); |
618 // Last name. | 537 // Last name. |
619 EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type()); | 538 EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type()); |
(...skipping 10 matching lines...) Expand all Loading... |
630 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(6)->heuristic_type()); | 549 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(6)->heuristic_type()); |
631 // Zip. | 550 // Zip. |
632 EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(7)->heuristic_type()); | 551 EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(7)->heuristic_type()); |
633 // Submit. | 552 // Submit. |
634 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(8)->heuristic_type()); | 553 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(8)->heuristic_type()); |
635 } | 554 } |
636 | 555 |
637 TEST(FormStructureTest, HeuristicsCreditCardInfo) { | 556 TEST(FormStructureTest, HeuristicsCreditCardInfo) { |
638 scoped_ptr<FormStructure> form_structure; | 557 scoped_ptr<FormStructure> form_structure; |
639 FormData form; | 558 FormData form; |
| 559 form.method = ASCIIToUTF16("post"); |
640 | 560 |
641 form.method = ASCIIToUTF16("post"); | 561 FormField field; |
642 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Name on Card"), | 562 field.form_control_type = ASCIIToUTF16("text"); |
643 ASCIIToUTF16("name on card"), | 563 |
644 string16(), | 564 field.label = ASCIIToUTF16("Name on Card"); |
645 ASCIIToUTF16("text"), | 565 field.name = ASCIIToUTF16("name_on_card"); |
646 0, | 566 form.fields.push_back(field); |
647 false)); | 567 |
648 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Card Number"), | 568 field.label = ASCIIToUTF16("Card Number"); |
649 ASCIIToUTF16("card_number"), | 569 field.name = ASCIIToUTF16("card_number"); |
650 string16(), | 570 form.fields.push_back(field); |
651 ASCIIToUTF16("text"), | 571 |
652 0, | 572 field.label = ASCIIToUTF16("Exp Month"); |
653 false)); | 573 field.name = ASCIIToUTF16("ccmonth"); |
654 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Exp Month"), | 574 form.fields.push_back(field); |
655 ASCIIToUTF16("ccmonth"), | 575 |
656 string16(), | 576 field.label = ASCIIToUTF16("Exp Year"); |
657 ASCIIToUTF16("text"), | 577 field.name = ASCIIToUTF16("ccyear"); |
658 0, | 578 form.fields.push_back(field); |
659 false)); | 579 |
660 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Exp Year"), | 580 field.label = ASCIIToUTF16("Verification"); |
661 ASCIIToUTF16("ccyear"), | 581 field.name = ASCIIToUTF16("verification"); |
662 string16(), | 582 form.fields.push_back(field); |
663 ASCIIToUTF16("text"), | 583 |
664 0, | 584 field.label = string16(); |
665 false)); | 585 field.name = ASCIIToUTF16("Submit"); |
666 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Verification"), | 586 field.form_control_type = ASCIIToUTF16("submit"); |
667 ASCIIToUTF16("verification"), | 587 form.fields.push_back(field); |
668 string16(), | 588 |
669 ASCIIToUTF16("text"), | |
670 0, | |
671 false)); | |
672 form.fields.push_back(webkit_glue::FormField(string16(), | |
673 ASCIIToUTF16("Submit"), | |
674 string16(), | |
675 ASCIIToUTF16("submit"), | |
676 0, | |
677 false)); | |
678 form_structure.reset(new FormStructure(form)); | 589 form_structure.reset(new FormStructure(form)); |
679 form_structure->DetermineHeuristicTypes(); | 590 form_structure->DetermineHeuristicTypes(); |
680 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 591 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
681 ASSERT_EQ(6U, form_structure->field_count()); | 592 ASSERT_EQ(6U, form_structure->field_count()); |
682 ASSERT_EQ(4U, form_structure->autofill_count()); | 593 ASSERT_EQ(4U, form_structure->autofill_count()); |
683 | 594 |
684 // Credit card name. | 595 // Credit card name. |
685 EXPECT_EQ(CREDIT_CARD_NAME, form_structure->field(0)->heuristic_type()); | 596 EXPECT_EQ(CREDIT_CARD_NAME, form_structure->field(0)->heuristic_type()); |
686 // Credit card number. | 597 // Credit card number. |
687 EXPECT_EQ(CREDIT_CARD_NUMBER, form_structure->field(1)->heuristic_type()); | 598 EXPECT_EQ(CREDIT_CARD_NUMBER, form_structure->field(1)->heuristic_type()); |
688 // Credit card expiration month. | 599 // Credit card expiration month. |
689 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, form_structure->field(2)->heuristic_type()); | 600 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, form_structure->field(2)->heuristic_type()); |
690 // Credit card expiration year. | 601 // Credit card expiration year. |
691 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, | 602 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, |
692 form_structure->field(3)->heuristic_type()); | 603 form_structure->field(3)->heuristic_type()); |
693 // We don't determine CVV. | 604 // We don't determine CVV. |
694 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(4)->heuristic_type()); | 605 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(4)->heuristic_type()); |
695 // Submit. | 606 // Submit. |
696 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(5)->heuristic_type()); | 607 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(5)->heuristic_type()); |
697 } | 608 } |
698 | 609 |
699 TEST(FormStructureTest, HeuristicsCreditCardInfoWithUnknownCardField) { | 610 TEST(FormStructureTest, HeuristicsCreditCardInfoWithUnknownCardField) { |
700 scoped_ptr<FormStructure> form_structure; | 611 scoped_ptr<FormStructure> form_structure; |
701 FormData form; | 612 FormData form; |
| 613 form.method = ASCIIToUTF16("post"); |
702 | 614 |
703 form.method = ASCIIToUTF16("post"); | 615 FormField field; |
704 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Name on Card"), | 616 field.form_control_type = ASCIIToUTF16("text"); |
705 ASCIIToUTF16("name on card"), | 617 |
706 string16(), | 618 field.label = ASCIIToUTF16("Name on Card"); |
707 ASCIIToUTF16("text"), | 619 field.name = ASCIIToUTF16("name_on_card"); |
708 0, | 620 form.fields.push_back(field); |
709 false)); | 621 |
710 // This is not a field we know how to process. But we should skip over it | 622 // This is not a field we know how to process. But we should skip over it |
711 // and process the other fields in the card block. | 623 // and process the other fields in the card block. |
712 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Card Type"), | 624 field.label = ASCIIToUTF16("Card Type"); |
713 ASCIIToUTF16("card_type"), | 625 field.name = ASCIIToUTF16("card_type"); |
714 string16(), | 626 form.fields.push_back(field); |
715 ASCIIToUTF16("text"), | 627 |
716 0, | 628 field.label = ASCIIToUTF16("Card Number"); |
717 false)); | 629 field.name = ASCIIToUTF16("card_number"); |
718 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Card Number"), | 630 form.fields.push_back(field); |
719 ASCIIToUTF16("card_number"), | 631 |
720 string16(), | 632 field.label = ASCIIToUTF16("Exp Month"); |
721 ASCIIToUTF16("text"), | 633 field.name = ASCIIToUTF16("ccmonth"); |
722 0, | 634 form.fields.push_back(field); |
723 false)); | 635 |
724 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Exp Month"), | 636 field.label = ASCIIToUTF16("Exp Year"); |
725 ASCIIToUTF16("ccmonth"), | 637 field.name = ASCIIToUTF16("ccyear"); |
726 string16(), | 638 form.fields.push_back(field); |
727 ASCIIToUTF16("text"), | 639 |
728 0, | 640 field.label = ASCIIToUTF16("Verification"); |
729 false)); | 641 field.name = ASCIIToUTF16("verification"); |
730 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Exp Year"), | 642 form.fields.push_back(field); |
731 ASCIIToUTF16("ccyear"), | 643 |
732 string16(), | 644 field.label = string16(); |
733 ASCIIToUTF16("text"), | 645 field.name = ASCIIToUTF16("Submit"); |
734 0, | 646 field.form_control_type = ASCIIToUTF16("submit"); |
735 false)); | 647 form.fields.push_back(field); |
736 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Verification"), | 648 |
737 ASCIIToUTF16("verification"), | |
738 string16(), | |
739 ASCIIToUTF16("text"), | |
740 0, | |
741 false)); | |
742 form.fields.push_back(webkit_glue::FormField(string16(), | |
743 ASCIIToUTF16("Submit"), | |
744 string16(), | |
745 ASCIIToUTF16("submit"), | |
746 0, | |
747 false)); | |
748 form_structure.reset(new FormStructure(form)); | 649 form_structure.reset(new FormStructure(form)); |
749 form_structure->DetermineHeuristicTypes(); | 650 form_structure->DetermineHeuristicTypes(); |
750 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 651 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
751 ASSERT_EQ(7U, form_structure->field_count()); | 652 ASSERT_EQ(7U, form_structure->field_count()); |
752 ASSERT_EQ(4U, form_structure->autofill_count()); | 653 ASSERT_EQ(4U, form_structure->autofill_count()); |
753 | 654 |
754 // Credit card name. | 655 // Credit card name. |
755 EXPECT_EQ(CREDIT_CARD_NAME, form_structure->field(0)->heuristic_type()); | 656 EXPECT_EQ(CREDIT_CARD_NAME, form_structure->field(0)->heuristic_type()); |
756 // Credit card type. This is an unknown type but related to the credit card. | 657 // Credit card type. This is an unknown type but related to the credit card. |
757 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(1)->heuristic_type()); | 658 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(1)->heuristic_type()); |
758 // Credit card number. | 659 // Credit card number. |
759 EXPECT_EQ(CREDIT_CARD_NUMBER, form_structure->field(2)->heuristic_type()); | 660 EXPECT_EQ(CREDIT_CARD_NUMBER, form_structure->field(2)->heuristic_type()); |
760 // Credit card expiration month. | 661 // Credit card expiration month. |
761 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, form_structure->field(3)->heuristic_type()); | 662 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, form_structure->field(3)->heuristic_type()); |
762 // Credit card expiration year. | 663 // Credit card expiration year. |
763 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, | 664 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, |
764 form_structure->field(4)->heuristic_type()); | 665 form_structure->field(4)->heuristic_type()); |
765 // We don't determine CVV. | 666 // We don't determine CVV. |
766 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(5)->heuristic_type()); | 667 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(5)->heuristic_type()); |
767 // Submit. | 668 // Submit. |
768 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(6)->heuristic_type()); | 669 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(6)->heuristic_type()); |
769 } | 670 } |
770 | 671 |
771 TEST(FormStructureTest, ThreeAddressLines) { | 672 TEST(FormStructureTest, ThreeAddressLines) { |
772 scoped_ptr<FormStructure> form_structure; | 673 scoped_ptr<FormStructure> form_structure; |
773 FormData form; | 674 FormData form; |
| 675 form.method = ASCIIToUTF16("post"); |
774 | 676 |
775 form.method = ASCIIToUTF16("post"); | 677 FormField field; |
776 form.fields.push_back( | 678 field.form_control_type = ASCIIToUTF16("text"); |
777 webkit_glue::FormField(ASCIIToUTF16("Address Line1"), | 679 |
778 ASCIIToUTF16("Address"), | 680 field.label = ASCIIToUTF16("Address Line1"); |
779 string16(), | 681 field.name = ASCIIToUTF16("Address"); |
780 ASCIIToUTF16("text"), | 682 form.fields.push_back(field); |
781 0, | 683 |
782 false)); | 684 field.label = ASCIIToUTF16("Address Line2"); |
783 form.fields.push_back( | 685 field.name = ASCIIToUTF16("Address"); |
784 webkit_glue::FormField(ASCIIToUTF16("Address Line2"), | 686 form.fields.push_back(field); |
785 ASCIIToUTF16("Address"), | 687 |
786 string16(), | 688 field.label = ASCIIToUTF16("Address Line3"); |
787 ASCIIToUTF16("text"), | 689 field.name = ASCIIToUTF16("Address"); |
788 0, | 690 form.fields.push_back(field); |
789 false)); | 691 |
790 form.fields.push_back( | 692 field.label = ASCIIToUTF16("City"); |
791 webkit_glue::FormField(ASCIIToUTF16("Address Line3"), | 693 field.name = ASCIIToUTF16("city"); |
792 ASCIIToUTF16("Address"), | 694 form.fields.push_back(field); |
793 string16(), | 695 |
794 ASCIIToUTF16("text"), | |
795 0, | |
796 false)); | |
797 form.fields.push_back( | |
798 webkit_glue::FormField(ASCIIToUTF16("City"), | |
799 ASCIIToUTF16("city"), | |
800 string16(), | |
801 ASCIIToUTF16("text"), | |
802 0, | |
803 false)); | |
804 form_structure.reset(new FormStructure(form)); | 696 form_structure.reset(new FormStructure(form)); |
805 form_structure->DetermineHeuristicTypes(); | 697 form_structure->DetermineHeuristicTypes(); |
806 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 698 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
807 ASSERT_EQ(4U, form_structure->field_count()); | 699 ASSERT_EQ(4U, form_structure->field_count()); |
808 ASSERT_EQ(3U, form_structure->autofill_count()); | 700 ASSERT_EQ(3U, form_structure->autofill_count()); |
809 | 701 |
810 // Address Line 1. | 702 // Address Line 1. |
811 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(0)->heuristic_type()); | 703 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(0)->heuristic_type()); |
812 // Address Line 2. | 704 // Address Line 2. |
813 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(1)->heuristic_type()); | 705 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(1)->heuristic_type()); |
814 // Address Line 3. | 706 // Address Line 3. |
815 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(2)->heuristic_type()); | 707 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(2)->heuristic_type()); |
816 // City. | 708 // City. |
817 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(3)->heuristic_type()); | 709 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(3)->heuristic_type()); |
818 } | 710 } |
819 | 711 |
820 // This test verifies that "addressLine1" and "addressLine2" matches heuristics. | 712 // This test verifies that "addressLine1" and "addressLine2" matches heuristics. |
821 // This occured in https://www.gorillaclothing.com/. http://crbug.com/52126. | 713 // This occured in https://www.gorillaclothing.com/. http://crbug.com/52126. |
822 TEST(FormStructureTest, BillingAndShippingAddresses) { | 714 TEST(FormStructureTest, BillingAndShippingAddresses) { |
823 scoped_ptr<FormStructure> form_structure; | 715 scoped_ptr<FormStructure> form_structure; |
824 FormData form; | 716 FormData form; |
| 717 form.method = ASCIIToUTF16("post"); |
825 | 718 |
826 form.method = ASCIIToUTF16("post"); | 719 FormField field; |
827 form.fields.push_back( | 720 field.form_control_type = ASCIIToUTF16("text"); |
828 webkit_glue::FormField(ASCIIToUTF16("Address Line1"), | 721 |
829 ASCIIToUTF16("shipping.address.addressLine1"), | 722 field.label = ASCIIToUTF16("Address Line1"); |
830 string16(), | 723 field.name = ASCIIToUTF16("shipping.address.addressLine1"); |
831 ASCIIToUTF16("text"), | 724 form.fields.push_back(field); |
832 0, | 725 |
833 false)); | 726 field.label = ASCIIToUTF16("Address Line2"); |
834 form.fields.push_back( | 727 field.name = ASCIIToUTF16("shipping.address.addressLine2"); |
835 webkit_glue::FormField(ASCIIToUTF16("Address Line2"), | 728 form.fields.push_back(field); |
836 ASCIIToUTF16("shipping.address.addressLine2"), | 729 |
837 string16(), | 730 field.label = ASCIIToUTF16("Address Line1"); |
838 ASCIIToUTF16("text"), | 731 field.name = ASCIIToUTF16("billing.address.addressLine1"); |
839 0, | 732 form.fields.push_back(field); |
840 false)); | 733 |
841 form.fields.push_back( | 734 field.label = ASCIIToUTF16("Address Line2"); |
842 webkit_glue::FormField(ASCIIToUTF16("Address Line1"), | 735 field.name = ASCIIToUTF16("billing.address.addressLine2"); |
843 ASCIIToUTF16("billing.address.addressLine1"), | 736 form.fields.push_back(field); |
844 string16(), | 737 |
845 ASCIIToUTF16("text"), | |
846 0, | |
847 false)); | |
848 form.fields.push_back( | |
849 webkit_glue::FormField(ASCIIToUTF16("Address Line2"), | |
850 ASCIIToUTF16("billing.address.addressLine2"), | |
851 string16(), | |
852 ASCIIToUTF16("text"), | |
853 0, | |
854 false)); | |
855 form_structure.reset(new FormStructure(form)); | 738 form_structure.reset(new FormStructure(form)); |
856 form_structure->DetermineHeuristicTypes(); | 739 form_structure->DetermineHeuristicTypes(); |
857 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 740 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
858 ASSERT_EQ(4U, form_structure->field_count()); | 741 ASSERT_EQ(4U, form_structure->field_count()); |
859 ASSERT_EQ(4U, form_structure->autofill_count()); | 742 ASSERT_EQ(4U, form_structure->autofill_count()); |
860 | 743 |
861 // Address Line 1. | 744 // Address Line 1. |
862 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(0)->heuristic_type()); | 745 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(0)->heuristic_type()); |
863 // Address Line 2. | 746 // Address Line 2. |
864 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(1)->heuristic_type()); | 747 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(1)->heuristic_type()); |
865 // Address Line 1. | 748 // Address Line 1. |
866 EXPECT_EQ(ADDRESS_BILLING_LINE1, form_structure->field(2)->heuristic_type()); | 749 EXPECT_EQ(ADDRESS_BILLING_LINE1, form_structure->field(2)->heuristic_type()); |
867 // Address Line 2. | 750 // Address Line 2. |
868 EXPECT_EQ(ADDRESS_BILLING_LINE2, form_structure->field(3)->heuristic_type()); | 751 EXPECT_EQ(ADDRESS_BILLING_LINE2, form_structure->field(3)->heuristic_type()); |
869 } | 752 } |
870 | 753 |
871 | 754 |
872 // This example comes from expedia.com where they use a "Suite" label to | 755 // This example comes from expedia.com where they use a "Suite" label to |
873 // indicate a suite or apartment number. We interpret this as address line 2. | 756 // indicate a suite or apartment number. We interpret this as address line 2. |
874 // And the following "Street address second line" we interpret as address line | 757 // And the following "Street address second line" we interpret as address line |
875 // 3 and discard. | 758 // 3 and discard. |
876 // See http://crbug.com/48197 for details. | 759 // See http://crbug.com/48197 for details. |
877 TEST(FormStructureTest, ThreeAddressLinesExpedia) { | 760 TEST(FormStructureTest, ThreeAddressLinesExpedia) { |
878 scoped_ptr<FormStructure> form_structure; | 761 scoped_ptr<FormStructure> form_structure; |
879 FormData form; | 762 FormData form; |
| 763 form.method = ASCIIToUTF16("post"); |
880 | 764 |
881 form.method = ASCIIToUTF16("post"); | 765 FormField field; |
882 form.fields.push_back( | 766 field.form_control_type = ASCIIToUTF16("text"); |
883 webkit_glue::FormField(ASCIIToUTF16("Street:"), | 767 |
884 ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_ads1"), | 768 field.label = ASCIIToUTF16("Street:"); |
885 string16(), | 769 field.name = ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_ads1"); |
886 ASCIIToUTF16("text"), | 770 form.fields.push_back(field); |
887 0, | 771 |
888 false)); | 772 field.label = ASCIIToUTF16("Suite or Apt:"); |
889 form.fields.push_back( | 773 field.name = ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_adap"); |
890 webkit_glue::FormField(ASCIIToUTF16("Suite or Apt:"), | 774 form.fields.push_back(field); |
891 ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_adap"), | 775 |
892 string16(), | 776 field.label = ASCIIToUTF16("Street address second line"); |
893 ASCIIToUTF16("text"), | 777 field.name = ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_ads2"); |
894 0, | 778 form.fields.push_back(field); |
895 false)); | 779 |
896 form.fields.push_back( | 780 field.label = ASCIIToUTF16("City:"); |
897 webkit_glue::FormField(ASCIIToUTF16("Street address second line"), | 781 field.name = ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_adct"); |
898 ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_ads2"), | 782 form.fields.push_back(field); |
899 string16(), | 783 |
900 ASCIIToUTF16("text"), | |
901 0, | |
902 false)); | |
903 form.fields.push_back( | |
904 webkit_glue::FormField(ASCIIToUTF16("City:"), | |
905 ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_adct"), | |
906 string16(), | |
907 ASCIIToUTF16("text"), | |
908 0, | |
909 false)); | |
910 form_structure.reset(new FormStructure(form)); | 784 form_structure.reset(new FormStructure(form)); |
911 form_structure->DetermineHeuristicTypes(); | 785 form_structure->DetermineHeuristicTypes(); |
912 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 786 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
913 ASSERT_EQ(4U, form_structure->field_count()); | 787 ASSERT_EQ(4U, form_structure->field_count()); |
914 EXPECT_EQ(3U, form_structure->autofill_count()); | 788 EXPECT_EQ(3U, form_structure->autofill_count()); |
915 | 789 |
916 // Address Line 1. | 790 // Address Line 1. |
917 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(0)->heuristic_type()); | 791 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(0)->heuristic_type()); |
918 // Suite / Apt. | 792 // Suite / Apt. |
919 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(1)->heuristic_type()); | 793 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(1)->heuristic_type()); |
920 // Address Line 3. | 794 // Address Line 3. |
921 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(2)->heuristic_type()); | 795 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(2)->heuristic_type()); |
922 // City. | 796 // City. |
923 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(3)->heuristic_type()); | 797 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(3)->heuristic_type()); |
924 } | 798 } |
925 | 799 |
926 // This example comes from ebay.com where the word "suite" appears in the label | 800 // This example comes from ebay.com where the word "suite" appears in the label |
927 // and the name "address2" clearly indicates that this is the address line 2. | 801 // and the name "address2" clearly indicates that this is the address line 2. |
928 // See http://crbug.com/48197 for details. | 802 // See http://crbug.com/48197 for details. |
929 TEST(FormStructureTest, TwoAddressLinesEbay) { | 803 TEST(FormStructureTest, TwoAddressLinesEbay) { |
930 scoped_ptr<FormStructure> form_structure; | 804 scoped_ptr<FormStructure> form_structure; |
931 FormData form; | 805 FormData form; |
| 806 form.method = ASCIIToUTF16("post"); |
932 | 807 |
933 form.method = ASCIIToUTF16("post"); | 808 FormField field; |
934 form.fields.push_back( | 809 field.form_control_type = ASCIIToUTF16("text"); |
935 webkit_glue::FormField(ASCIIToUTF16("Address Line1"), | 810 |
936 ASCIIToUTF16("address1"), | 811 field.label = ASCIIToUTF16("Address Line1"); |
937 string16(), | 812 field.name = ASCIIToUTF16("address1"); |
938 ASCIIToUTF16("text"), | 813 form.fields.push_back(field); |
939 0, | 814 |
940 false)); | 815 field.label = ASCIIToUTF16("Floor number, suite number, etc"); |
941 form.fields.push_back( | 816 field.name = ASCIIToUTF16("address2"); |
942 webkit_glue::FormField(ASCIIToUTF16("Floor number, suite number, etc"), | 817 form.fields.push_back(field); |
943 ASCIIToUTF16("address2"), | 818 |
944 string16(), | 819 field.label = ASCIIToUTF16("City:"); |
945 ASCIIToUTF16("text"), | 820 field.name = ASCIIToUTF16("city"); |
946 0, | 821 form.fields.push_back(field); |
947 false)); | 822 |
948 form.fields.push_back( | |
949 webkit_glue::FormField(ASCIIToUTF16("City"), | |
950 ASCIIToUTF16("city"), | |
951 string16(), | |
952 ASCIIToUTF16("text"), | |
953 0, | |
954 false)); | |
955 form_structure.reset(new FormStructure(form)); | 823 form_structure.reset(new FormStructure(form)); |
956 form_structure->DetermineHeuristicTypes(); | 824 form_structure->DetermineHeuristicTypes(); |
957 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 825 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
958 ASSERT_EQ(3U, form_structure->field_count()); | 826 ASSERT_EQ(3U, form_structure->field_count()); |
959 ASSERT_EQ(3U, form_structure->autofill_count()); | 827 ASSERT_EQ(3U, form_structure->autofill_count()); |
960 | 828 |
961 // Address Line 1. | 829 // Address Line 1. |
962 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(0)->heuristic_type()); | 830 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(0)->heuristic_type()); |
963 // Address Line 2. | 831 // Address Line 2. |
964 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(1)->heuristic_type()); | 832 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(1)->heuristic_type()); |
965 // City. | 833 // City. |
966 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(2)->heuristic_type()); | 834 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(2)->heuristic_type()); |
967 } | 835 } |
968 | 836 |
969 TEST(FormStructureTest, HeuristicsStateWithProvince) { | 837 TEST(FormStructureTest, HeuristicsStateWithProvince) { |
970 scoped_ptr<FormStructure> form_structure; | 838 scoped_ptr<FormStructure> form_structure; |
971 FormData form; | 839 FormData form; |
| 840 form.method = ASCIIToUTF16("post"); |
972 | 841 |
973 form.method = ASCIIToUTF16("post"); | 842 FormField field; |
974 form.fields.push_back( | 843 field.form_control_type = ASCIIToUTF16("text"); |
975 webkit_glue::FormField(ASCIIToUTF16("Address Line1"), | 844 |
976 ASCIIToUTF16("Address"), | 845 field.label = ASCIIToUTF16("Address Line1"); |
977 string16(), | 846 field.name = ASCIIToUTF16("Address"); |
978 ASCIIToUTF16("text"), | 847 form.fields.push_back(field); |
979 0, | 848 |
980 false)); | 849 field.label = ASCIIToUTF16("Address Line2"); |
981 form.fields.push_back( | 850 field.name = ASCIIToUTF16("Address"); |
982 webkit_glue::FormField(ASCIIToUTF16("Address Line2"), | 851 form.fields.push_back(field); |
983 ASCIIToUTF16("Address"), | 852 |
984 string16(), | 853 field.label = ASCIIToUTF16("State/Province/Region"); |
985 ASCIIToUTF16("text"), | 854 field.name = ASCIIToUTF16("State"); |
986 0, | 855 form.fields.push_back(field); |
987 false)); | 856 |
988 form.fields.push_back( | |
989 webkit_glue::FormField(ASCIIToUTF16("State/Province/Region"), | |
990 ASCIIToUTF16("State"), | |
991 string16(), | |
992 ASCIIToUTF16("text"), | |
993 0, | |
994 false)); | |
995 form_structure.reset(new FormStructure(form)); | 857 form_structure.reset(new FormStructure(form)); |
996 form_structure->DetermineHeuristicTypes(); | 858 form_structure->DetermineHeuristicTypes(); |
997 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 859 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
998 ASSERT_EQ(3U, form_structure->field_count()); | 860 ASSERT_EQ(3U, form_structure->field_count()); |
999 ASSERT_EQ(3U, form_structure->autofill_count()); | 861 ASSERT_EQ(3U, form_structure->autofill_count()); |
1000 | 862 |
1001 // Address Line 1. | 863 // Address Line 1. |
1002 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(0)->heuristic_type()); | 864 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(0)->heuristic_type()); |
1003 // Address Line 2. | 865 // Address Line 2. |
1004 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(1)->heuristic_type()); | 866 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(1)->heuristic_type()); |
1005 // State. | 867 // State. |
1006 EXPECT_EQ(ADDRESS_HOME_STATE, form_structure->field(2)->heuristic_type()); | 868 EXPECT_EQ(ADDRESS_HOME_STATE, form_structure->field(2)->heuristic_type()); |
1007 } | 869 } |
1008 | 870 |
1009 // This example comes from lego.com's checkout page. | 871 // This example comes from lego.com's checkout page. |
1010 TEST(FormStructureTest, HeuristicsWithBilling) { | 872 TEST(FormStructureTest, HeuristicsWithBilling) { |
1011 scoped_ptr<FormStructure> form_structure; | 873 scoped_ptr<FormStructure> form_structure; |
1012 FormData form; | 874 FormData form; |
| 875 form.method = ASCIIToUTF16("post"); |
1013 | 876 |
1014 form.method = ASCIIToUTF16("post"); | 877 FormField field; |
1015 form.fields.push_back( | 878 field.form_control_type = ASCIIToUTF16("text"); |
1016 webkit_glue::FormField(ASCIIToUTF16("First Name*:"), | 879 |
1017 ASCIIToUTF16("editBillingAddress$firstNameBox"), | 880 field.label = ASCIIToUTF16("First Name*:"); |
1018 string16(), | 881 field.name = ASCIIToUTF16("editBillingAddress$firstNameBox"); |
1019 ASCIIToUTF16("text"), | 882 form.fields.push_back(field); |
1020 0, | 883 |
1021 false)); | 884 field.label = ASCIIToUTF16("Last Name*:"); |
1022 form.fields.push_back( | 885 field.name = ASCIIToUTF16("editBillingAddress$lastNameBox"); |
1023 webkit_glue::FormField(ASCIIToUTF16("Last Name*:"), | 886 form.fields.push_back(field); |
1024 ASCIIToUTF16("editBillingAddress$lastNameBox"), | 887 |
1025 string16(), | 888 field.label = ASCIIToUTF16("Company Name:"); |
1026 ASCIIToUTF16("text"), | 889 field.name = ASCIIToUTF16("editBillingAddress$companyBox"); |
1027 0, | 890 form.fields.push_back(field); |
1028 false)); | 891 |
1029 form.fields.push_back( | 892 field.label = ASCIIToUTF16("Address*:"); |
1030 webkit_glue::FormField(ASCIIToUTF16("Company Name:"), | 893 field.name = ASCIIToUTF16("editBillingAddress$addressLine1Box"); |
1031 ASCIIToUTF16("editBillingAddress$companyBox"), | 894 form.fields.push_back(field); |
1032 string16(), | 895 |
1033 ASCIIToUTF16("text"), | 896 field.label = ASCIIToUTF16("Apt/Suite :"); |
1034 0, | 897 field.name = ASCIIToUTF16("editBillingAddress$addressLine2Box"); |
1035 false)); | 898 form.fields.push_back(field); |
1036 form.fields.push_back( | 899 |
1037 webkit_glue::FormField(ASCIIToUTF16("Address*:"), | 900 field.label = ASCIIToUTF16("City*:"); |
1038 ASCIIToUTF16("editBillingAddress$addressLine1Box"), | 901 field.name = ASCIIToUTF16("editBillingAddress$cityBox"); |
1039 string16(), | 902 form.fields.push_back(field); |
1040 ASCIIToUTF16("text"), | 903 |
1041 0, | 904 field.label = ASCIIToUTF16("State/Province*:"); |
1042 false)); | 905 field.name = ASCIIToUTF16("editBillingAddress$stateDropDown"); |
1043 form.fields.push_back( | 906 form.fields.push_back(field); |
1044 webkit_glue::FormField(ASCIIToUTF16("Apt/Suite :"), | 907 |
1045 ASCIIToUTF16("editBillingAddress$addressLine2Box"), | 908 field.label = ASCIIToUTF16("Country*:"); |
1046 string16(), | 909 field.name = ASCIIToUTF16("editBillingAddress$countryDropDown"); |
1047 ASCIIToUTF16("text"), | 910 form.fields.push_back(field); |
1048 0, | 911 |
1049 false)); | 912 field.label = ASCIIToUTF16("Postal Code*:"); |
1050 form.fields.push_back( | 913 field.name = ASCIIToUTF16("editBillingAddress$zipCodeBox"); |
1051 webkit_glue::FormField(ASCIIToUTF16("City*:"), | 914 form.fields.push_back(field); |
1052 ASCIIToUTF16("editBillingAddress$cityBox"), | 915 |
1053 string16(), | 916 field.label = ASCIIToUTF16("Phone*:"); |
1054 ASCIIToUTF16("text"), | 917 field.name = ASCIIToUTF16("editBillingAddress$phoneBox"); |
1055 0, | 918 form.fields.push_back(field); |
1056 false)); | 919 |
1057 form.fields.push_back( | 920 field.label = ASCIIToUTF16("Email Address*:"); |
1058 webkit_glue::FormField(ASCIIToUTF16("State/Province*:"), | 921 field.name = ASCIIToUTF16("email$emailBox"); |
1059 ASCIIToUTF16("editBillingAddress$stateDropDown"), | 922 form.fields.push_back(field); |
1060 string16(), | 923 |
1061 ASCIIToUTF16("text"), | |
1062 0, | |
1063 false)); | |
1064 form.fields.push_back( | |
1065 webkit_glue::FormField(ASCIIToUTF16("Country*:"), | |
1066 ASCIIToUTF16("editBillingAddress$countryDropDown"), | |
1067 string16(), | |
1068 ASCIIToUTF16("text"), | |
1069 0, | |
1070 false)); | |
1071 form.fields.push_back( | |
1072 webkit_glue::FormField(ASCIIToUTF16("Postal Code*:"), | |
1073 ASCIIToUTF16("editBillingAddress$zipCodeBox"), | |
1074 string16(), | |
1075 ASCIIToUTF16("text"), | |
1076 0, | |
1077 false)); | |
1078 form.fields.push_back( | |
1079 webkit_glue::FormField(ASCIIToUTF16("Phone*:"), | |
1080 ASCIIToUTF16("editBillingAddress$phoneBox"), | |
1081 string16(), | |
1082 ASCIIToUTF16("text"), | |
1083 0, | |
1084 false)); | |
1085 form.fields.push_back( | |
1086 webkit_glue::FormField(ASCIIToUTF16("Email Address*:"), | |
1087 ASCIIToUTF16("email$emailBox"), | |
1088 string16(), | |
1089 ASCIIToUTF16("text"), | |
1090 0, | |
1091 false)); | |
1092 form_structure.reset(new FormStructure(form)); | 924 form_structure.reset(new FormStructure(form)); |
1093 form_structure->DetermineHeuristicTypes(); | 925 form_structure->DetermineHeuristicTypes(); |
1094 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 926 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
1095 ASSERT_EQ(11U, form_structure->field_count()); | 927 ASSERT_EQ(11U, form_structure->field_count()); |
1096 ASSERT_EQ(11U, form_structure->autofill_count()); | 928 ASSERT_EQ(11U, form_structure->autofill_count()); |
1097 | 929 |
1098 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); | 930 EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); |
1099 EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type()); | 931 EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type()); |
1100 EXPECT_EQ(COMPANY_NAME, form_structure->field(2)->heuristic_type()); | 932 EXPECT_EQ(COMPANY_NAME, form_structure->field(2)->heuristic_type()); |
1101 EXPECT_EQ(ADDRESS_BILLING_LINE1, form_structure->field(3)->heuristic_type()); | 933 EXPECT_EQ(ADDRESS_BILLING_LINE1, form_structure->field(3)->heuristic_type()); |
1102 EXPECT_EQ(ADDRESS_BILLING_LINE2, form_structure->field(4)->heuristic_type()); | 934 EXPECT_EQ(ADDRESS_BILLING_LINE2, form_structure->field(4)->heuristic_type()); |
1103 EXPECT_EQ(ADDRESS_BILLING_CITY, form_structure->field(5)->heuristic_type()); | 935 EXPECT_EQ(ADDRESS_BILLING_CITY, form_structure->field(5)->heuristic_type()); |
1104 EXPECT_EQ(ADDRESS_BILLING_STATE, form_structure->field(6)->heuristic_type()); | 936 EXPECT_EQ(ADDRESS_BILLING_STATE, form_structure->field(6)->heuristic_type()); |
1105 EXPECT_EQ(ADDRESS_BILLING_COUNTRY, | 937 EXPECT_EQ(ADDRESS_BILLING_COUNTRY, |
1106 form_structure->field(7)->heuristic_type()); | 938 form_structure->field(7)->heuristic_type()); |
1107 EXPECT_EQ(ADDRESS_BILLING_ZIP, form_structure->field(8)->heuristic_type()); | 939 EXPECT_EQ(ADDRESS_BILLING_ZIP, form_structure->field(8)->heuristic_type()); |
1108 EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, | 940 EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, |
1109 form_structure->field(9)->heuristic_type()); | 941 form_structure->field(9)->heuristic_type()); |
1110 EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(10)->heuristic_type()); | 942 EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(10)->heuristic_type()); |
1111 } | 943 } |
1112 | 944 |
1113 TEST(FormStructureTest, ThreePartPhoneNumber) { | 945 TEST(FormStructureTest, ThreePartPhoneNumber) { |
1114 scoped_ptr<FormStructure> form_structure; | 946 scoped_ptr<FormStructure> form_structure; |
1115 FormData form; | 947 FormData form; |
| 948 form.method = ASCIIToUTF16("post"); |
1116 | 949 |
1117 form.method = ASCIIToUTF16("post"); | 950 FormField field; |
1118 form.fields.push_back( | 951 field.form_control_type = ASCIIToUTF16("text"); |
1119 webkit_glue::FormField(ASCIIToUTF16("Phone:"), | 952 |
1120 ASCIIToUTF16("dayphone1"), | 953 field.label = ASCIIToUTF16("Phone:"); |
1121 string16(), | 954 field.name = ASCIIToUTF16("dayphone1"); |
1122 ASCIIToUTF16("text"), | 955 field.max_length = 0; |
1123 0, | 956 form.fields.push_back(field); |
1124 false)); | 957 |
1125 form.fields.push_back( | 958 field.label = ASCIIToUTF16("-"); |
1126 webkit_glue::FormField(ASCIIToUTF16("-"), | 959 field.name = ASCIIToUTF16("dayphone2"); |
1127 ASCIIToUTF16("dayphone2"), | 960 field.max_length = 3; // Size of prefix is 3. |
1128 string16(), | 961 form.fields.push_back(field); |
1129 ASCIIToUTF16("text"), | 962 |
1130 3, // Size of prefix is 3. | 963 field.label = ASCIIToUTF16("-"); |
1131 false)); | 964 field.name = ASCIIToUTF16("dayphone3"); |
1132 form.fields.push_back( | 965 field.max_length = 4; // Size of suffix is 4. If unlimited size is |
1133 webkit_glue::FormField(ASCIIToUTF16("-"), | 966 // passed, phone will be parsed as |
1134 ASCIIToUTF16("dayphone3"), | 967 // <country code> - <area code> - <phone>. |
1135 string16(), | 968 form.fields.push_back(field); |
1136 ASCIIToUTF16("text"), | 969 |
1137 4, // Size of suffix is 4. If unlimited size is | 970 field.label = ASCIIToUTF16("ext.:"); |
1138 // passed, phone will be parsed as | 971 field.name = ASCIIToUTF16("dayphone4"); |
1139 // <country code> - <area code> - <phone>. | 972 field.max_length = 0; |
1140 false)); | 973 form.fields.push_back(field); |
1141 form.fields.push_back( | 974 |
1142 webkit_glue::FormField(ASCIIToUTF16("ext.:"), | |
1143 ASCIIToUTF16("dayphone4"), | |
1144 string16(), | |
1145 ASCIIToUTF16("text"), | |
1146 0, | |
1147 false)); | |
1148 form_structure.reset(new FormStructure(form)); | 975 form_structure.reset(new FormStructure(form)); |
1149 form_structure->DetermineHeuristicTypes(); | 976 form_structure->DetermineHeuristicTypes(); |
1150 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 977 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
1151 ASSERT_EQ(4U, form_structure->field_count()); | 978 ASSERT_EQ(4U, form_structure->field_count()); |
1152 ASSERT_EQ(3U, form_structure->autofill_count()); | 979 ASSERT_EQ(3U, form_structure->autofill_count()); |
1153 | 980 |
1154 // Area code. | 981 // Area code. |
1155 EXPECT_EQ(PHONE_HOME_CITY_CODE, form_structure->field(0)->heuristic_type()); | 982 EXPECT_EQ(PHONE_HOME_CITY_CODE, form_structure->field(0)->heuristic_type()); |
1156 // Phone number suffix. | 983 // Phone number suffix. |
1157 EXPECT_EQ(PHONE_HOME_NUMBER, | 984 EXPECT_EQ(PHONE_HOME_NUMBER, |
1158 form_structure->field(1)->heuristic_type()); | 985 form_structure->field(1)->heuristic_type()); |
1159 // Phone number suffix. | 986 // Phone number suffix. |
1160 EXPECT_EQ(PHONE_HOME_NUMBER, | 987 EXPECT_EQ(PHONE_HOME_NUMBER, |
1161 form_structure->field(2)->heuristic_type()); | 988 form_structure->field(2)->heuristic_type()); |
1162 // Unknown. | 989 // Unknown. |
1163 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(3)->heuristic_type()); | 990 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(3)->heuristic_type()); |
1164 } | 991 } |
1165 | 992 |
1166 TEST(FormStructureTest, HeuristicsInfernoCC) { | 993 TEST(FormStructureTest, HeuristicsInfernoCC) { |
1167 scoped_ptr<FormStructure> form_structure; | 994 scoped_ptr<FormStructure> form_structure; |
1168 FormData form; | 995 FormData form; |
1169 form.method = ASCIIToUTF16("post"); | 996 form.method = ASCIIToUTF16("post"); |
1170 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Name on Card"), | 997 |
1171 ASCIIToUTF16("name_on_card"), | 998 FormField field; |
1172 string16(), | 999 field.form_control_type = ASCIIToUTF16("text"); |
1173 ASCIIToUTF16("text"), | 1000 |
1174 0, | 1001 field.label = ASCIIToUTF16("Name on Card"); |
1175 false)); | 1002 field.name = ASCIIToUTF16("name_on_card"); |
1176 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Address"), | 1003 form.fields.push_back(field); |
1177 ASCIIToUTF16("billing_address"), | 1004 |
1178 string16(), | 1005 field.label = ASCIIToUTF16("Address"); |
1179 ASCIIToUTF16("text"), | 1006 field.name = ASCIIToUTF16("billing_address"); |
1180 0, | 1007 form.fields.push_back(field); |
1181 false)); | 1008 |
1182 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Card Number"), | 1009 field.label = ASCIIToUTF16("Card Number"); |
1183 ASCIIToUTF16("card_number"), | 1010 field.name = ASCIIToUTF16("card_number"); |
1184 string16(), | 1011 form.fields.push_back(field); |
1185 ASCIIToUTF16("text"), | 1012 |
1186 0, | 1013 field.label = ASCIIToUTF16("Expiration Date"); |
1187 false)); | 1014 field.name = ASCIIToUTF16("expiration_month"); |
1188 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Expiration Date"), | 1015 form.fields.push_back(field); |
1189 ASCIIToUTF16("expiration_month"), | 1016 |
1190 string16(), | 1017 field.label = ASCIIToUTF16("Expiration Year"); |
1191 ASCIIToUTF16("text"), | 1018 field.name = ASCIIToUTF16("expiration_year"); |
1192 0, | 1019 form.fields.push_back(field); |
1193 false)); | 1020 |
1194 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Expiration Year"), | |
1195 ASCIIToUTF16("expiration_year"), | |
1196 string16(), | |
1197 ASCIIToUTF16("text"), | |
1198 0, | |
1199 false)); | |
1200 form_structure.reset(new FormStructure(form)); | 1021 form_structure.reset(new FormStructure(form)); |
1201 form_structure->DetermineHeuristicTypes(); | 1022 form_structure->DetermineHeuristicTypes(); |
1202 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 1023 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
1203 | 1024 |
1204 // Expect the correct number of fields. | 1025 // Expect the correct number of fields. |
1205 ASSERT_EQ(5U, form_structure->field_count()); | 1026 ASSERT_EQ(5U, form_structure->field_count()); |
1206 EXPECT_EQ(5U, form_structure->autofill_count()); | 1027 EXPECT_EQ(5U, form_structure->autofill_count()); |
1207 | 1028 |
1208 // Name on Card. | 1029 // Name on Card. |
1209 EXPECT_EQ(CREDIT_CARD_NAME, form_structure->field(0)->heuristic_type()); | 1030 EXPECT_EQ(CREDIT_CARD_NAME, form_structure->field(0)->heuristic_type()); |
1210 // Address. | 1031 // Address. |
1211 EXPECT_EQ(ADDRESS_BILLING_LINE1, form_structure->field(1)->heuristic_type()); | 1032 EXPECT_EQ(ADDRESS_BILLING_LINE1, form_structure->field(1)->heuristic_type()); |
1212 // Card Number. | 1033 // Card Number. |
1213 EXPECT_EQ(CREDIT_CARD_NUMBER, form_structure->field(2)->heuristic_type()); | 1034 EXPECT_EQ(CREDIT_CARD_NUMBER, form_structure->field(2)->heuristic_type()); |
1214 // Expiration Date. | 1035 // Expiration Date. |
1215 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, form_structure->field(3)->heuristic_type()); | 1036 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, form_structure->field(3)->heuristic_type()); |
1216 // Expiration Year. | 1037 // Expiration Year. |
1217 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, | 1038 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, |
1218 form_structure->field(4)->heuristic_type()); | 1039 form_structure->field(4)->heuristic_type()); |
1219 } | 1040 } |
1220 | 1041 |
1221 TEST(FormStructureTest, CVCCodeClash) { | 1042 TEST(FormStructureTest, CVCCodeClash) { |
1222 scoped_ptr<FormStructure> form_structure; | 1043 scoped_ptr<FormStructure> form_structure; |
1223 FormData form; | 1044 FormData form; |
1224 form.method = ASCIIToUTF16("post"); | 1045 form.method = ASCIIToUTF16("post"); |
1225 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Card number"), | 1046 |
1226 ASCIIToUTF16("ccnumber"), | 1047 FormField field; |
1227 string16(), | 1048 field.form_control_type = ASCIIToUTF16("text"); |
1228 ASCIIToUTF16("text"), | 1049 |
1229 0, | 1050 field.label = ASCIIToUTF16("Card number"); |
1230 false)); | 1051 field.name = ASCIIToUTF16("ccnumber"); |
1231 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("First name"), | 1052 form.fields.push_back(field); |
1232 ASCIIToUTF16("first_name"), | 1053 |
1233 string16(), | 1054 field.label = ASCIIToUTF16("First name"); |
1234 ASCIIToUTF16("text"), | 1055 field.name = ASCIIToUTF16("first_name"); |
1235 0, | 1056 form.fields.push_back(field); |
1236 false)); | 1057 |
1237 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Last name"), | 1058 field.label = ASCIIToUTF16("Last name"); |
1238 ASCIIToUTF16("last_name"), | 1059 field.name = ASCIIToUTF16("last_name"); |
1239 string16(), | 1060 form.fields.push_back(field); |
1240 ASCIIToUTF16("text"), | 1061 |
1241 0, | 1062 field.label = ASCIIToUTF16("Expiration date"); |
1242 false)); | 1063 field.name = ASCIIToUTF16("ccexpiresmonth"); |
1243 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Expiration date"), | 1064 form.fields.push_back(field); |
1244 ASCIIToUTF16("ccexpiresmonth"), | 1065 |
1245 string16(), | 1066 field.label = string16(); |
1246 ASCIIToUTF16("text"), | 1067 field.name = ASCIIToUTF16("ccexpiresyear"); |
1247 0, | 1068 form.fields.push_back(field); |
1248 false)); | 1069 |
1249 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16(""), | 1070 field.label = ASCIIToUTF16("cvc number"); |
1250 ASCIIToUTF16("ccexpiresyear"), | 1071 field.name = ASCIIToUTF16("csc"); |
1251 string16(), | 1072 form.fields.push_back(field); |
1252 ASCIIToUTF16("text"), | 1073 |
1253 0, | |
1254 false)); | |
1255 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("cvc number"), | |
1256 ASCIIToUTF16("csc"), | |
1257 string16(), | |
1258 ASCIIToUTF16("text"), | |
1259 0, | |
1260 false)); | |
1261 form_structure.reset(new FormStructure(form)); | 1074 form_structure.reset(new FormStructure(form)); |
1262 form_structure->DetermineHeuristicTypes(); | 1075 form_structure->DetermineHeuristicTypes(); |
1263 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 1076 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
1264 | 1077 |
1265 // Expect the correct number of fields. | 1078 // Expect the correct number of fields. |
1266 ASSERT_EQ(6U, form_structure->field_count()); | 1079 ASSERT_EQ(6U, form_structure->field_count()); |
1267 ASSERT_EQ(4U, form_structure->autofill_count()); | 1080 ASSERT_EQ(4U, form_structure->autofill_count()); |
1268 | 1081 |
1269 // Card Number. | 1082 // Card Number. |
1270 EXPECT_EQ(CREDIT_CARD_NUMBER, form_structure->field(0)->heuristic_type()); | 1083 EXPECT_EQ(CREDIT_CARD_NUMBER, form_structure->field(0)->heuristic_type()); |
1271 // First name, taken as name on card. | 1084 // First name, taken as name on card. |
1272 EXPECT_EQ(CREDIT_CARD_NAME, form_structure->field(1)->heuristic_type()); | 1085 EXPECT_EQ(CREDIT_CARD_NAME, form_structure->field(1)->heuristic_type()); |
1273 // Last name is not merged. | 1086 // Last name is not merged. |
1274 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(2)->heuristic_type()); | 1087 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(2)->heuristic_type()); |
1275 // Expiration Date. | 1088 // Expiration Date. |
1276 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, form_structure->field(3)->heuristic_type()); | 1089 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, form_structure->field(3)->heuristic_type()); |
1277 // Expiration Year. | 1090 // Expiration Year. |
1278 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, | 1091 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, |
1279 form_structure->field(4)->heuristic_type()); | 1092 form_structure->field(4)->heuristic_type()); |
1280 // CVC code should not match. | 1093 // CVC code should not match. |
1281 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(5)->heuristic_type()); | 1094 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(5)->heuristic_type()); |
1282 } | 1095 } |
1283 | 1096 |
1284 TEST(FormStructureTest, EncodeQueryRequest) { | 1097 TEST(FormStructureTest, EncodeQueryRequest) { |
1285 FormData form; | 1098 FormData form; |
1286 form.method = ASCIIToUTF16("post"); | 1099 form.method = ASCIIToUTF16("post"); |
1287 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Name on Card"), | 1100 |
1288 ASCIIToUTF16("name_on_card"), | 1101 FormField field; |
1289 string16(), | 1102 field.form_control_type = ASCIIToUTF16("text"); |
1290 ASCIIToUTF16("text"), | 1103 |
1291 0, | 1104 field.label = ASCIIToUTF16("Name on Card"); |
1292 false)); | 1105 field.name = ASCIIToUTF16("name_on_card"); |
1293 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Address"), | 1106 form.fields.push_back(field); |
1294 ASCIIToUTF16("billing_address"), | 1107 |
1295 string16(), | 1108 field.label = ASCIIToUTF16("Address"); |
1296 ASCIIToUTF16("text"), | 1109 field.name = ASCIIToUTF16("billing_address"); |
1297 0, | 1110 form.fields.push_back(field); |
1298 false)); | 1111 |
1299 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Card Number"), | 1112 field.label = ASCIIToUTF16("Card Number"); |
1300 ASCIIToUTF16("card_number"), | 1113 field.name = ASCIIToUTF16("card_number"); |
1301 string16(), | 1114 form.fields.push_back(field); |
1302 ASCIIToUTF16("text"), | 1115 |
1303 0, | 1116 field.label = ASCIIToUTF16("Expiration Date"); |
1304 false)); | 1117 field.name = ASCIIToUTF16("expiration_month"); |
1305 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Expiration Date"), | 1118 form.fields.push_back(field); |
1306 ASCIIToUTF16("expiration_month"), | 1119 |
1307 string16(), | 1120 field.label = ASCIIToUTF16("Expiration Year"); |
1308 ASCIIToUTF16("text"), | 1121 field.name = ASCIIToUTF16("expiration_year"); |
1309 0, | 1122 form.fields.push_back(field); |
1310 false)); | 1123 |
1311 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Expiration Year"), | |
1312 ASCIIToUTF16("expiration_year"), | |
1313 string16(), | |
1314 ASCIIToUTF16("text"), | |
1315 0, | |
1316 false)); | |
1317 ScopedVector<FormStructure> forms; | 1124 ScopedVector<FormStructure> forms; |
1318 forms.push_back(new FormStructure(form)); | 1125 forms.push_back(new FormStructure(form)); |
1319 std::vector<std::string> encoded_signatures; | 1126 std::vector<std::string> encoded_signatures; |
1320 std::string encoded_xml; | 1127 std::string encoded_xml; |
1321 const char * const kSignature1 = "11337937696949187602"; | 1128 const char * const kSignature1 = "11337937696949187602"; |
1322 const char * const kResponse1 = | 1129 const char * const kResponse1 = |
1323 "<\?xml version=\"1.0\" encoding=\"UTF-8\"\?><autofillquery " | 1130 "<\?xml version=\"1.0\" encoding=\"UTF-8\"\?><autofillquery " |
1324 "clientversion=\"6.1.1715.1442/en (GGLL)\" accepts=\"e\"><form " | 1131 "clientversion=\"6.1.1715.1442/en (GGLL)\" accepts=\"e\"><form " |
1325 "signature=\"11337937696949187602\"><field signature=\"412125936\"/>" | 1132 "signature=\"11337937696949187602\"><field signature=\"412125936\"/>" |
1326 "<field signature=\"1917667676\"/><field signature=\"2226358947\"/>" | 1133 "<field signature=\"1917667676\"/><field signature=\"2226358947\"/>" |
1327 "<field signature=\"747221617\"/><field signature=\"4108155786\"/></form>" | 1134 "<field signature=\"747221617\"/><field signature=\"4108155786\"/></form>" |
1328 "</autofillquery>"; | 1135 "</autofillquery>"; |
1329 ASSERT_TRUE(FormStructure::EncodeQueryRequest(forms, &encoded_signatures, | 1136 ASSERT_TRUE(FormStructure::EncodeQueryRequest(forms, &encoded_signatures, |
1330 &encoded_xml)); | 1137 &encoded_xml)); |
1331 ASSERT_EQ(1U, encoded_signatures.size()); | 1138 ASSERT_EQ(1U, encoded_signatures.size()); |
1332 EXPECT_EQ(kSignature1, encoded_signatures[0]); | 1139 EXPECT_EQ(kSignature1, encoded_signatures[0]); |
1333 EXPECT_EQ(kResponse1, encoded_xml); | 1140 EXPECT_EQ(kResponse1, encoded_xml); |
1334 | 1141 |
1335 // Add the same form, only one will be encoded, so EncodeQueryRequest() should | 1142 // Add the same form, only one will be encoded, so EncodeQueryRequest() should |
1336 // return the same data. | 1143 // return the same data. |
1337 forms.push_back(new FormStructure(form)); | 1144 forms.push_back(new FormStructure(form)); |
1338 ASSERT_TRUE(FormStructure::EncodeQueryRequest(forms, &encoded_signatures, | 1145 ASSERT_TRUE(FormStructure::EncodeQueryRequest(forms, &encoded_signatures, |
1339 &encoded_xml)); | 1146 &encoded_xml)); |
1340 ASSERT_EQ(1U, encoded_signatures.size()); | 1147 ASSERT_EQ(1U, encoded_signatures.size()); |
1341 EXPECT_EQ(kSignature1, encoded_signatures[0]); | 1148 EXPECT_EQ(kSignature1, encoded_signatures[0]); |
1342 EXPECT_EQ(kResponse1, encoded_xml); | 1149 EXPECT_EQ(kResponse1, encoded_xml); |
1343 // Add 5 address fields - this should be still a valid form. | 1150 // Add 5 address fields - this should be still a valid form. |
1344 for (size_t i = 0; i < 5; ++i) { | 1151 for (size_t i = 0; i < 5; ++i) { |
1345 form.fields.push_back( | 1152 field.label = ASCIIToUTF16("Address"); |
1346 webkit_glue::FormField(ASCIIToUTF16("Address"), | 1153 field.name = ASCIIToUTF16("address"); |
1347 ASCIIToUTF16("address"), | 1154 form.fields.push_back(field); |
1348 string16(), | |
1349 ASCIIToUTF16("text"), | |
1350 0, | |
1351 false)); | |
1352 } | 1155 } |
1353 | 1156 |
1354 forms.push_back(new FormStructure(form)); | 1157 forms.push_back(new FormStructure(form)); |
1355 ASSERT_TRUE(FormStructure::EncodeQueryRequest(forms, &encoded_signatures, | 1158 ASSERT_TRUE(FormStructure::EncodeQueryRequest(forms, &encoded_signatures, |
1356 &encoded_xml)); | 1159 &encoded_xml)); |
1357 ASSERT_EQ(2U, encoded_signatures.size()); | 1160 ASSERT_EQ(2U, encoded_signatures.size()); |
1358 EXPECT_EQ(kSignature1, encoded_signatures[0]); | 1161 EXPECT_EQ(kSignature1, encoded_signatures[0]); |
1359 const char * const kSignature2 = "8308881815906226214"; | 1162 const char * const kSignature2 = "8308881815906226214"; |
1360 EXPECT_EQ(kSignature2, encoded_signatures[1]); | 1163 EXPECT_EQ(kSignature2, encoded_signatures[1]); |
1361 const char * const kResponse2 = | 1164 const char * const kResponse2 = |
1362 "<\?xml version=\"1.0\" encoding=\"UTF-8\"\?><autofillquery " | 1165 "<\?xml version=\"1.0\" encoding=\"UTF-8\"\?><autofillquery " |
1363 "clientversion=\"6.1.1715.1442/en (GGLL)\" accepts=\"e\"><form " | 1166 "clientversion=\"6.1.1715.1442/en (GGLL)\" accepts=\"e\"><form " |
1364 "signature=\"11337937696949187602\"><field signature=\"412125936\"/>" | 1167 "signature=\"11337937696949187602\"><field signature=\"412125936\"/>" |
1365 "<field signature=\"1917667676\"/><field signature=\"2226358947\"/>" | 1168 "<field signature=\"1917667676\"/><field signature=\"2226358947\"/>" |
1366 "<field signature=\"747221617\"/><field signature=\"4108155786\"/></form>" | 1169 "<field signature=\"747221617\"/><field signature=\"4108155786\"/></form>" |
1367 "<form signature=\"8308881815906226214\"><field signature=\"412125936\"/>" | 1170 "<form signature=\"8308881815906226214\"><field signature=\"412125936\"/>" |
1368 "<field signature=\"1917667676\"/><field signature=\"2226358947\"/>" | 1171 "<field signature=\"1917667676\"/><field signature=\"2226358947\"/>" |
1369 "<field signature=\"747221617\"/><field signature=\"4108155786\"/><field " | 1172 "<field signature=\"747221617\"/><field signature=\"4108155786\"/><field " |
1370 "signature=\"509334676\"/><field signature=\"509334676\"/><field " | 1173 "signature=\"509334676\"/><field signature=\"509334676\"/><field " |
1371 "signature=\"509334676\"/><field signature=\"509334676\"/><field " | 1174 "signature=\"509334676\"/><field signature=\"509334676\"/><field " |
1372 "signature=\"509334676\"/></form></autofillquery>"; | 1175 "signature=\"509334676\"/></form></autofillquery>"; |
1373 EXPECT_EQ(kResponse2, encoded_xml); | 1176 EXPECT_EQ(kResponse2, encoded_xml); |
1374 | 1177 |
1375 // Add 50 address fields - the form is not valid anymore, but previous ones | 1178 // Add 50 address fields - the form is not valid anymore, but previous ones |
1376 // are. The result should be the same as in previous test. | 1179 // are. The result should be the same as in previous test. |
1377 for (size_t i = 0; i < 50; ++i) { | 1180 for (size_t i = 0; i < 50; ++i) { |
1378 form.fields.push_back( | 1181 field.label = ASCIIToUTF16("Address"); |
1379 webkit_glue::FormField(ASCIIToUTF16("Address"), | 1182 field.name = ASCIIToUTF16("address"); |
1380 ASCIIToUTF16("address"), | 1183 form.fields.push_back(field); |
1381 string16(), | |
1382 ASCIIToUTF16("text"), | |
1383 0, | |
1384 false)); | |
1385 } | 1184 } |
1386 | 1185 |
1387 forms.push_back(new FormStructure(form)); | 1186 forms.push_back(new FormStructure(form)); |
1388 ASSERT_TRUE(FormStructure::EncodeQueryRequest(forms, &encoded_signatures, | 1187 ASSERT_TRUE(FormStructure::EncodeQueryRequest(forms, &encoded_signatures, |
1389 &encoded_xml)); | 1188 &encoded_xml)); |
1390 ASSERT_EQ(2U, encoded_signatures.size()); | 1189 ASSERT_EQ(2U, encoded_signatures.size()); |
1391 EXPECT_EQ(kSignature1, encoded_signatures[0]); | 1190 EXPECT_EQ(kSignature1, encoded_signatures[0]); |
1392 EXPECT_EQ(kSignature2, encoded_signatures[1]); | 1191 EXPECT_EQ(kSignature2, encoded_signatures[1]); |
1393 EXPECT_EQ(kResponse2, encoded_xml); | 1192 EXPECT_EQ(kResponse2, encoded_xml); |
1394 | 1193 |
1395 // Check that we fail if there are only bad form(s). | 1194 // Check that we fail if there are only bad form(s). |
1396 ScopedVector<FormStructure> bad_forms; | 1195 ScopedVector<FormStructure> bad_forms; |
1397 bad_forms.push_back(new FormStructure(form)); | 1196 bad_forms.push_back(new FormStructure(form)); |
1398 EXPECT_FALSE(FormStructure::EncodeQueryRequest(bad_forms, &encoded_signatures, | 1197 EXPECT_FALSE(FormStructure::EncodeQueryRequest(bad_forms, &encoded_signatures, |
1399 &encoded_xml)); | 1198 &encoded_xml)); |
1400 EXPECT_EQ(0U, encoded_signatures.size()); | 1199 EXPECT_EQ(0U, encoded_signatures.size()); |
1401 EXPECT_EQ("", encoded_xml); | 1200 EXPECT_EQ("", encoded_xml); |
1402 } | 1201 } |
1403 | 1202 |
1404 TEST(FormStructureTest, EncodeUploadRequest) { | 1203 TEST(FormStructureTest, EncodeUploadRequest) { |
1405 scoped_ptr<FormStructure> form_structure; | 1204 scoped_ptr<FormStructure> form_structure; |
1406 std::vector<FieldTypeSet> possible_field_types; | 1205 std::vector<FieldTypeSet> possible_field_types; |
1407 FormData form; | 1206 FormData form; |
1408 form.method = ASCIIToUTF16("post"); | 1207 form.method = ASCIIToUTF16("post"); |
1409 form_structure.reset(new FormStructure(form)); | 1208 form_structure.reset(new FormStructure(form)); |
1410 form_structure->DetermineHeuristicTypes(); | 1209 form_structure->DetermineHeuristicTypes(); |
1411 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("First Name"), | 1210 |
1412 ASCIIToUTF16("firstname"), | 1211 FormField field; |
1413 string16(), | 1212 field.form_control_type = ASCIIToUTF16("text"); |
1414 ASCIIToUTF16("text"), | 1213 |
1415 0, | 1214 field.label = ASCIIToUTF16("First Name"); |
1416 false)); | 1215 field.name = ASCIIToUTF16("firstname"); |
| 1216 form.fields.push_back(field); |
1417 possible_field_types.push_back(FieldTypeSet()); | 1217 possible_field_types.push_back(FieldTypeSet()); |
1418 possible_field_types.back().insert(NAME_FIRST); | 1218 possible_field_types.back().insert(NAME_FIRST); |
1419 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Last Name"), | 1219 |
1420 ASCIIToUTF16("lastname"), | 1220 field.label = ASCIIToUTF16("Last Name"); |
1421 string16(), | 1221 field.name = ASCIIToUTF16("lastname"); |
1422 ASCIIToUTF16("text"), | 1222 form.fields.push_back(field); |
1423 0, | |
1424 false)); | |
1425 possible_field_types.push_back(FieldTypeSet()); | 1223 possible_field_types.push_back(FieldTypeSet()); |
1426 possible_field_types.back().insert(NAME_LAST); | 1224 possible_field_types.back().insert(NAME_LAST); |
1427 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("EMail"), | 1225 |
1428 ASCIIToUTF16("email"), | 1226 field.label = ASCIIToUTF16("Email"); |
1429 string16(), | 1227 field.name = ASCIIToUTF16("email"); |
1430 ASCIIToUTF16("email"), | 1228 field.form_control_type = ASCIIToUTF16("email"); |
1431 0, | 1229 form.fields.push_back(field); |
1432 false)); | |
1433 possible_field_types.push_back(FieldTypeSet()); | 1230 possible_field_types.push_back(FieldTypeSet()); |
1434 possible_field_types.back().insert(EMAIL_ADDRESS); | 1231 possible_field_types.back().insert(EMAIL_ADDRESS); |
1435 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Phone"), | 1232 |
1436 ASCIIToUTF16("phone"), | 1233 field.label = ASCIIToUTF16("Phone"); |
1437 string16(), | 1234 field.name = ASCIIToUTF16("phone"); |
1438 ASCIIToUTF16("number"), | 1235 field.form_control_type = ASCIIToUTF16("number"); |
1439 0, | 1236 form.fields.push_back(field); |
1440 false)); | |
1441 possible_field_types.push_back(FieldTypeSet()); | 1237 possible_field_types.push_back(FieldTypeSet()); |
1442 possible_field_types.back().insert(PHONE_HOME_WHOLE_NUMBER); | 1238 possible_field_types.back().insert(PHONE_HOME_WHOLE_NUMBER); |
1443 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Country"), | 1239 |
1444 ASCIIToUTF16("country"), | 1240 field.label = ASCIIToUTF16("Country"); |
1445 string16(), | 1241 field.name = ASCIIToUTF16("country"); |
1446 ASCIIToUTF16("select-one"), | 1242 field.form_control_type = ASCIIToUTF16("select-one"); |
1447 0, | 1243 form.fields.push_back(field); |
1448 false)); | |
1449 possible_field_types.push_back(FieldTypeSet()); | 1244 possible_field_types.push_back(FieldTypeSet()); |
1450 possible_field_types.back().insert(ADDRESS_HOME_COUNTRY); | 1245 possible_field_types.back().insert(ADDRESS_HOME_COUNTRY); |
1451 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Fax"), | 1246 |
1452 ASCIIToUTF16("fax"), | 1247 field.label = ASCIIToUTF16("Fax"); |
1453 string16(), | 1248 field.name = ASCIIToUTF16("fax"); |
1454 ASCIIToUTF16("tel"), | 1249 field.form_control_type = ASCIIToUTF16("tel"); |
1455 0, | 1250 form.fields.push_back(field); |
1456 false)); | |
1457 possible_field_types.push_back(FieldTypeSet()); | 1251 possible_field_types.push_back(FieldTypeSet()); |
1458 possible_field_types.back().insert(PHONE_FAX_WHOLE_NUMBER); | 1252 possible_field_types.back().insert(PHONE_FAX_WHOLE_NUMBER); |
1459 form_structure.reset(new FormStructure(form)); | 1253 form_structure.reset(new FormStructure(form)); |
1460 | 1254 |
1461 ASSERT_EQ(form_structure->field_count(), possible_field_types.size()); | 1255 ASSERT_EQ(form_structure->field_count(), possible_field_types.size()); |
1462 for (size_t i = 0; i < form_structure->field_count(); ++i) | 1256 for (size_t i = 0; i < form_structure->field_count(); ++i) |
1463 form_structure->set_possible_types(i, possible_field_types[i]); | 1257 form_structure->set_possible_types(i, possible_field_types[i]); |
1464 | 1258 |
1465 FieldTypeSet available_field_types; | 1259 FieldTypeSet available_field_types; |
1466 available_field_types.insert(NAME_FIRST); | 1260 available_field_types.insert(NAME_FIRST); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1499 "<field signature=\"3494530716\" autofilltype=\"5\"/>" | 1293 "<field signature=\"3494530716\" autofilltype=\"5\"/>" |
1500 "<field signature=\"1029417091\" autofilltype=\"9\"/>" | 1294 "<field signature=\"1029417091\" autofilltype=\"9\"/>" |
1501 "<field signature=\"466116101\" autofilltype=\"14\"/>" | 1295 "<field signature=\"466116101\" autofilltype=\"14\"/>" |
1502 "<field signature=\"2799270304\" autofilltype=\"36\"/>" | 1296 "<field signature=\"2799270304\" autofilltype=\"36\"/>" |
1503 "<field signature=\"1876771436\" autofilltype=\"24\"/>" | 1297 "<field signature=\"1876771436\" autofilltype=\"24\"/>" |
1504 "</autofillupload>", | 1298 "</autofillupload>", |
1505 encoded_xml); | 1299 encoded_xml); |
1506 | 1300 |
1507 // Add 2 address fields - this should be still a valid form. | 1301 // Add 2 address fields - this should be still a valid form. |
1508 for (size_t i = 0; i < 2; ++i) { | 1302 for (size_t i = 0; i < 2; ++i) { |
1509 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Address"), | 1303 field.label = ASCIIToUTF16("Address"); |
1510 ASCIIToUTF16("address"), | 1304 field.name = ASCIIToUTF16("address"); |
1511 string16(), | 1305 field.form_control_type = ASCIIToUTF16("text"); |
1512 ASCIIToUTF16("text"), | 1306 form.fields.push_back(field); |
1513 0, | |
1514 false)); | |
1515 possible_field_types.push_back(FieldTypeSet()); | 1307 possible_field_types.push_back(FieldTypeSet()); |
1516 possible_field_types.back().insert(ADDRESS_HOME_LINE1); | 1308 possible_field_types.back().insert(ADDRESS_HOME_LINE1); |
1517 possible_field_types.back().insert(ADDRESS_HOME_LINE2); | 1309 possible_field_types.back().insert(ADDRESS_HOME_LINE2); |
1518 possible_field_types.back().insert(ADDRESS_BILLING_LINE1); | 1310 possible_field_types.back().insert(ADDRESS_BILLING_LINE1); |
1519 possible_field_types.back().insert(ADDRESS_BILLING_LINE2); | 1311 possible_field_types.back().insert(ADDRESS_BILLING_LINE2); |
1520 } | 1312 } |
1521 | 1313 |
1522 form_structure.reset(new FormStructure(form)); | 1314 form_structure.reset(new FormStructure(form)); |
1523 ASSERT_EQ(form_structure->field_count(), possible_field_types.size()); | 1315 ASSERT_EQ(form_structure->field_count(), possible_field_types.size()); |
1524 for (size_t i = 0; i < form_structure->field_count(); ++i) | 1316 for (size_t i = 0; i < form_structure->field_count(); ++i) |
(...skipping 17 matching lines...) Expand all Loading... |
1542 "<field signature=\"509334676\" autofilltype=\"38\"/>" | 1334 "<field signature=\"509334676\" autofilltype=\"38\"/>" |
1543 "<field signature=\"509334676\" autofilltype=\"30\"/>" | 1335 "<field signature=\"509334676\" autofilltype=\"30\"/>" |
1544 "<field signature=\"509334676\" autofilltype=\"31\"/>" | 1336 "<field signature=\"509334676\" autofilltype=\"31\"/>" |
1545 "<field signature=\"509334676\" autofilltype=\"37\"/>" | 1337 "<field signature=\"509334676\" autofilltype=\"37\"/>" |
1546 "<field signature=\"509334676\" autofilltype=\"38\"/>" | 1338 "<field signature=\"509334676\" autofilltype=\"38\"/>" |
1547 "</autofillupload>", | 1339 "</autofillupload>", |
1548 encoded_xml); | 1340 encoded_xml); |
1549 | 1341 |
1550 // Add 50 address fields - now the form is invalid, as it has too many fields. | 1342 // Add 50 address fields - now the form is invalid, as it has too many fields. |
1551 for (size_t i = 0; i < 50; ++i) { | 1343 for (size_t i = 0; i < 50; ++i) { |
1552 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Address"), | 1344 field.label = ASCIIToUTF16("Address"); |
1553 ASCIIToUTF16("address"), | 1345 field.name = ASCIIToUTF16("address"); |
1554 string16(), | 1346 field.form_control_type = ASCIIToUTF16("text"); |
1555 ASCIIToUTF16("text"), | 1347 form.fields.push_back(field); |
1556 0, | |
1557 false)); | |
1558 possible_field_types.push_back(FieldTypeSet()); | 1348 possible_field_types.push_back(FieldTypeSet()); |
1559 possible_field_types.back().insert(ADDRESS_HOME_LINE1); | 1349 possible_field_types.back().insert(ADDRESS_HOME_LINE1); |
1560 possible_field_types.back().insert(ADDRESS_HOME_LINE2); | 1350 possible_field_types.back().insert(ADDRESS_HOME_LINE2); |
1561 possible_field_types.back().insert(ADDRESS_BILLING_LINE1); | 1351 possible_field_types.back().insert(ADDRESS_BILLING_LINE1); |
1562 possible_field_types.back().insert(ADDRESS_BILLING_LINE2); | 1352 possible_field_types.back().insert(ADDRESS_BILLING_LINE2); |
1563 } | 1353 } |
1564 form_structure.reset(new FormStructure(form)); | 1354 form_structure.reset(new FormStructure(form)); |
1565 ASSERT_EQ(form_structure->field_count(), possible_field_types.size()); | 1355 ASSERT_EQ(form_structure->field_count(), possible_field_types.size()); |
1566 for (size_t i = 0; i < form_structure->field_count(); ++i) | 1356 for (size_t i = 0; i < form_structure->field_count(); ++i) |
1567 form_structure->set_possible_types(i, possible_field_types[i]); | 1357 form_structure->set_possible_types(i, possible_field_types[i]); |
1568 EXPECT_FALSE(form_structure->EncodeUploadRequest(available_field_types, false, | 1358 EXPECT_FALSE(form_structure->EncodeUploadRequest(available_field_types, false, |
1569 &encoded_xml)); | 1359 &encoded_xml)); |
1570 } | 1360 } |
1571 | 1361 |
1572 // Check that we compute the "datapresent" string correctly for the given | 1362 // Check that we compute the "datapresent" string correctly for the given |
1573 // |available_types|. | 1363 // |available_types|. |
1574 TEST(FormStructureTest, CheckDataPresence) { | 1364 TEST(FormStructureTest, CheckDataPresence) { |
1575 FormData form; | 1365 FormData form; |
1576 form.method = ASCIIToUTF16("post"); | 1366 form.method = ASCIIToUTF16("post"); |
1577 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("First Name"), | 1367 |
1578 ASCIIToUTF16("first"), | 1368 FormField field; |
1579 string16(), | 1369 field.form_control_type = ASCIIToUTF16("text"); |
1580 ASCIIToUTF16("text"), | 1370 |
1581 0, | 1371 field.label = ASCIIToUTF16("First Name"); |
1582 false)); | 1372 field.name = ASCIIToUTF16("first"); |
1583 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Last Name"), | 1373 form.fields.push_back(field); |
1584 ASCIIToUTF16("last"), | 1374 |
1585 string16(), | 1375 field.label = ASCIIToUTF16("Last Name"); |
1586 ASCIIToUTF16("text"), | 1376 field.name = ASCIIToUTF16("last"); |
1587 0, | 1377 form.fields.push_back(field); |
1588 false)); | 1378 |
1589 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("email"), | 1379 field.label = ASCIIToUTF16("Email"); |
1590 ASCIIToUTF16("email"), | 1380 field.name = ASCIIToUTF16("email"); |
1591 string16(), | 1381 form.fields.push_back(field); |
1592 ASCIIToUTF16("text"), | |
1593 0, | |
1594 false)); | |
1595 | 1382 |
1596 FormStructure form_structure(form); | 1383 FormStructure form_structure(form); |
1597 | 1384 |
1598 FieldTypeSet unknown_type; | 1385 FieldTypeSet unknown_type; |
1599 unknown_type.insert(UNKNOWN_TYPE); | 1386 unknown_type.insert(UNKNOWN_TYPE); |
1600 for (size_t i = 0; i < form_structure.field_count(); ++i) | 1387 for (size_t i = 0; i < form_structure.field_count(); ++i) |
1601 form_structure.set_possible_types(i, unknown_type); | 1388 form_structure.set_possible_types(i, unknown_type); |
1602 | 1389 |
1603 // No available types. | 1390 // No available types. |
1604 // datapresent should be "" == trimmmed(0x0000000000000000) == | 1391 // datapresent should be "" == trimmmed(0x0000000000000000) == |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1844 available_field_types.insert(ADDRESS_HOME_LINE2); | 1631 available_field_types.insert(ADDRESS_HOME_LINE2); |
1845 available_field_types.insert(ADDRESS_HOME_CITY); | 1632 available_field_types.insert(ADDRESS_HOME_CITY); |
1846 available_field_types.insert(ADDRESS_HOME_STATE); | 1633 available_field_types.insert(ADDRESS_HOME_STATE); |
1847 available_field_types.insert(COMPANY_NAME); | 1634 available_field_types.insert(COMPANY_NAME); |
1848 | 1635 |
1849 // Check that multiple types for the field are processed correctly. | 1636 // Check that multiple types for the field are processed correctly. |
1850 scoped_ptr<FormStructure> form_structure; | 1637 scoped_ptr<FormStructure> form_structure; |
1851 std::vector<FieldTypeSet> possible_field_types; | 1638 std::vector<FieldTypeSet> possible_field_types; |
1852 FormData form; | 1639 FormData form; |
1853 form.method = ASCIIToUTF16("post"); | 1640 form.method = ASCIIToUTF16("post"); |
1854 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("email"), | 1641 |
1855 ASCIIToUTF16("email"), | 1642 FormField field; |
1856 string16(), | 1643 field.form_control_type = ASCIIToUTF16("text"); |
1857 ASCIIToUTF16("text"), | 1644 |
1858 0, | 1645 field.label = ASCIIToUTF16("email"); |
1859 false)); | 1646 field.name = ASCIIToUTF16("email"); |
| 1647 form.fields.push_back(field); |
1860 possible_field_types.push_back(FieldTypeSet()); | 1648 possible_field_types.push_back(FieldTypeSet()); |
1861 possible_field_types.back().insert(EMAIL_ADDRESS); | 1649 possible_field_types.back().insert(EMAIL_ADDRESS); |
1862 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("First Name"), | 1650 |
1863 ASCIIToUTF16("first"), | 1651 field.label = ASCIIToUTF16("First Name"); |
1864 string16(), | 1652 field.name = ASCIIToUTF16("first"); |
1865 ASCIIToUTF16("text"), | 1653 form.fields.push_back(field); |
1866 0, | |
1867 false)); | |
1868 possible_field_types.push_back(FieldTypeSet()); | 1654 possible_field_types.push_back(FieldTypeSet()); |
1869 possible_field_types.back().insert(NAME_FIRST); | 1655 possible_field_types.back().insert(NAME_FIRST); |
1870 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Last Name"), | 1656 |
1871 ASCIIToUTF16("last"), | 1657 field.label = ASCIIToUTF16("Last Name"); |
1872 string16(), | 1658 field.name = ASCIIToUTF16("last"); |
1873 ASCIIToUTF16("text"), | 1659 form.fields.push_back(field); |
1874 0, | |
1875 false)); | |
1876 possible_field_types.push_back(FieldTypeSet()); | 1660 possible_field_types.push_back(FieldTypeSet()); |
1877 possible_field_types.back().insert(NAME_LAST); | 1661 possible_field_types.back().insert(NAME_LAST); |
1878 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Address"), | 1662 |
1879 ASCIIToUTF16("address"), | 1663 field.label = ASCIIToUTF16("Address"); |
1880 string16(), | 1664 field.name = ASCIIToUTF16("address"); |
1881 ASCIIToUTF16("text"), | 1665 form.fields.push_back(field); |
1882 0, | |
1883 false)); | |
1884 possible_field_types.push_back(FieldTypeSet()); | 1666 possible_field_types.push_back(FieldTypeSet()); |
1885 possible_field_types.back().insert(ADDRESS_HOME_LINE1); | 1667 possible_field_types.back().insert(ADDRESS_HOME_LINE1); |
| 1668 |
1886 form_structure.reset(new FormStructure(form)); | 1669 form_structure.reset(new FormStructure(form)); |
1887 | 1670 |
1888 for (size_t i = 0; i < form_structure->field_count(); ++i) | 1671 for (size_t i = 0; i < form_structure->field_count(); ++i) |
1889 form_structure->set_possible_types(i, possible_field_types[i]); | 1672 form_structure->set_possible_types(i, possible_field_types[i]); |
1890 std::string encoded_xml; | 1673 std::string encoded_xml; |
1891 | 1674 |
1892 // Now we matched both fields singularly. | 1675 // Now we matched both fields singularly. |
1893 EXPECT_TRUE(form_structure->EncodeUploadRequest(available_field_types, false, | 1676 EXPECT_TRUE(form_structure->EncodeUploadRequest(available_field_types, false, |
1894 &encoded_xml)); | 1677 &encoded_xml)); |
1895 EXPECT_EQ("<\?xml version=\"1.0\" encoding=\"UTF-8\"\?>" | 1678 EXPECT_EQ("<\?xml version=\"1.0\" encoding=\"UTF-8\"\?>" |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1956 "<field signature=\"509334676\" autofilltype=\"60\"/>" | 1739 "<field signature=\"509334676\" autofilltype=\"60\"/>" |
1957 "</autofillupload>", | 1740 "</autofillupload>", |
1958 encoded_xml); | 1741 encoded_xml); |
1959 } | 1742 } |
1960 | 1743 |
1961 TEST(FormStructureTest, CheckFormSignature) { | 1744 TEST(FormStructureTest, CheckFormSignature) { |
1962 // Check that form signature is created correctly. | 1745 // Check that form signature is created correctly. |
1963 scoped_ptr<FormStructure> form_structure; | 1746 scoped_ptr<FormStructure> form_structure; |
1964 FormData form; | 1747 FormData form; |
1965 form.method = ASCIIToUTF16("post"); | 1748 form.method = ASCIIToUTF16("post"); |
1966 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("email"), | 1749 |
1967 ASCIIToUTF16("email"), | 1750 FormField field; |
1968 string16(), | 1751 field.form_control_type = ASCIIToUTF16("text"); |
1969 ASCIIToUTF16("text"), | 1752 |
1970 0, | 1753 field.label = ASCIIToUTF16("email"); |
1971 false)); | 1754 field.name = ASCIIToUTF16("email"); |
1972 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("First Name"), | 1755 form.fields.push_back(field); |
1973 ASCIIToUTF16("first"), | 1756 |
1974 string16(), | 1757 field.label = ASCIIToUTF16("First Name"); |
1975 ASCIIToUTF16("text"), | 1758 field.name = ASCIIToUTF16("first"); |
1976 0, | 1759 form.fields.push_back(field); |
1977 false)); | 1760 |
1978 form_structure.reset(new FormStructure(form)); | 1761 form_structure.reset(new FormStructure(form)); |
1979 | 1762 |
1980 EXPECT_EQ(FormStructureTest::Hash64Bit( | 1763 EXPECT_EQ(FormStructureTest::Hash64Bit( |
1981 std::string("://&&email&first")), | 1764 std::string("://&&email&first")), |
1982 form_structure->FormSignature()); | 1765 form_structure->FormSignature()); |
1983 | 1766 |
1984 form.origin = GURL(std::string("http://www.facebook.com")); | 1767 form.origin = GURL(std::string("http://www.facebook.com")); |
1985 form_structure.reset(new FormStructure(form)); | 1768 form_structure.reset(new FormStructure(form)); |
1986 EXPECT_EQ(FormStructureTest::Hash64Bit( | 1769 EXPECT_EQ(FormStructureTest::Hash64Bit( |
1987 std::string("http://www.facebook.com&&email&first")), | 1770 std::string("http://www.facebook.com&&email&first")), |
1988 form_structure->FormSignature()); | 1771 form_structure->FormSignature()); |
1989 | 1772 |
1990 form.action = GURL(std::string("https://login.facebook.com/path")); | 1773 form.action = GURL(std::string("https://login.facebook.com/path")); |
1991 form_structure.reset(new FormStructure(form)); | 1774 form_structure.reset(new FormStructure(form)); |
1992 EXPECT_EQ(FormStructureTest::Hash64Bit( | 1775 EXPECT_EQ(FormStructureTest::Hash64Bit( |
1993 std::string("https://login.facebook.com&&email&first")), | 1776 std::string("https://login.facebook.com&&email&first")), |
1994 form_structure->FormSignature()); | 1777 form_structure->FormSignature()); |
1995 | 1778 |
1996 form.name = ASCIIToUTF16("login_form"); | 1779 form.name = ASCIIToUTF16("login_form"); |
1997 form_structure.reset(new FormStructure(form)); | 1780 form_structure.reset(new FormStructure(form)); |
1998 EXPECT_EQ(FormStructureTest::Hash64Bit( | 1781 EXPECT_EQ(FormStructureTest::Hash64Bit( |
1999 std::string("https://login.facebook.com&login_form&email&first")), | 1782 std::string("https://login.facebook.com&login_form&email&first")), |
2000 form_structure->FormSignature()); | 1783 form_structure->FormSignature()); |
2001 } | 1784 } |
2002 | 1785 |
2003 } // namespace | 1786 } // namespace |
OLD | NEW |