OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/autofill/core/browser/form_structure.h" | 5 #include "components/autofill/core/browser/form_structure.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/metrics/field_trial.h" | 9 #include "base/metrics/field_trial.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 | 298 |
299 field.label = ASCIIToUTF16("Country"); | 299 field.label = ASCIIToUTF16("Country"); |
300 field.name = ASCIIToUTF16("country"); | 300 field.name = ASCIIToUTF16("country"); |
301 field.form_control_type = "select-one"; | 301 field.form_control_type = "select-one"; |
302 form.fields.push_back(field); | 302 form.fields.push_back(field); |
303 | 303 |
304 form_structure.reset(new FormStructure(form)); | 304 form_structure.reset(new FormStructure(form)); |
305 EXPECT_TRUE(form_structure->ShouldBeParsed()); | 305 EXPECT_TRUE(form_structure->ShouldBeParsed()); |
306 | 306 |
307 form.fields[0].form_control_type = "select-one"; | 307 form.fields[0].form_control_type = "select-one"; |
| 308 |
308 // Now, no text fields. | 309 // Now, no text fields. |
309 form_structure.reset(new FormStructure(form)); | 310 form_structure.reset(new FormStructure(form)); |
310 EXPECT_FALSE(form_structure->ShouldBeParsed()); | 311 EXPECT_FALSE(form_structure->ShouldBeParsed()); |
311 } | 312 } |
312 | 313 |
| 314 // Tests that ShouldBeParsed returns true for a form containing less than three |
| 315 // fields if at least one has an autocomplete attribute. |
| 316 TEST_F(FormStructureTest, ShouldBeParsed_TwoFields_HasAutocomplete) { |
| 317 scoped_ptr<FormStructure> form_structure; |
| 318 FormData form; |
| 319 FormFieldData field; |
| 320 |
| 321 field.label = ASCIIToUTF16("Name"); |
| 322 field.name = ASCIIToUTF16("name"); |
| 323 field.form_control_type = "name"; |
| 324 field.autocomplete_attribute = "name"; |
| 325 form.fields.push_back(field); |
| 326 |
| 327 field.label = ASCIIToUTF16("Address"); |
| 328 field.name = ASCIIToUTF16("Address"); |
| 329 field.form_control_type = "select-one"; |
| 330 field.autocomplete_attribute = ""; |
| 331 form.fields.push_back(field); |
| 332 |
| 333 form_structure.reset(new FormStructure(form)); |
| 334 form_structure->ParseFieldTypesFromAutocompleteAttributes(); |
| 335 EXPECT_TRUE(form_structure->ShouldBeParsed()); |
| 336 } |
| 337 |
313 TEST_F(FormStructureTest, HeuristicsContactInfo) { | 338 TEST_F(FormStructureTest, HeuristicsContactInfo) { |
314 scoped_ptr<FormStructure> form_structure; | 339 scoped_ptr<FormStructure> form_structure; |
315 FormData form; | 340 FormData form; |
316 | 341 |
317 FormFieldData field; | 342 FormFieldData field; |
318 field.form_control_type = "text"; | 343 field.form_control_type = "text"; |
319 | 344 |
320 field.label = ASCIIToUTF16("First Name"); | 345 field.label = ASCIIToUTF16("First Name"); |
321 field.name = ASCIIToUTF16("firstname"); | 346 field.name = ASCIIToUTF16("firstname"); |
322 form.fields.push_back(field); | 347 form.fields.push_back(field); |
(...skipping 2638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2961 field.autocomplete_attribute = "billing country"; | 2986 field.autocomplete_attribute = "billing country"; |
2962 field.option_contents.push_back(ASCIIToUTF16("Down Under")); | 2987 field.option_contents.push_back(ASCIIToUTF16("Down Under")); |
2963 field.option_values.push_back(ASCIIToUTF16("AU")); | 2988 field.option_values.push_back(ASCIIToUTF16("AU")); |
2964 field.option_contents.push_back(ASCIIToUTF16("Fr")); | 2989 field.option_contents.push_back(ASCIIToUTF16("Fr")); |
2965 field.option_values.push_back(ASCIIToUTF16("")); | 2990 field.option_values.push_back(ASCIIToUTF16("")); |
2966 field.option_contents.push_back(ASCIIToUTF16("Germany")); | 2991 field.option_contents.push_back(ASCIIToUTF16("Germany")); |
2967 field.option_values.push_back(ASCIIToUTF16("GRMNY")); | 2992 field.option_values.push_back(ASCIIToUTF16("GRMNY")); |
2968 form_data.fields.push_back(field); | 2993 form_data.fields.push_back(field); |
2969 FormStructure form_structure(form_data); | 2994 FormStructure form_structure(form_data); |
2970 | 2995 |
2971 bool unused; | 2996 form_structure.ParseFieldTypesFromAutocompleteAttributes(); |
2972 form_structure.ParseFieldTypesFromAutocompleteAttributes(&unused, &unused); | |
2973 | 2997 |
2974 // All values in <option> value= or contents are returned, set to upper case. | 2998 // All values in <option> value= or contents are returned, set to upper case. |
2975 std::set<base::string16> possible_values = | 2999 std::set<base::string16> possible_values = |
2976 form_structure.PossibleValues(ADDRESS_BILLING_COUNTRY); | 3000 form_structure.PossibleValues(ADDRESS_BILLING_COUNTRY); |
2977 EXPECT_EQ(5U, possible_values.size()); | 3001 EXPECT_EQ(5U, possible_values.size()); |
2978 EXPECT_EQ(1U, possible_values.count(ASCIIToUTF16("AU"))); | 3002 EXPECT_EQ(1U, possible_values.count(ASCIIToUTF16("AU"))); |
2979 EXPECT_EQ(1U, possible_values.count(ASCIIToUTF16("FR"))); | 3003 EXPECT_EQ(1U, possible_values.count(ASCIIToUTF16("FR"))); |
2980 EXPECT_EQ(1U, possible_values.count(ASCIIToUTF16("DOWN UNDER"))); | 3004 EXPECT_EQ(1U, possible_values.count(ASCIIToUTF16("DOWN UNDER"))); |
2981 EXPECT_EQ(1U, possible_values.count(ASCIIToUTF16("GERMANY"))); | 3005 EXPECT_EQ(1U, possible_values.count(ASCIIToUTF16("GERMANY"))); |
2982 EXPECT_EQ(1U, possible_values.count(ASCIIToUTF16("GRMNY"))); | 3006 EXPECT_EQ(1U, possible_values.count(ASCIIToUTF16("GRMNY"))); |
2983 EXPECT_EQ(0U, possible_values.count(ASCIIToUTF16("Fr"))); | 3007 EXPECT_EQ(0U, possible_values.count(ASCIIToUTF16("Fr"))); |
2984 EXPECT_EQ(0U, possible_values.count(ASCIIToUTF16("DE"))); | 3008 EXPECT_EQ(0U, possible_values.count(ASCIIToUTF16("DE"))); |
2985 | 3009 |
2986 // No field for the given type; empty value set. | 3010 // No field for the given type; empty value set. |
2987 EXPECT_EQ(0U, form_structure.PossibleValues(ADDRESS_HOME_COUNTRY).size()); | 3011 EXPECT_EQ(0U, form_structure.PossibleValues(ADDRESS_HOME_COUNTRY).size()); |
2988 | 3012 |
2989 // A freeform input (<input>) allows any value (overriding other <select>s). | 3013 // A freeform input (<input>) allows any value (overriding other <select>s). |
2990 FormFieldData freeform_field; | 3014 FormFieldData freeform_field; |
2991 freeform_field.autocomplete_attribute = "billing country"; | 3015 freeform_field.autocomplete_attribute = "billing country"; |
2992 form_data.fields.push_back(freeform_field); | 3016 form_data.fields.push_back(freeform_field); |
2993 FormStructure form_structure2(form_data); | 3017 FormStructure form_structure2(form_data); |
2994 form_structure2.ParseFieldTypesFromAutocompleteAttributes(&unused, &unused); | 3018 form_structure2.ParseFieldTypesFromAutocompleteAttributes(); |
2995 EXPECT_EQ(0U, form_structure2.PossibleValues(ADDRESS_BILLING_COUNTRY).size()); | 3019 EXPECT_EQ(0U, form_structure2.PossibleValues(ADDRESS_BILLING_COUNTRY).size()); |
2996 } | 3020 } |
2997 | 3021 |
2998 TEST_F(FormStructureTest, ParseQueryResponse) { | 3022 TEST_F(FormStructureTest, ParseQueryResponse) { |
2999 FormData form; | 3023 FormData form; |
3000 form.origin = GURL("http://foo.com"); | 3024 form.origin = GURL("http://foo.com"); |
3001 FormFieldData field; | 3025 FormFieldData field; |
3002 field.form_control_type = "text"; | 3026 field.form_control_type = "text"; |
3003 | 3027 |
3004 field.label = ASCIIToUTF16("fullname"); | 3028 field.label = ASCIIToUTF16("fullname"); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3077 "</autofillqueryresponse>"; | 3101 "</autofillqueryresponse>"; |
3078 | 3102 |
3079 FormStructure::ParseQueryResponse(response, forms.get(), nullptr); | 3103 FormStructure::ParseQueryResponse(response, forms.get(), nullptr); |
3080 | 3104 |
3081 ASSERT_GE(forms[0]->field_count(), 2U); | 3105 ASSERT_GE(forms[0]->field_count(), 2U); |
3082 EXPECT_EQ(NO_SERVER_DATA, forms[0]->field(0)->server_type()); | 3106 EXPECT_EQ(NO_SERVER_DATA, forms[0]->field(0)->server_type()); |
3083 EXPECT_EQ(76, forms[0]->field(1)->server_type()); | 3107 EXPECT_EQ(76, forms[0]->field(1)->server_type()); |
3084 } | 3108 } |
3085 | 3109 |
3086 } // namespace autofill | 3110 } // namespace autofill |
OLD | NEW |