| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| 11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 12 #include "base/metrics/field_trial.h" | 12 #include "base/metrics/field_trial.h" |
| 13 #include "base/strings/string_number_conversions.h" | 13 #include "base/strings/string_number_conversions.h" |
| 14 #include "base/strings/string_util.h" | 14 #include "base/strings/string_util.h" |
| 15 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
| 16 #include "components/autofill/core/browser/autofill_test_utils.h" | 16 #include "components/autofill/core/browser/autofill_test_utils.h" |
| 17 #include "components/autofill/core/common/autofill_switches.h" | 17 #include "components/autofill/core/common/autofill_switches.h" |
| 18 #include "components/autofill/core/common/form_data.h" | 18 #include "components/autofill/core/common/form_data.h" |
| 19 #include "components/autofill/core/common/form_field_data.h" | 19 #include "components/autofill/core/common/form_field_data.h" |
| 20 #include "components/autofill/core/common/signatures_util.h" |
| 20 #include "components/variations/entropy_provider.h" | 21 #include "components/variations/entropy_provider.h" |
| 21 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
| 22 #include "url/gurl.h" | 23 #include "url/gurl.h" |
| 23 | 24 |
| 24 using base::ASCIIToUTF16; | 25 using base::ASCIIToUTF16; |
| 25 | 26 |
| 26 namespace autofill { | 27 namespace autofill { |
| 27 | 28 |
| 28 namespace content { | 29 namespace content { |
| 29 | 30 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 43 } | 44 } |
| 44 | 45 |
| 45 return os; | 46 return os; |
| 46 } | 47 } |
| 47 | 48 |
| 48 } // namespace content | 49 } // namespace content |
| 49 | 50 |
| 50 class FormStructureTest : public testing::Test { | 51 class FormStructureTest : public testing::Test { |
| 51 public: | 52 public: |
| 52 static std::string Hash64Bit(const std::string& str) { | 53 static std::string Hash64Bit(const std::string& str) { |
| 53 return base::Uint64ToString(FormStructure::Hash64Bit(str)); | 54 return base::Uint64ToString(StrToHash64Bit(str)); |
| 54 } | 55 } |
| 55 | 56 |
| 56 void SetUp() override { | 57 void SetUp() override { |
| 57 // By default this trial is enabled on tests. | 58 // By default this trial is enabled on tests. |
| 58 EnableAutofillMetadataFieldTrial(); | 59 EnableAutofillMetadataFieldTrial(); |
| 59 } | 60 } |
| 60 | 61 |
| 61 protected: | 62 protected: |
| 62 void DisableAutofillMetadataFieldTrial() { | 63 void DisableAutofillMetadataFieldTrial() { |
| 63 field_trial_list_.reset(); | 64 field_trial_list_.reset(); |
| (...skipping 3237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3301 | 3302 |
| 3302 // Checkable fields shouldn't affect the signature. | 3303 // Checkable fields shouldn't affect the signature. |
| 3303 field.label = ASCIIToUTF16("Select"); | 3304 field.label = ASCIIToUTF16("Select"); |
| 3304 field.name = ASCIIToUTF16("Select"); | 3305 field.name = ASCIIToUTF16("Select"); |
| 3305 field.form_control_type = "checkbox"; | 3306 field.form_control_type = "checkbox"; |
| 3306 field.check_status = FormFieldData::CHECKABLE_BUT_UNCHECKED; | 3307 field.check_status = FormFieldData::CHECKABLE_BUT_UNCHECKED; |
| 3307 form.fields.push_back(field); | 3308 form.fields.push_back(field); |
| 3308 | 3309 |
| 3309 form_structure.reset(new FormStructure(form)); | 3310 form_structure.reset(new FormStructure(form)); |
| 3310 | 3311 |
| 3311 EXPECT_EQ(FormStructureTest::Hash64Bit( | 3312 EXPECT_EQ(FormStructureTest::Hash64Bit(std::string("://&&email&first")), |
| 3312 std::string("://&&email&first")), | 3313 form_structure->FormSignatureAsStr()); |
| 3313 form_structure->FormSignature()); | |
| 3314 | 3314 |
| 3315 form.origin = GURL(std::string("http://www.facebook.com")); | 3315 form.origin = GURL(std::string("http://www.facebook.com")); |
| 3316 form_structure.reset(new FormStructure(form)); | 3316 form_structure.reset(new FormStructure(form)); |
| 3317 EXPECT_EQ(FormStructureTest::Hash64Bit( | 3317 EXPECT_EQ(FormStructureTest::Hash64Bit( |
| 3318 std::string("http://www.facebook.com&&email&first")), | 3318 std::string("http://www.facebook.com&&email&first")), |
| 3319 form_structure->FormSignature()); | 3319 form_structure->FormSignatureAsStr()); |
| 3320 | 3320 |
| 3321 form.action = GURL(std::string("https://login.facebook.com/path")); | 3321 form.action = GURL(std::string("https://login.facebook.com/path")); |
| 3322 form_structure.reset(new FormStructure(form)); | 3322 form_structure.reset(new FormStructure(form)); |
| 3323 EXPECT_EQ(FormStructureTest::Hash64Bit( | 3323 EXPECT_EQ(FormStructureTest::Hash64Bit( |
| 3324 std::string("https://login.facebook.com&&email&first")), | 3324 std::string("https://login.facebook.com&&email&first")), |
| 3325 form_structure->FormSignature()); | 3325 form_structure->FormSignatureAsStr()); |
| 3326 | 3326 |
| 3327 form.name = ASCIIToUTF16("login_form"); | 3327 form.name = ASCIIToUTF16("login_form"); |
| 3328 form_structure.reset(new FormStructure(form)); | 3328 form_structure.reset(new FormStructure(form)); |
| 3329 EXPECT_EQ(FormStructureTest::Hash64Bit( | 3329 EXPECT_EQ(FormStructureTest::Hash64Bit(std::string( |
| 3330 std::string("https://login.facebook.com&login_form&email&first")), | 3330 "https://login.facebook.com&login_form&email&first")), |
| 3331 form_structure->FormSignature()); | 3331 form_structure->FormSignatureAsStr()); |
| 3332 | 3332 |
| 3333 field.check_status = FormFieldData::NOT_CHECKABLE; | 3333 field.check_status = FormFieldData::NOT_CHECKABLE; |
| 3334 field.label = ASCIIToUTF16("Random Field label"); | 3334 field.label = ASCIIToUTF16("Random Field label"); |
| 3335 field.name = ASCIIToUTF16("random1234"); | 3335 field.name = ASCIIToUTF16("random1234"); |
| 3336 field.form_control_type = "text"; | 3336 field.form_control_type = "text"; |
| 3337 form.fields.push_back(field); | 3337 form.fields.push_back(field); |
| 3338 field.label = ASCIIToUTF16("Random Field label2"); | 3338 field.label = ASCIIToUTF16("Random Field label2"); |
| 3339 field.name = ASCIIToUTF16("random12345"); | 3339 field.name = ASCIIToUTF16("random12345"); |
| 3340 form.fields.push_back(field); | 3340 form.fields.push_back(field); |
| 3341 field.label = ASCIIToUTF16("Random Field label3"); | 3341 field.label = ASCIIToUTF16("Random Field label3"); |
| 3342 field.name = ASCIIToUTF16("1random12345678"); | 3342 field.name = ASCIIToUTF16("1random12345678"); |
| 3343 form.fields.push_back(field); | 3343 form.fields.push_back(field); |
| 3344 field.label = ASCIIToUTF16("Random Field label3"); | 3344 field.label = ASCIIToUTF16("Random Field label3"); |
| 3345 field.name = ASCIIToUTF16("12345random"); | 3345 field.name = ASCIIToUTF16("12345random"); |
| 3346 form.fields.push_back(field); | 3346 form.fields.push_back(field); |
| 3347 form_structure.reset(new FormStructure(form)); | 3347 form_structure.reset(new FormStructure(form)); |
| 3348 EXPECT_EQ(FormStructureTest::Hash64Bit( | 3348 EXPECT_EQ(FormStructureTest::Hash64Bit( |
| 3349 std::string("https://login.facebook.com&login_form&email&first&" | 3349 std::string("https://login.facebook.com&login_form&email&first&" |
| 3350 "random1234&random&1random&random")), | 3350 "random1234&random&1random&random")), |
| 3351 form_structure->FormSignature()); | 3351 form_structure->FormSignatureAsStr()); |
| 3352 } | 3352 } |
| 3353 | 3353 |
| 3354 TEST_F(FormStructureTest, ToFormData) { | 3354 TEST_F(FormStructureTest, ToFormData) { |
| 3355 FormData form; | 3355 FormData form; |
| 3356 form.name = ASCIIToUTF16("the-name"); | 3356 form.name = ASCIIToUTF16("the-name"); |
| 3357 form.origin = GURL("http://cool.com"); | 3357 form.origin = GURL("http://cool.com"); |
| 3358 form.action = form.origin.Resolve("/login"); | 3358 form.action = form.origin.Resolve("/login"); |
| 3359 | 3359 |
| 3360 FormFieldData field; | 3360 FormFieldData field; |
| 3361 field.label = ASCIIToUTF16("username"); | 3361 field.label = ASCIIToUTF16("username"); |
| (...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3798 prefix = FormStructure::FindLongestCommonPrefix(strings); | 3798 prefix = FormStructure::FindLongestCommonPrefix(strings); |
| 3799 EXPECT_EQ(ASCIIToUTF16("1234567890123456"), prefix); | 3799 EXPECT_EQ(ASCIIToUTF16("1234567890123456"), prefix); |
| 3800 | 3800 |
| 3801 // Empty vector. | 3801 // Empty vector. |
| 3802 strings.clear(); | 3802 strings.clear(); |
| 3803 prefix = FormStructure::FindLongestCommonPrefix(strings); | 3803 prefix = FormStructure::FindLongestCommonPrefix(strings); |
| 3804 EXPECT_EQ(ASCIIToUTF16(""), prefix); | 3804 EXPECT_EQ(ASCIIToUTF16(""), prefix); |
| 3805 } | 3805 } |
| 3806 | 3806 |
| 3807 } // namespace autofill | 3807 } // namespace autofill |
| OLD | NEW |