| 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 "chrome/common/form_data.h" |
| 10 #include "chrome/common/form_field_data.h" |
| 9 #include "googleurl/src/gurl.h" | 11 #include "googleurl/src/gurl.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputElement.h" | 13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputElement.h" |
| 12 #include "webkit/forms/form_data.h" | |
| 13 #include "webkit/forms/form_field.h" | |
| 14 | 14 |
| 15 using webkit::forms::FormData; | |
| 16 using webkit::forms::FormField; | |
| 17 using WebKit::WebInputElement; | 15 using WebKit::WebInputElement; |
| 18 | 16 |
| 19 namespace webkit { | 17 namespace content { |
| 20 namespace forms { | |
| 21 | 18 |
| 22 std::ostream& operator<<(std::ostream& os, const FormData& form) { | 19 std::ostream& operator<<(std::ostream& os, const FormData& form) { |
| 23 os << UTF16ToUTF8(form.name) | 20 os << UTF16ToUTF8(form.name) |
| 24 << " " | 21 << " " |
| 25 << UTF16ToUTF8(form.method) | 22 << UTF16ToUTF8(form.method) |
| 26 << " " | 23 << " " |
| 27 << form.origin.spec() | 24 << form.origin.spec() |
| 28 << " " | 25 << " " |
| 29 << form.action.spec() | 26 << form.action.spec() |
| 30 << " "; | 27 << " "; |
| 31 | 28 |
| 32 for (std::vector<webkit::forms::FormField>::const_iterator iter = | 29 for (std::vector<FormFieldData>::const_iterator iter = |
| 33 form.fields.begin(); | 30 form.fields.begin(); |
| 34 iter != form.fields.end(); ++iter) { | 31 iter != form.fields.end(); ++iter) { |
| 35 os << *iter | 32 os << *iter |
| 36 << " "; | 33 << " "; |
| 37 } | 34 } |
| 38 | 35 |
| 39 return os; | 36 return os; |
| 40 } | 37 } |
| 41 | 38 |
| 42 } // namespace forms | 39 } // namespace content |
| 43 } // namespace webkit_glue | |
| 44 | 40 |
| 45 class FormStructureTest { | 41 class FormStructureTest { |
| 46 public: | 42 public: |
| 47 static std::string Hash64Bit(const std::string& str) { | 43 static std::string Hash64Bit(const std::string& str) { |
| 48 return FormStructure::Hash64Bit(str); | 44 return FormStructure::Hash64Bit(str); |
| 49 } | 45 } |
| 50 }; | 46 }; |
| 51 | 47 |
| 52 TEST(FormStructureTest, FieldCount) { | 48 TEST(FormStructureTest, FieldCount) { |
| 53 FormData form; | 49 FormData form; |
| 54 form.method = ASCIIToUTF16("post"); | 50 form.method = ASCIIToUTF16("post"); |
| 55 | 51 |
| 56 FormField field; | 52 FormFieldData field; |
| 57 field.label = ASCIIToUTF16("username"); | 53 field.label = ASCIIToUTF16("username"); |
| 58 field.name = ASCIIToUTF16("username"); | 54 field.name = ASCIIToUTF16("username"); |
| 59 field.form_control_type = ASCIIToUTF16("text"); | 55 field.form_control_type = ASCIIToUTF16("text"); |
| 60 form.fields.push_back(field); | 56 form.fields.push_back(field); |
| 61 | 57 |
| 62 field.label = ASCIIToUTF16("password"); | 58 field.label = ASCIIToUTF16("password"); |
| 63 field.name = ASCIIToUTF16("password"); | 59 field.name = ASCIIToUTF16("password"); |
| 64 field.form_control_type = ASCIIToUTF16("password"); | 60 field.form_control_type = ASCIIToUTF16("password"); |
| 65 form.fields.push_back(field); | 61 form.fields.push_back(field); |
| 66 | 62 |
| 67 field.label = string16(); | 63 field.label = string16(); |
| 68 field.name = ASCIIToUTF16("Submit"); | 64 field.name = ASCIIToUTF16("Submit"); |
| 69 field.form_control_type = ASCIIToUTF16("submit"); | 65 field.form_control_type = ASCIIToUTF16("submit"); |
| 70 form.fields.push_back(field); | 66 form.fields.push_back(field); |
| 71 | 67 |
| 72 FormStructure form_structure(form); | 68 FormStructure form_structure(form); |
| 73 | 69 |
| 74 // All fields are counted. | 70 // All fields are counted. |
| 75 EXPECT_EQ(3U, form_structure.field_count()); | 71 EXPECT_EQ(3U, form_structure.field_count()); |
| 76 } | 72 } |
| 77 | 73 |
| 78 TEST(FormStructureTest, AutofillCount) { | 74 TEST(FormStructureTest, AutofillCount) { |
| 79 FormData form; | 75 FormData form; |
| 80 form.method = ASCIIToUTF16("post"); | 76 form.method = ASCIIToUTF16("post"); |
| 81 | 77 |
| 82 FormField field; | 78 FormFieldData field; |
| 83 field.label = ASCIIToUTF16("username"); | 79 field.label = ASCIIToUTF16("username"); |
| 84 field.name = ASCIIToUTF16("username"); | 80 field.name = ASCIIToUTF16("username"); |
| 85 field.form_control_type = ASCIIToUTF16("text"); | 81 field.form_control_type = ASCIIToUTF16("text"); |
| 86 form.fields.push_back(field); | 82 form.fields.push_back(field); |
| 87 | 83 |
| 88 field.label = ASCIIToUTF16("password"); | 84 field.label = ASCIIToUTF16("password"); |
| 89 field.name = ASCIIToUTF16("password"); | 85 field.name = ASCIIToUTF16("password"); |
| 90 field.form_control_type = ASCIIToUTF16("password"); | 86 field.form_control_type = ASCIIToUTF16("password"); |
| 91 form.fields.push_back(field); | 87 form.fields.push_back(field); |
| 92 | 88 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 116 EXPECT_EQ(form.origin, form_structure.source_url()); | 112 EXPECT_EQ(form.origin, form_structure.source_url()); |
| 117 } | 113 } |
| 118 | 114 |
| 119 TEST(FormStructureTest, IsAutofillable) { | 115 TEST(FormStructureTest, IsAutofillable) { |
| 120 scoped_ptr<FormStructure> form_structure; | 116 scoped_ptr<FormStructure> form_structure; |
| 121 FormData form; | 117 FormData form; |
| 122 | 118 |
| 123 // We need at least three text fields to be auto-fillable. | 119 // We need at least three text fields to be auto-fillable. |
| 124 form.method = ASCIIToUTF16("post"); | 120 form.method = ASCIIToUTF16("post"); |
| 125 | 121 |
| 126 FormField field; | 122 FormFieldData field; |
| 127 field.label = ASCIIToUTF16("username"); | 123 field.label = ASCIIToUTF16("username"); |
| 128 field.name = ASCIIToUTF16("username"); | 124 field.name = ASCIIToUTF16("username"); |
| 129 field.form_control_type = ASCIIToUTF16("text"); | 125 field.form_control_type = ASCIIToUTF16("text"); |
| 130 form.fields.push_back(field); | 126 form.fields.push_back(field); |
| 131 | 127 |
| 132 field.label = ASCIIToUTF16("password"); | 128 field.label = ASCIIToUTF16("password"); |
| 133 field.name = ASCIIToUTF16("password"); | 129 field.name = ASCIIToUTF16("password"); |
| 134 field.form_control_type = ASCIIToUTF16("password"); | 130 field.form_control_type = ASCIIToUTF16("password"); |
| 135 form.fields.push_back(field); | 131 form.fields.push_back(field); |
| 136 | 132 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 EXPECT_TRUE(form_structure->IsAutofillable(true)); | 186 EXPECT_TRUE(form_structure->IsAutofillable(true)); |
| 191 } | 187 } |
| 192 | 188 |
| 193 TEST(FormStructureTest, ShouldBeParsed) { | 189 TEST(FormStructureTest, ShouldBeParsed) { |
| 194 scoped_ptr<FormStructure> form_structure; | 190 scoped_ptr<FormStructure> form_structure; |
| 195 FormData form; | 191 FormData form; |
| 196 | 192 |
| 197 // We need at least three text fields to be parseable. | 193 // We need at least three text fields to be parseable. |
| 198 form.method = ASCIIToUTF16("post"); | 194 form.method = ASCIIToUTF16("post"); |
| 199 | 195 |
| 200 FormField field; | 196 FormFieldData field; |
| 201 field.label = ASCIIToUTF16("username"); | 197 field.label = ASCIIToUTF16("username"); |
| 202 field.name = ASCIIToUTF16("username"); | 198 field.name = ASCIIToUTF16("username"); |
| 203 field.form_control_type = ASCIIToUTF16("text"); | 199 field.form_control_type = ASCIIToUTF16("text"); |
| 204 form.fields.push_back(field); | 200 form.fields.push_back(field); |
| 205 | 201 |
| 206 form_structure.reset(new FormStructure(form)); | 202 form_structure.reset(new FormStructure(form)); |
| 207 EXPECT_FALSE(form_structure->ShouldBeParsed(true)); | 203 EXPECT_FALSE(form_structure->ShouldBeParsed(true)); |
| 208 | 204 |
| 209 // We now have three text fields, though only two are auto-fillable. | 205 // We now have three text fields, though only two are auto-fillable. |
| 210 field.label = ASCIIToUTF16("First Name"); | 206 field.label = ASCIIToUTF16("First Name"); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 form.fields[0].form_control_type = ASCIIToUTF16("select-one"); | 259 form.fields[0].form_control_type = ASCIIToUTF16("select-one"); |
| 264 form_structure.reset(new FormStructure(form)); | 260 form_structure.reset(new FormStructure(form)); |
| 265 EXPECT_FALSE(form_structure->ShouldBeParsed(true)); | 261 EXPECT_FALSE(form_structure->ShouldBeParsed(true)); |
| 266 } | 262 } |
| 267 | 263 |
| 268 TEST(FormStructureTest, HeuristicsContactInfo) { | 264 TEST(FormStructureTest, HeuristicsContactInfo) { |
| 269 scoped_ptr<FormStructure> form_structure; | 265 scoped_ptr<FormStructure> form_structure; |
| 270 FormData form; | 266 FormData form; |
| 271 form.method = ASCIIToUTF16("post"); | 267 form.method = ASCIIToUTF16("post"); |
| 272 | 268 |
| 273 FormField field; | 269 FormFieldData field; |
| 274 field.form_control_type = ASCIIToUTF16("text"); | 270 field.form_control_type = ASCIIToUTF16("text"); |
| 275 | 271 |
| 276 field.label = ASCIIToUTF16("First Name"); | 272 field.label = ASCIIToUTF16("First Name"); |
| 277 field.name = ASCIIToUTF16("firstname"); | 273 field.name = ASCIIToUTF16("firstname"); |
| 278 form.fields.push_back(field); | 274 form.fields.push_back(field); |
| 279 | 275 |
| 280 field.label = ASCIIToUTF16("Last Name"); | 276 field.label = ASCIIToUTF16("Last Name"); |
| 281 field.name = ASCIIToUTF16("lastname"); | 277 field.name = ASCIIToUTF16("lastname"); |
| 282 form.fields.push_back(field); | 278 form.fields.push_back(field); |
| 283 | 279 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 // Submit. | 328 // Submit. |
| 333 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(7)->heuristic_type()); | 329 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(7)->heuristic_type()); |
| 334 } | 330 } |
| 335 | 331 |
| 336 // Verify that we can correctly process the |autocompletetype| attribute. | 332 // Verify that we can correctly process the |autocompletetype| attribute. |
| 337 TEST(FormStructureTest, HeuristicsAutocompletetype) { | 333 TEST(FormStructureTest, HeuristicsAutocompletetype) { |
| 338 scoped_ptr<FormStructure> form_structure; | 334 scoped_ptr<FormStructure> form_structure; |
| 339 FormData form; | 335 FormData form; |
| 340 form.method = ASCIIToUTF16("post"); | 336 form.method = ASCIIToUTF16("post"); |
| 341 | 337 |
| 342 FormField field; | 338 FormFieldData field; |
| 343 field.form_control_type = ASCIIToUTF16("text"); | 339 field.form_control_type = ASCIIToUTF16("text"); |
| 344 | 340 |
| 345 field.label = string16(); | 341 field.label = string16(); |
| 346 field.name = ASCIIToUTF16("field1"); | 342 field.name = ASCIIToUTF16("field1"); |
| 347 field.autocomplete_type = ASCIIToUTF16("given-name"); | 343 field.autocomplete_type = ASCIIToUTF16("given-name"); |
| 348 form.fields.push_back(field); | 344 form.fields.push_back(field); |
| 349 | 345 |
| 350 field.label = string16(); | 346 field.label = string16(); |
| 351 field.name = ASCIIToUTF16("field2"); | 347 field.name = ASCIIToUTF16("field2"); |
| 352 field.autocomplete_type = ASCIIToUTF16("surname"); | 348 field.autocomplete_type = ASCIIToUTF16("surname"); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 370 EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(2)->heuristic_type()); | 366 EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(2)->heuristic_type()); |
| 371 } | 367 } |
| 372 | 368 |
| 373 // Verify that we can correctly process the |autocompletetype| attribute for | 369 // Verify that we can correctly process the |autocompletetype| attribute for |
| 374 // phone number types (especially phone prefixes and suffixes). | 370 // phone number types (especially phone prefixes and suffixes). |
| 375 TEST(FormStructureTest, HeuristicsAutocompletetypePhones) { | 371 TEST(FormStructureTest, HeuristicsAutocompletetypePhones) { |
| 376 scoped_ptr<FormStructure> form_structure; | 372 scoped_ptr<FormStructure> form_structure; |
| 377 FormData form; | 373 FormData form; |
| 378 form.method = ASCIIToUTF16("post"); | 374 form.method = ASCIIToUTF16("post"); |
| 379 | 375 |
| 380 FormField field; | 376 FormFieldData field; |
| 381 field.form_control_type = ASCIIToUTF16("text"); | 377 field.form_control_type = ASCIIToUTF16("text"); |
| 382 | 378 |
| 383 field.label = string16(); | 379 field.label = string16(); |
| 384 field.name = ASCIIToUTF16("field1"); | 380 field.name = ASCIIToUTF16("field1"); |
| 385 field.autocomplete_type = ASCIIToUTF16("phone-local"); | 381 field.autocomplete_type = ASCIIToUTF16("phone-local"); |
| 386 form.fields.push_back(field); | 382 form.fields.push_back(field); |
| 387 | 383 |
| 388 field.label = string16(); | 384 field.label = string16(); |
| 389 field.name = ASCIIToUTF16("field2"); | 385 field.name = ASCIIToUTF16("field2"); |
| 390 field.autocomplete_type = ASCIIToUTF16("phone-local-prefix"); | 386 field.autocomplete_type = ASCIIToUTF16("phone-local-prefix"); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 414 } | 410 } |
| 415 | 411 |
| 416 // If at least one field includes the |autocompletetype| attribute, we should | 412 // If at least one field includes the |autocompletetype| attribute, we should |
| 417 // not try to apply any other heuristics. | 413 // not try to apply any other heuristics. |
| 418 TEST(FormStructureTest, AutocompletetypeOverridesOtherHeuristics) { | 414 TEST(FormStructureTest, AutocompletetypeOverridesOtherHeuristics) { |
| 419 scoped_ptr<FormStructure> form_structure; | 415 scoped_ptr<FormStructure> form_structure; |
| 420 FormData form; | 416 FormData form; |
| 421 form.method = ASCIIToUTF16("post"); | 417 form.method = ASCIIToUTF16("post"); |
| 422 | 418 |
| 423 // Start with a regular contact form. | 419 // Start with a regular contact form. |
| 424 FormField field; | 420 FormFieldData field; |
| 425 field.form_control_type = ASCIIToUTF16("text"); | 421 field.form_control_type = ASCIIToUTF16("text"); |
| 426 | 422 |
| 427 field.label = ASCIIToUTF16("First Name"); | 423 field.label = ASCIIToUTF16("First Name"); |
| 428 field.name = ASCIIToUTF16("firstname"); | 424 field.name = ASCIIToUTF16("firstname"); |
| 429 form.fields.push_back(field); | 425 form.fields.push_back(field); |
| 430 | 426 |
| 431 field.label = ASCIIToUTF16("Last Name"); | 427 field.label = ASCIIToUTF16("Last Name"); |
| 432 field.name = ASCIIToUTF16("lastname"); | 428 field.name = ASCIIToUTF16("lastname"); |
| 433 form.fields.push_back(field); | 429 form.fields.push_back(field); |
| 434 | 430 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 463 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(2)->heuristic_type()); | 459 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(2)->heuristic_type()); |
| 464 } | 460 } |
| 465 | 461 |
| 466 // Verify that we can correctly process sections listed in the |autocomplete| | 462 // Verify that we can correctly process sections listed in the |autocomplete| |
| 467 // attribute. | 463 // attribute. |
| 468 TEST(FormStructureTest, HeuristicsAutocompletetypeWithSections) { | 464 TEST(FormStructureTest, HeuristicsAutocompletetypeWithSections) { |
| 469 scoped_ptr<FormStructure> form_structure; | 465 scoped_ptr<FormStructure> form_structure; |
| 470 FormData form; | 466 FormData form; |
| 471 form.method = ASCIIToUTF16("post"); | 467 form.method = ASCIIToUTF16("post"); |
| 472 | 468 |
| 473 FormField field; | 469 FormFieldData field; |
| 474 field.form_control_type = ASCIIToUTF16("text"); | 470 field.form_control_type = ASCIIToUTF16("text"); |
| 475 | 471 |
| 476 // We expect "shipping" and "billing" to be the most common sections. | 472 // We expect "shipping" and "billing" to be the most common sections. |
| 477 field.label = string16(); | 473 field.label = string16(); |
| 478 field.name = ASCIIToUTF16("field1"); | 474 field.name = ASCIIToUTF16("field1"); |
| 479 field.autocomplete_type = ASCIIToUTF16("section-shipping given-name"); | 475 field.autocomplete_type = ASCIIToUTF16("section-shipping given-name"); |
| 480 form.fields.push_back(field); | 476 form.fields.push_back(field); |
| 481 | 477 |
| 482 // Some field will have no section specified. These fall into the default | 478 // Some field will have no section specified. These fall into the default |
| 483 // section, with an empty name. | 479 // section, with an empty name. |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 EXPECT_EQ(ASCIIToUTF16("shipping-cc"), form_structure->field(5)->section()); | 531 EXPECT_EQ(ASCIIToUTF16("shipping-cc"), form_structure->field(5)->section()); |
| 536 } | 532 } |
| 537 | 533 |
| 538 // Verify that we can correctly process fallback types listed in the | 534 // Verify that we can correctly process fallback types listed in the |
| 539 // |autocompletetype| attribute. | 535 // |autocompletetype| attribute. |
| 540 TEST(FormStructureTest, HeuristicsAutocompletetypeWithFallbacks) { | 536 TEST(FormStructureTest, HeuristicsAutocompletetypeWithFallbacks) { |
| 541 scoped_ptr<FormStructure> form_structure; | 537 scoped_ptr<FormStructure> form_structure; |
| 542 FormData form; | 538 FormData form; |
| 543 form.method = ASCIIToUTF16("post"); | 539 form.method = ASCIIToUTF16("post"); |
| 544 | 540 |
| 545 FormField field; | 541 FormFieldData field; |
| 546 field.form_control_type = ASCIIToUTF16("text"); | 542 field.form_control_type = ASCIIToUTF16("text"); |
| 547 | 543 |
| 548 // Skip over any sections and "x"-prefixed types. | 544 // Skip over any sections and "x"-prefixed types. |
| 549 field.label = string16(); | 545 field.label = string16(); |
| 550 field.name = ASCIIToUTF16("field1"); | 546 field.name = ASCIIToUTF16("field1"); |
| 551 field.autocomplete_type = | 547 field.autocomplete_type = |
| 552 ASCIIToUTF16("section-full-name x-given-name-initial given-name"); | 548 ASCIIToUTF16("section-full-name x-given-name-initial given-name"); |
| 553 form.fields.push_back(field); | 549 form.fields.push_back(field); |
| 554 | 550 |
| 555 // Stop processing once we see a known type. | 551 // Stop processing once we see a known type. |
| (...skipping 27 matching lines...) Expand all Loading... |
| 583 form_structure->field(2)->heuristic_type()); | 579 form_structure->field(2)->heuristic_type()); |
| 584 EXPECT_EQ(ASCIIToUTF16("shipping-default"), | 580 EXPECT_EQ(ASCIIToUTF16("shipping-default"), |
| 585 form_structure->field(2)->section()); | 581 form_structure->field(2)->section()); |
| 586 } | 582 } |
| 587 | 583 |
| 588 TEST(FormStructureTest, HeuristicsSample8) { | 584 TEST(FormStructureTest, HeuristicsSample8) { |
| 589 scoped_ptr<FormStructure> form_structure; | 585 scoped_ptr<FormStructure> form_structure; |
| 590 FormData form; | 586 FormData form; |
| 591 form.method = ASCIIToUTF16("post"); | 587 form.method = ASCIIToUTF16("post"); |
| 592 | 588 |
| 593 FormField field; | 589 FormFieldData field; |
| 594 field.form_control_type = ASCIIToUTF16("text"); | 590 field.form_control_type = ASCIIToUTF16("text"); |
| 595 | 591 |
| 596 field.label = ASCIIToUTF16("Your First Name:"); | 592 field.label = ASCIIToUTF16("Your First Name:"); |
| 597 field.name = ASCIIToUTF16("bill.first"); | 593 field.name = ASCIIToUTF16("bill.first"); |
| 598 form.fields.push_back(field); | 594 form.fields.push_back(field); |
| 599 | 595 |
| 600 field.label = ASCIIToUTF16("Your Last Name:"); | 596 field.label = ASCIIToUTF16("Your Last Name:"); |
| 601 field.name = ASCIIToUTF16("bill.last"); | 597 field.name = ASCIIToUTF16("bill.last"); |
| 602 form.fields.push_back(field); | 598 form.fields.push_back(field); |
| 603 | 599 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 form_structure->field(8)->heuristic_type()); | 658 form_structure->field(8)->heuristic_type()); |
| 663 // Submit. | 659 // Submit. |
| 664 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(9)->heuristic_type()); | 660 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(9)->heuristic_type()); |
| 665 } | 661 } |
| 666 | 662 |
| 667 TEST(FormStructureTest, HeuristicsSample6) { | 663 TEST(FormStructureTest, HeuristicsSample6) { |
| 668 scoped_ptr<FormStructure> form_structure; | 664 scoped_ptr<FormStructure> form_structure; |
| 669 FormData form; | 665 FormData form; |
| 670 form.method = ASCIIToUTF16("post"); | 666 form.method = ASCIIToUTF16("post"); |
| 671 | 667 |
| 672 FormField field; | 668 FormFieldData field; |
| 673 field.form_control_type = ASCIIToUTF16("text"); | 669 field.form_control_type = ASCIIToUTF16("text"); |
| 674 | 670 |
| 675 field.label = ASCIIToUTF16("E-mail address"); | 671 field.label = ASCIIToUTF16("E-mail address"); |
| 676 field.name = ASCIIToUTF16("email"); | 672 field.name = ASCIIToUTF16("email"); |
| 677 form.fields.push_back(field); | 673 form.fields.push_back(field); |
| 678 | 674 |
| 679 field.label = ASCIIToUTF16("Full name"); | 675 field.label = ASCIIToUTF16("Full name"); |
| 680 field.name = ASCIIToUTF16("name"); | 676 field.name = ASCIIToUTF16("name"); |
| 681 form.fields.push_back(field); | 677 form.fields.push_back(field); |
| 682 | 678 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 718 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(3)->heuristic_type()); | 714 EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(3)->heuristic_type()); |
| 719 // City. | 715 // City. |
| 720 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(4)->heuristic_type()); | 716 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(4)->heuristic_type()); |
| 721 // Zip. | 717 // Zip. |
| 722 EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(5)->heuristic_type()); | 718 EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(5)->heuristic_type()); |
| 723 // Submit. | 719 // Submit. |
| 724 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(6)->heuristic_type()); | 720 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(6)->heuristic_type()); |
| 725 } | 721 } |
| 726 | 722 |
| 727 // Tests a sequence of FormFields where only labels are supplied to heuristics | 723 // Tests a sequence of FormFields where only labels are supplied to heuristics |
| 728 // for matching. This works because FormField labels are matched in the case | 724 // for matching. This works because FormFieldData labels are matched in the |
| 729 // that input element ids (or |name| fields) are missing. | 725 // case that input element ids (or |name| fields) are missing. |
| 730 TEST(FormStructureTest, HeuristicsLabelsOnly) { | 726 TEST(FormStructureTest, HeuristicsLabelsOnly) { |
| 731 scoped_ptr<FormStructure> form_structure; | 727 scoped_ptr<FormStructure> form_structure; |
| 732 FormData form; | 728 FormData form; |
| 733 form.method = ASCIIToUTF16("post"); | 729 form.method = ASCIIToUTF16("post"); |
| 734 | 730 |
| 735 FormField field; | 731 FormFieldData field; |
| 736 field.form_control_type = ASCIIToUTF16("text"); | 732 field.form_control_type = ASCIIToUTF16("text"); |
| 737 | 733 |
| 738 field.label = ASCIIToUTF16("First Name"); | 734 field.label = ASCIIToUTF16("First Name"); |
| 739 field.name = string16(); | 735 field.name = string16(); |
| 740 form.fields.push_back(field); | 736 form.fields.push_back(field); |
| 741 | 737 |
| 742 field.label = ASCIIToUTF16("Last Name"); | 738 field.label = ASCIIToUTF16("Last Name"); |
| 743 field.name = string16(); | 739 field.name = string16(); |
| 744 form.fields.push_back(field); | 740 form.fields.push_back(field); |
| 745 | 741 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 791 EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(6)->heuristic_type()); | 787 EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(6)->heuristic_type()); |
| 792 // Submit. | 788 // Submit. |
| 793 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(7)->heuristic_type()); | 789 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(7)->heuristic_type()); |
| 794 } | 790 } |
| 795 | 791 |
| 796 TEST(FormStructureTest, HeuristicsCreditCardInfo) { | 792 TEST(FormStructureTest, HeuristicsCreditCardInfo) { |
| 797 scoped_ptr<FormStructure> form_structure; | 793 scoped_ptr<FormStructure> form_structure; |
| 798 FormData form; | 794 FormData form; |
| 799 form.method = ASCIIToUTF16("post"); | 795 form.method = ASCIIToUTF16("post"); |
| 800 | 796 |
| 801 FormField field; | 797 FormFieldData field; |
| 802 field.form_control_type = ASCIIToUTF16("text"); | 798 field.form_control_type = ASCIIToUTF16("text"); |
| 803 | 799 |
| 804 field.label = ASCIIToUTF16("Name on Card"); | 800 field.label = ASCIIToUTF16("Name on Card"); |
| 805 field.name = ASCIIToUTF16("name_on_card"); | 801 field.name = ASCIIToUTF16("name_on_card"); |
| 806 form.fields.push_back(field); | 802 form.fields.push_back(field); |
| 807 | 803 |
| 808 field.label = ASCIIToUTF16("Card Number"); | 804 field.label = ASCIIToUTF16("Card Number"); |
| 809 field.name = ASCIIToUTF16("card_number"); | 805 field.name = ASCIIToUTF16("card_number"); |
| 810 form.fields.push_back(field); | 806 form.fields.push_back(field); |
| 811 | 807 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 845 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(4)->heuristic_type()); | 841 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(4)->heuristic_type()); |
| 846 // Submit. | 842 // Submit. |
| 847 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(5)->heuristic_type()); | 843 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(5)->heuristic_type()); |
| 848 } | 844 } |
| 849 | 845 |
| 850 TEST(FormStructureTest, HeuristicsCreditCardInfoWithUnknownCardField) { | 846 TEST(FormStructureTest, HeuristicsCreditCardInfoWithUnknownCardField) { |
| 851 scoped_ptr<FormStructure> form_structure; | 847 scoped_ptr<FormStructure> form_structure; |
| 852 FormData form; | 848 FormData form; |
| 853 form.method = ASCIIToUTF16("post"); | 849 form.method = ASCIIToUTF16("post"); |
| 854 | 850 |
| 855 FormField field; | 851 FormFieldData field; |
| 856 field.form_control_type = ASCIIToUTF16("text"); | 852 field.form_control_type = ASCIIToUTF16("text"); |
| 857 | 853 |
| 858 field.label = ASCIIToUTF16("Name on Card"); | 854 field.label = ASCIIToUTF16("Name on Card"); |
| 859 field.name = ASCIIToUTF16("name_on_card"); | 855 field.name = ASCIIToUTF16("name_on_card"); |
| 860 form.fields.push_back(field); | 856 form.fields.push_back(field); |
| 861 | 857 |
| 862 // This is not a field we know how to process. But we should skip over it | 858 // This is not a field we know how to process. But we should skip over it |
| 863 // and process the other fields in the card block. | 859 // and process the other fields in the card block. |
| 864 field.label = ASCIIToUTF16("Card Type"); | 860 field.label = ASCIIToUTF16("Card Type"); |
| 865 field.name = ASCIIToUTF16("card_type"); | 861 field.name = ASCIIToUTF16("card_type"); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 907 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(5)->heuristic_type()); | 903 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(5)->heuristic_type()); |
| 908 // Submit. | 904 // Submit. |
| 909 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(6)->heuristic_type()); | 905 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(6)->heuristic_type()); |
| 910 } | 906 } |
| 911 | 907 |
| 912 TEST(FormStructureTest, ThreeAddressLines) { | 908 TEST(FormStructureTest, ThreeAddressLines) { |
| 913 scoped_ptr<FormStructure> form_structure; | 909 scoped_ptr<FormStructure> form_structure; |
| 914 FormData form; | 910 FormData form; |
| 915 form.method = ASCIIToUTF16("post"); | 911 form.method = ASCIIToUTF16("post"); |
| 916 | 912 |
| 917 FormField field; | 913 FormFieldData field; |
| 918 field.form_control_type = ASCIIToUTF16("text"); | 914 field.form_control_type = ASCIIToUTF16("text"); |
| 919 | 915 |
| 920 field.label = ASCIIToUTF16("Address Line1"); | 916 field.label = ASCIIToUTF16("Address Line1"); |
| 921 field.name = ASCIIToUTF16("Address"); | 917 field.name = ASCIIToUTF16("Address"); |
| 922 form.fields.push_back(field); | 918 form.fields.push_back(field); |
| 923 | 919 |
| 924 field.label = ASCIIToUTF16("Address Line2"); | 920 field.label = ASCIIToUTF16("Address Line2"); |
| 925 field.name = ASCIIToUTF16("Address"); | 921 field.name = ASCIIToUTF16("Address"); |
| 926 form.fields.push_back(field); | 922 form.fields.push_back(field); |
| 927 | 923 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 949 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(3)->heuristic_type()); | 945 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(3)->heuristic_type()); |
| 950 } | 946 } |
| 951 | 947 |
| 952 // This test verifies that "addressLine1" and "addressLine2" matches heuristics. | 948 // This test verifies that "addressLine1" and "addressLine2" matches heuristics. |
| 953 // This occured in https://www.gorillaclothing.com/. http://crbug.com/52126. | 949 // This occured in https://www.gorillaclothing.com/. http://crbug.com/52126. |
| 954 TEST(FormStructureTest, BillingAndShippingAddresses) { | 950 TEST(FormStructureTest, BillingAndShippingAddresses) { |
| 955 scoped_ptr<FormStructure> form_structure; | 951 scoped_ptr<FormStructure> form_structure; |
| 956 FormData form; | 952 FormData form; |
| 957 form.method = ASCIIToUTF16("post"); | 953 form.method = ASCIIToUTF16("post"); |
| 958 | 954 |
| 959 FormField field; | 955 FormFieldData field; |
| 960 field.form_control_type = ASCIIToUTF16("text"); | 956 field.form_control_type = ASCIIToUTF16("text"); |
| 961 | 957 |
| 962 field.label = ASCIIToUTF16("Address Line1"); | 958 field.label = ASCIIToUTF16("Address Line1"); |
| 963 field.name = ASCIIToUTF16("shipping.address.addressLine1"); | 959 field.name = ASCIIToUTF16("shipping.address.addressLine1"); |
| 964 form.fields.push_back(field); | 960 form.fields.push_back(field); |
| 965 | 961 |
| 966 field.label = ASCIIToUTF16("Address Line2"); | 962 field.label = ASCIIToUTF16("Address Line2"); |
| 967 field.name = ASCIIToUTF16("shipping.address.addressLine2"); | 963 field.name = ASCIIToUTF16("shipping.address.addressLine2"); |
| 968 form.fields.push_back(field); | 964 form.fields.push_back(field); |
| 969 | 965 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 995 // This example comes from expedia.com where they use a "Suite" label to | 991 // This example comes from expedia.com where they use a "Suite" label to |
| 996 // indicate a suite or apartment number. We interpret this as address line 2. | 992 // indicate a suite or apartment number. We interpret this as address line 2. |
| 997 // And the following "Street address second line" we interpret as address line | 993 // And the following "Street address second line" we interpret as address line |
| 998 // 3 and discard. | 994 // 3 and discard. |
| 999 // See http://crbug.com/48197 for details. | 995 // See http://crbug.com/48197 for details. |
| 1000 TEST(FormStructureTest, ThreeAddressLinesExpedia) { | 996 TEST(FormStructureTest, ThreeAddressLinesExpedia) { |
| 1001 scoped_ptr<FormStructure> form_structure; | 997 scoped_ptr<FormStructure> form_structure; |
| 1002 FormData form; | 998 FormData form; |
| 1003 form.method = ASCIIToUTF16("post"); | 999 form.method = ASCIIToUTF16("post"); |
| 1004 | 1000 |
| 1005 FormField field; | 1001 FormFieldData field; |
| 1006 field.form_control_type = ASCIIToUTF16("text"); | 1002 field.form_control_type = ASCIIToUTF16("text"); |
| 1007 | 1003 |
| 1008 field.label = ASCIIToUTF16("Street:"); | 1004 field.label = ASCIIToUTF16("Street:"); |
| 1009 field.name = ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_ads1"); | 1005 field.name = ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_ads1"); |
| 1010 form.fields.push_back(field); | 1006 form.fields.push_back(field); |
| 1011 | 1007 |
| 1012 field.label = ASCIIToUTF16("Suite or Apt:"); | 1008 field.label = ASCIIToUTF16("Suite or Apt:"); |
| 1013 field.name = ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_adap"); | 1009 field.name = ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_adap"); |
| 1014 form.fields.push_back(field); | 1010 form.fields.push_back(field); |
| 1015 | 1011 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1038 } | 1034 } |
| 1039 | 1035 |
| 1040 // This example comes from ebay.com where the word "suite" appears in the label | 1036 // This example comes from ebay.com where the word "suite" appears in the label |
| 1041 // and the name "address2" clearly indicates that this is the address line 2. | 1037 // and the name "address2" clearly indicates that this is the address line 2. |
| 1042 // See http://crbug.com/48197 for details. | 1038 // See http://crbug.com/48197 for details. |
| 1043 TEST(FormStructureTest, TwoAddressLinesEbay) { | 1039 TEST(FormStructureTest, TwoAddressLinesEbay) { |
| 1044 scoped_ptr<FormStructure> form_structure; | 1040 scoped_ptr<FormStructure> form_structure; |
| 1045 FormData form; | 1041 FormData form; |
| 1046 form.method = ASCIIToUTF16("post"); | 1042 form.method = ASCIIToUTF16("post"); |
| 1047 | 1043 |
| 1048 FormField field; | 1044 FormFieldData field; |
| 1049 field.form_control_type = ASCIIToUTF16("text"); | 1045 field.form_control_type = ASCIIToUTF16("text"); |
| 1050 | 1046 |
| 1051 field.label = ASCIIToUTF16("Address Line1"); | 1047 field.label = ASCIIToUTF16("Address Line1"); |
| 1052 field.name = ASCIIToUTF16("address1"); | 1048 field.name = ASCIIToUTF16("address1"); |
| 1053 form.fields.push_back(field); | 1049 form.fields.push_back(field); |
| 1054 | 1050 |
| 1055 field.label = ASCIIToUTF16("Floor number, suite number, etc"); | 1051 field.label = ASCIIToUTF16("Floor number, suite number, etc"); |
| 1056 field.name = ASCIIToUTF16("address2"); | 1052 field.name = ASCIIToUTF16("address2"); |
| 1057 form.fields.push_back(field); | 1053 form.fields.push_back(field); |
| 1058 | 1054 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1072 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(1)->heuristic_type()); | 1068 EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(1)->heuristic_type()); |
| 1073 // City. | 1069 // City. |
| 1074 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(2)->heuristic_type()); | 1070 EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(2)->heuristic_type()); |
| 1075 } | 1071 } |
| 1076 | 1072 |
| 1077 TEST(FormStructureTest, HeuristicsStateWithProvince) { | 1073 TEST(FormStructureTest, HeuristicsStateWithProvince) { |
| 1078 scoped_ptr<FormStructure> form_structure; | 1074 scoped_ptr<FormStructure> form_structure; |
| 1079 FormData form; | 1075 FormData form; |
| 1080 form.method = ASCIIToUTF16("post"); | 1076 form.method = ASCIIToUTF16("post"); |
| 1081 | 1077 |
| 1082 FormField field; | 1078 FormFieldData field; |
| 1083 field.form_control_type = ASCIIToUTF16("text"); | 1079 field.form_control_type = ASCIIToUTF16("text"); |
| 1084 | 1080 |
| 1085 field.label = ASCIIToUTF16("Address Line1"); | 1081 field.label = ASCIIToUTF16("Address Line1"); |
| 1086 field.name = ASCIIToUTF16("Address"); | 1082 field.name = ASCIIToUTF16("Address"); |
| 1087 form.fields.push_back(field); | 1083 form.fields.push_back(field); |
| 1088 | 1084 |
| 1089 field.label = ASCIIToUTF16("Address Line2"); | 1085 field.label = ASCIIToUTF16("Address Line2"); |
| 1090 field.name = ASCIIToUTF16("Address"); | 1086 field.name = ASCIIToUTF16("Address"); |
| 1091 form.fields.push_back(field); | 1087 form.fields.push_back(field); |
| 1092 | 1088 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1107 // State. | 1103 // State. |
| 1108 EXPECT_EQ(ADDRESS_HOME_STATE, form_structure->field(2)->heuristic_type()); | 1104 EXPECT_EQ(ADDRESS_HOME_STATE, form_structure->field(2)->heuristic_type()); |
| 1109 } | 1105 } |
| 1110 | 1106 |
| 1111 // This example comes from lego.com's checkout page. | 1107 // This example comes from lego.com's checkout page. |
| 1112 TEST(FormStructureTest, HeuristicsWithBilling) { | 1108 TEST(FormStructureTest, HeuristicsWithBilling) { |
| 1113 scoped_ptr<FormStructure> form_structure; | 1109 scoped_ptr<FormStructure> form_structure; |
| 1114 FormData form; | 1110 FormData form; |
| 1115 form.method = ASCIIToUTF16("post"); | 1111 form.method = ASCIIToUTF16("post"); |
| 1116 | 1112 |
| 1117 FormField field; | 1113 FormFieldData field; |
| 1118 field.form_control_type = ASCIIToUTF16("text"); | 1114 field.form_control_type = ASCIIToUTF16("text"); |
| 1119 | 1115 |
| 1120 field.label = ASCIIToUTF16("First Name*:"); | 1116 field.label = ASCIIToUTF16("First Name*:"); |
| 1121 field.name = ASCIIToUTF16("editBillingAddress$firstNameBox"); | 1117 field.name = ASCIIToUTF16("editBillingAddress$firstNameBox"); |
| 1122 form.fields.push_back(field); | 1118 form.fields.push_back(field); |
| 1123 | 1119 |
| 1124 field.label = ASCIIToUTF16("Last Name*:"); | 1120 field.label = ASCIIToUTF16("Last Name*:"); |
| 1125 field.name = ASCIIToUTF16("editBillingAddress$lastNameBox"); | 1121 field.name = ASCIIToUTF16("editBillingAddress$lastNameBox"); |
| 1126 form.fields.push_back(field); | 1122 form.fields.push_back(field); |
| 1127 | 1123 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1180 EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, | 1176 EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, |
| 1181 form_structure->field(9)->heuristic_type()); | 1177 form_structure->field(9)->heuristic_type()); |
| 1182 EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(10)->heuristic_type()); | 1178 EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(10)->heuristic_type()); |
| 1183 } | 1179 } |
| 1184 | 1180 |
| 1185 TEST(FormStructureTest, ThreePartPhoneNumber) { | 1181 TEST(FormStructureTest, ThreePartPhoneNumber) { |
| 1186 scoped_ptr<FormStructure> form_structure; | 1182 scoped_ptr<FormStructure> form_structure; |
| 1187 FormData form; | 1183 FormData form; |
| 1188 form.method = ASCIIToUTF16("post"); | 1184 form.method = ASCIIToUTF16("post"); |
| 1189 | 1185 |
| 1190 FormField field; | 1186 FormFieldData field; |
| 1191 field.form_control_type = ASCIIToUTF16("text"); | 1187 field.form_control_type = ASCIIToUTF16("text"); |
| 1192 | 1188 |
| 1193 field.label = ASCIIToUTF16("Phone:"); | 1189 field.label = ASCIIToUTF16("Phone:"); |
| 1194 field.name = ASCIIToUTF16("dayphone1"); | 1190 field.name = ASCIIToUTF16("dayphone1"); |
| 1195 field.max_length = 0; | 1191 field.max_length = 0; |
| 1196 form.fields.push_back(field); | 1192 form.fields.push_back(field); |
| 1197 | 1193 |
| 1198 field.label = ASCIIToUTF16("-"); | 1194 field.label = ASCIIToUTF16("-"); |
| 1199 field.name = ASCIIToUTF16("dayphone2"); | 1195 field.name = ASCIIToUTF16("dayphone2"); |
| 1200 field.max_length = 3; // Size of prefix is 3. | 1196 field.max_length = 3; // Size of prefix is 3. |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1228 form_structure->field(2)->heuristic_type()); | 1224 form_structure->field(2)->heuristic_type()); |
| 1229 // Unknown. | 1225 // Unknown. |
| 1230 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(3)->heuristic_type()); | 1226 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(3)->heuristic_type()); |
| 1231 } | 1227 } |
| 1232 | 1228 |
| 1233 TEST(FormStructureTest, HeuristicsInfernoCC) { | 1229 TEST(FormStructureTest, HeuristicsInfernoCC) { |
| 1234 scoped_ptr<FormStructure> form_structure; | 1230 scoped_ptr<FormStructure> form_structure; |
| 1235 FormData form; | 1231 FormData form; |
| 1236 form.method = ASCIIToUTF16("post"); | 1232 form.method = ASCIIToUTF16("post"); |
| 1237 | 1233 |
| 1238 FormField field; | 1234 FormFieldData field; |
| 1239 field.form_control_type = ASCIIToUTF16("text"); | 1235 field.form_control_type = ASCIIToUTF16("text"); |
| 1240 | 1236 |
| 1241 field.label = ASCIIToUTF16("Name on Card"); | 1237 field.label = ASCIIToUTF16("Name on Card"); |
| 1242 field.name = ASCIIToUTF16("name_on_card"); | 1238 field.name = ASCIIToUTF16("name_on_card"); |
| 1243 form.fields.push_back(field); | 1239 form.fields.push_back(field); |
| 1244 | 1240 |
| 1245 field.label = ASCIIToUTF16("Address"); | 1241 field.label = ASCIIToUTF16("Address"); |
| 1246 field.name = ASCIIToUTF16("billing_address"); | 1242 field.name = ASCIIToUTF16("billing_address"); |
| 1247 form.fields.push_back(field); | 1243 form.fields.push_back(field); |
| 1248 | 1244 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1277 // Expiration Year. | 1273 // Expiration Year. |
| 1278 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, | 1274 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, |
| 1279 form_structure->field(4)->heuristic_type()); | 1275 form_structure->field(4)->heuristic_type()); |
| 1280 } | 1276 } |
| 1281 | 1277 |
| 1282 TEST(FormStructureTest, CVCCodeClash) { | 1278 TEST(FormStructureTest, CVCCodeClash) { |
| 1283 scoped_ptr<FormStructure> form_structure; | 1279 scoped_ptr<FormStructure> form_structure; |
| 1284 FormData form; | 1280 FormData form; |
| 1285 form.method = ASCIIToUTF16("post"); | 1281 form.method = ASCIIToUTF16("post"); |
| 1286 | 1282 |
| 1287 FormField field; | 1283 FormFieldData field; |
| 1288 field.form_control_type = ASCIIToUTF16("text"); | 1284 field.form_control_type = ASCIIToUTF16("text"); |
| 1289 | 1285 |
| 1290 field.label = ASCIIToUTF16("Card number"); | 1286 field.label = ASCIIToUTF16("Card number"); |
| 1291 field.name = ASCIIToUTF16("ccnumber"); | 1287 field.name = ASCIIToUTF16("ccnumber"); |
| 1292 form.fields.push_back(field); | 1288 form.fields.push_back(field); |
| 1293 | 1289 |
| 1294 field.label = ASCIIToUTF16("First name"); | 1290 field.label = ASCIIToUTF16("First name"); |
| 1295 field.name = ASCIIToUTF16("first_name"); | 1291 field.name = ASCIIToUTF16("first_name"); |
| 1296 form.fields.push_back(field); | 1292 form.fields.push_back(field); |
| 1297 | 1293 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1331 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, | 1327 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, |
| 1332 form_structure->field(4)->heuristic_type()); | 1328 form_structure->field(4)->heuristic_type()); |
| 1333 // CVC code should not match. | 1329 // CVC code should not match. |
| 1334 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(5)->heuristic_type()); | 1330 EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(5)->heuristic_type()); |
| 1335 } | 1331 } |
| 1336 | 1332 |
| 1337 TEST(FormStructureTest, EncodeQueryRequest) { | 1333 TEST(FormStructureTest, EncodeQueryRequest) { |
| 1338 FormData form; | 1334 FormData form; |
| 1339 form.method = ASCIIToUTF16("post"); | 1335 form.method = ASCIIToUTF16("post"); |
| 1340 | 1336 |
| 1341 FormField field; | 1337 FormFieldData field; |
| 1342 field.form_control_type = ASCIIToUTF16("text"); | 1338 field.form_control_type = ASCIIToUTF16("text"); |
| 1343 | 1339 |
| 1344 field.label = ASCIIToUTF16("Name on Card"); | 1340 field.label = ASCIIToUTF16("Name on Card"); |
| 1345 field.name = ASCIIToUTF16("name_on_card"); | 1341 field.name = ASCIIToUTF16("name_on_card"); |
| 1346 form.fields.push_back(field); | 1342 form.fields.push_back(field); |
| 1347 | 1343 |
| 1348 field.label = ASCIIToUTF16("Address"); | 1344 field.label = ASCIIToUTF16("Address"); |
| 1349 field.name = ASCIIToUTF16("billing_address"); | 1345 field.name = ASCIIToUTF16("billing_address"); |
| 1350 form.fields.push_back(field); | 1346 form.fields.push_back(field); |
| 1351 | 1347 |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1446 } | 1442 } |
| 1447 | 1443 |
| 1448 TEST(FormStructureTest, EncodeUploadRequest) { | 1444 TEST(FormStructureTest, EncodeUploadRequest) { |
| 1449 scoped_ptr<FormStructure> form_structure; | 1445 scoped_ptr<FormStructure> form_structure; |
| 1450 std::vector<FieldTypeSet> possible_field_types; | 1446 std::vector<FieldTypeSet> possible_field_types; |
| 1451 FormData form; | 1447 FormData form; |
| 1452 form.method = ASCIIToUTF16("post"); | 1448 form.method = ASCIIToUTF16("post"); |
| 1453 form_structure.reset(new FormStructure(form)); | 1449 form_structure.reset(new FormStructure(form)); |
| 1454 form_structure->DetermineHeuristicTypes(); | 1450 form_structure->DetermineHeuristicTypes(); |
| 1455 | 1451 |
| 1456 FormField field; | 1452 FormFieldData field; |
| 1457 field.form_control_type = ASCIIToUTF16("text"); | 1453 field.form_control_type = ASCIIToUTF16("text"); |
| 1458 | 1454 |
| 1459 field.label = ASCIIToUTF16("First Name"); | 1455 field.label = ASCIIToUTF16("First Name"); |
| 1460 field.name = ASCIIToUTF16("firstname"); | 1456 field.name = ASCIIToUTF16("firstname"); |
| 1461 form.fields.push_back(field); | 1457 form.fields.push_back(field); |
| 1462 possible_field_types.push_back(FieldTypeSet()); | 1458 possible_field_types.push_back(FieldTypeSet()); |
| 1463 possible_field_types.back().insert(NAME_FIRST); | 1459 possible_field_types.back().insert(NAME_FIRST); |
| 1464 | 1460 |
| 1465 field.label = ASCIIToUTF16("Last Name"); | 1461 field.label = ASCIIToUTF16("Last Name"); |
| 1466 field.name = ASCIIToUTF16("lastname"); | 1462 field.name = ASCIIToUTF16("lastname"); |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1592 EXPECT_FALSE(form_structure->EncodeUploadRequest(available_field_types, false, | 1588 EXPECT_FALSE(form_structure->EncodeUploadRequest(available_field_types, false, |
| 1593 &encoded_xml)); | 1589 &encoded_xml)); |
| 1594 } | 1590 } |
| 1595 | 1591 |
| 1596 // Check that we compute the "datapresent" string correctly for the given | 1592 // Check that we compute the "datapresent" string correctly for the given |
| 1597 // |available_types|. | 1593 // |available_types|. |
| 1598 TEST(FormStructureTest, CheckDataPresence) { | 1594 TEST(FormStructureTest, CheckDataPresence) { |
| 1599 FormData form; | 1595 FormData form; |
| 1600 form.method = ASCIIToUTF16("post"); | 1596 form.method = ASCIIToUTF16("post"); |
| 1601 | 1597 |
| 1602 FormField field; | 1598 FormFieldData field; |
| 1603 field.form_control_type = ASCIIToUTF16("text"); | 1599 field.form_control_type = ASCIIToUTF16("text"); |
| 1604 | 1600 |
| 1605 field.label = ASCIIToUTF16("First Name"); | 1601 field.label = ASCIIToUTF16("First Name"); |
| 1606 field.name = ASCIIToUTF16("first"); | 1602 field.name = ASCIIToUTF16("first"); |
| 1607 form.fields.push_back(field); | 1603 form.fields.push_back(field); |
| 1608 | 1604 |
| 1609 field.label = ASCIIToUTF16("Last Name"); | 1605 field.label = ASCIIToUTF16("Last Name"); |
| 1610 field.name = ASCIIToUTF16("last"); | 1606 field.name = ASCIIToUTF16("last"); |
| 1611 form.fields.push_back(field); | 1607 form.fields.push_back(field); |
| 1612 | 1608 |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1846 available_field_types.insert(ADDRESS_HOME_CITY); | 1842 available_field_types.insert(ADDRESS_HOME_CITY); |
| 1847 available_field_types.insert(ADDRESS_HOME_STATE); | 1843 available_field_types.insert(ADDRESS_HOME_STATE); |
| 1848 available_field_types.insert(COMPANY_NAME); | 1844 available_field_types.insert(COMPANY_NAME); |
| 1849 | 1845 |
| 1850 // Check that multiple types for the field are processed correctly. | 1846 // Check that multiple types for the field are processed correctly. |
| 1851 scoped_ptr<FormStructure> form_structure; | 1847 scoped_ptr<FormStructure> form_structure; |
| 1852 std::vector<FieldTypeSet> possible_field_types; | 1848 std::vector<FieldTypeSet> possible_field_types; |
| 1853 FormData form; | 1849 FormData form; |
| 1854 form.method = ASCIIToUTF16("post"); | 1850 form.method = ASCIIToUTF16("post"); |
| 1855 | 1851 |
| 1856 FormField field; | 1852 FormFieldData field; |
| 1857 field.form_control_type = ASCIIToUTF16("text"); | 1853 field.form_control_type = ASCIIToUTF16("text"); |
| 1858 | 1854 |
| 1859 field.label = ASCIIToUTF16("email"); | 1855 field.label = ASCIIToUTF16("email"); |
| 1860 field.name = ASCIIToUTF16("email"); | 1856 field.name = ASCIIToUTF16("email"); |
| 1861 form.fields.push_back(field); | 1857 form.fields.push_back(field); |
| 1862 possible_field_types.push_back(FieldTypeSet()); | 1858 possible_field_types.push_back(FieldTypeSet()); |
| 1863 possible_field_types.back().insert(EMAIL_ADDRESS); | 1859 possible_field_types.back().insert(EMAIL_ADDRESS); |
| 1864 | 1860 |
| 1865 field.label = ASCIIToUTF16("First Name"); | 1861 field.label = ASCIIToUTF16("First Name"); |
| 1866 field.name = ASCIIToUTF16("first"); | 1862 field.name = ASCIIToUTF16("first"); |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1952 "</autofillupload>", | 1948 "</autofillupload>", |
| 1953 encoded_xml); | 1949 encoded_xml); |
| 1954 } | 1950 } |
| 1955 | 1951 |
| 1956 TEST(FormStructureTest, CheckFormSignature) { | 1952 TEST(FormStructureTest, CheckFormSignature) { |
| 1957 // Check that form signature is created correctly. | 1953 // Check that form signature is created correctly. |
| 1958 scoped_ptr<FormStructure> form_structure; | 1954 scoped_ptr<FormStructure> form_structure; |
| 1959 FormData form; | 1955 FormData form; |
| 1960 form.method = ASCIIToUTF16("post"); | 1956 form.method = ASCIIToUTF16("post"); |
| 1961 | 1957 |
| 1962 FormField field; | 1958 FormFieldData field; |
| 1963 field.form_control_type = ASCIIToUTF16("text"); | 1959 field.form_control_type = ASCIIToUTF16("text"); |
| 1964 | 1960 |
| 1965 field.label = ASCIIToUTF16("email"); | 1961 field.label = ASCIIToUTF16("email"); |
| 1966 field.name = ASCIIToUTF16("email"); | 1962 field.name = ASCIIToUTF16("email"); |
| 1967 form.fields.push_back(field); | 1963 form.fields.push_back(field); |
| 1968 | 1964 |
| 1969 field.label = ASCIIToUTF16("First Name"); | 1965 field.label = ASCIIToUTF16("First Name"); |
| 1970 field.name = ASCIIToUTF16("first"); | 1966 field.name = ASCIIToUTF16("first"); |
| 1971 form.fields.push_back(field); | 1967 form.fields.push_back(field); |
| 1972 | 1968 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1987 EXPECT_EQ(FormStructureTest::Hash64Bit( | 1983 EXPECT_EQ(FormStructureTest::Hash64Bit( |
| 1988 std::string("https://login.facebook.com&&email&first")), | 1984 std::string("https://login.facebook.com&&email&first")), |
| 1989 form_structure->FormSignature()); | 1985 form_structure->FormSignature()); |
| 1990 | 1986 |
| 1991 form.name = ASCIIToUTF16("login_form"); | 1987 form.name = ASCIIToUTF16("login_form"); |
| 1992 form_structure.reset(new FormStructure(form)); | 1988 form_structure.reset(new FormStructure(form)); |
| 1993 EXPECT_EQ(FormStructureTest::Hash64Bit( | 1989 EXPECT_EQ(FormStructureTest::Hash64Bit( |
| 1994 std::string("https://login.facebook.com&login_form&email&first")), | 1990 std::string("https://login.facebook.com&login_form&email&first")), |
| 1995 form_structure->FormSignature()); | 1991 form_structure->FormSignature()); |
| 1996 } | 1992 } |
| OLD | NEW |