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

Side by Side Diff: components/autofill/core/browser/autofill_manager_unittest.cc

Issue 2789843004: [Payments] Upload card UI now has a CVC prompt (Closed)
Patch Set: Update TestAutofillClient, create MockSaveCardBubbleController, add unit test Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/autofill/core/browser/autofill_manager.h" 5 #include "components/autofill/core/browser/autofill_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 1011 matching lines...) Expand 10 before | Expand all | Expand 10 after
1022 1022
1023 void SetHttpWarningEnabled() { 1023 void SetHttpWarningEnabled() {
1024 scoped_feature_list_.InitAndEnableFeature( 1024 scoped_feature_list_.InitAndEnableFeature(
1025 security_state::kHttpFormWarningFeature); 1025 security_state::kHttpFormWarningFeature);
1026 } 1026 }
1027 1027
1028 void EnableUkmLogging() { 1028 void EnableUkmLogging() {
1029 scoped_feature_list_.InitAndEnableFeature(kAutofillUkmLogging); 1029 scoped_feature_list_.InitAndEnableFeature(kAutofillUkmLogging);
1030 } 1030 }
1031 1031
1032 void EnableAutofillUpstreamRequestCvcIfMissingExperimentAndUkmLogging() {
1033 scoped_feature_list_.InitWithFeatures(
1034 {autofill::kAutofillUpstreamRequestCvcIfMissing, kAutofillUkmLogging},
Mathieu 2017/04/04 23:49:19 nit: no autofill:: ?
Jared Saul 2017/04/05 00:58:29 Done.
1035 {});
1036 }
1037
1032 void ExpectUniqueFillableFormParsedUkm() { 1038 void ExpectUniqueFillableFormParsedUkm() {
1033 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); 1039 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService();
1034 1040
1035 // Check that one source is logged. 1041 // Check that one source is logged.
1036 ASSERT_EQ(1U, ukm_service->sources_count()); 1042 ASSERT_EQ(1U, ukm_service->sources_count());
1037 const ukm::UkmSource* source = GetUkmSources(ukm_service)[0]; 1043 const ukm::UkmSource* source = GetUkmSources(ukm_service)[0];
1038 1044
1039 // Check that one entry is logged. 1045 // Check that one entry is logged.
1040 EXPECT_EQ(1U, ukm_service->entries_count()); 1046 EXPECT_EQ(1U, ukm_service->entries_count());
1041 const ukm::UkmEntry* entry = ukm_service->GetEntry(0); 1047 const ukm::UkmEntry* entry = ukm_service->GetEntry(0);
(...skipping 3790 matching lines...) Expand 10 before | Expand all | Expand 10 after
4832 // Verify that the correct histogram entry (and only that) was logged. 4838 // Verify that the correct histogram entry (and only that) was logged.
4833 histogram_tester.ExpectUniqueSample( 4839 histogram_tester.ExpectUniqueSample(
4834 "Autofill.CardUploadDecisionExpanded", 4840 "Autofill.CardUploadDecisionExpanded",
4835 AutofillMetrics::UPLOAD_OFFERED, 1); 4841 AutofillMetrics::UPLOAD_OFFERED, 1);
4836 // Verify that the correct UKM was logged. 4842 // Verify that the correct UKM was logged.
4837 ExpectCardUploadDecisionUkm(AutofillMetrics::UPLOAD_OFFERED); 4843 ExpectCardUploadDecisionUkm(AutofillMetrics::UPLOAD_OFFERED);
4838 } 4844 }
4839 4845
4840 // TODO(crbug.com/666704): Flaky on android_n5x_swarming_rel bot. 4846 // TODO(crbug.com/666704): Flaky on android_n5x_swarming_rel bot.
4841 #if defined(OS_ANDROID) 4847 #if defined(OS_ANDROID)
4848 #define MAYBE_UploadCreditCard_NoCvcFieldOnForm \
4849 DISABLED_UploadCreditCard_NoCvcFieldOnForm
4850 #else
4851 #define MAYBE_UploadCreditCard_NoCvcFieldOnForm \
4852 UploadCreditCard_NoCvcFieldOnForm
4853 #endif
4854 TEST_F(AutofillManagerTest, MAYBE_UploadCreditCard_NoCvcFieldOnForm) {
4855 EnableAutofillUpstreamRequestCvcIfMissingExperimentAndUkmLogging();
4856 autofill_manager_->set_credit_card_upload_enabled(true);
4857
4858 // Remove the profiles that were created in the TestPersonalDataManager
4859 // constructor because they would result in conflicting names that would
4860 // prevent the upload.
4861 personal_data_.ClearAutofillProfiles();
4862
4863 // Create, fill and submit an address form in order to establish a recent
4864 // profile which can be selected for the upload request.
4865 FormData address_form;
4866 test::CreateTestAddressFormData(&address_form);
4867 FormsSeen(std::vector<FormData>(1, address_form));
4868 ManuallyFillAddressForm("Flo", "Master", "77401", "US", &address_form);
4869 FormSubmitted(address_form);
4870
4871 // Set up our credit card form data. Note that CVC field is missing.
4872 FormData credit_card_form;
4873 credit_card_form.name = ASCIIToUTF16("MyForm");
4874 credit_card_form.origin = GURL("https://myform.com/form.html");
4875 credit_card_form.action = GURL("https://myform.com/submit.html");
4876
4877 FormFieldData field;
4878 test::CreateTestFormField("Card Name", "cardname", "", "text", &field);
jiahuiguo 2017/04/05 00:47:06 Inline comment indicating which field is this? e.g
Jared Saul 2017/04/05 00:58:29 Discussed offline; this is part of the CreateTestF
4879 credit_card_form.fields.push_back(field);
4880 test::CreateTestFormField("Card Number", "cardnumber", "", "text", &field);
4881 credit_card_form.fields.push_back(field);
4882 test::CreateTestFormField("Expiration Month", "ccmonth", "", "text", &field);
4883 credit_card_form.fields.push_back(field);
4884 test::CreateTestFormField("Expiration Year", "ccyear", "", "text", &field);
4885 credit_card_form.fields.push_back(field);
4886
4887 FormsSeen(std::vector<FormData>(1, credit_card_form));
4888
4889 // Edit the data, and submit.
4890 credit_card_form.fields[0].value = ASCIIToUTF16("Flo Master");
4891 credit_card_form.fields[1].value = ASCIIToUTF16("4111111111111111");
4892 credit_card_form.fields[2].value = ASCIIToUTF16("11");
4893 credit_card_form.fields[3].value = ASCIIToUTF16("2017");
4894
4895 base::HistogramTester histogram_tester;
4896
4897 // Upload should still happen as long as the user provides CVC in the bubble.
4898 EXPECT_CALL(autofill_client_, ConfirmSaveCreditCardLocally(_, _)).Times(0);
Mathieu 2017/04/04 23:49:19 should we expect that Confirm...ToCloud is called?
Jared Saul 2017/04/05 00:58:29 I also wondered why there are no tests for that in
4899 FormSubmitted(credit_card_form);
4900 EXPECT_TRUE(autofill_manager_->credit_card_was_uploaded());
4901
4902 // Verify that the correct histogram entry (and only that) was logged.
4903 histogram_tester.ExpectUniqueSample("Autofill.CardUploadDecisionExpanded",
4904 AutofillMetrics::UPLOAD_OFFERED_NO_CVC,
4905 1);
4906 // Verify that the correct UKM was logged.
4907 ExpectCardUploadDecisionUkm(AutofillMetrics::UPLOAD_OFFERED_NO_CVC);
4908 }
4909
4910 // TODO(crbug.com/666704): Flaky on android_n5x_swarming_rel bot.
4911 #if defined(OS_ANDROID)
4912 #define MAYBE_UploadCreditCard_NoCvcFieldOnFormExperimentOff \
4913 DISABLED_UploadCreditCard_NoCvcFieldOnFormExperimentOff
4914 #else
4915 #define MAYBE_UploadCreditCard_NoCvcFieldOnFormExperimentOff \
4916 UploadCreditCard_NoCvcFieldOnFormExperimentOff
4917 #endif
4918 TEST_F(AutofillManagerTest,
4919 MAYBE_UploadCreditCard_NoCvcFieldOnFormExperimentOff) {
4920 EnableUkmLogging();
4921 autofill_manager_->set_credit_card_upload_enabled(true);
4922
4923 // Remove the profiles that were created in the TestPersonalDataManager
4924 // constructor because they would result in conflicting names that would
4925 // prevent the upload.
4926 personal_data_.ClearAutofillProfiles();
4927
4928 // Create, fill and submit an address form in order to establish a recent
4929 // profile which can be selected for the upload request.
4930 FormData address_form;
4931 test::CreateTestAddressFormData(&address_form);
4932 FormsSeen(std::vector<FormData>(1, address_form));
4933 ManuallyFillAddressForm("Flo", "Master", "77401", "US", &address_form);
4934 FormSubmitted(address_form);
4935
4936 // Set up our credit card form data. Note that CVC field is missing.
4937 FormData credit_card_form;
4938 credit_card_form.name = ASCIIToUTF16("MyForm");
4939 credit_card_form.origin = GURL("https://myform.com/form.html");
4940 credit_card_form.action = GURL("https://myform.com/submit.html");
4941
4942 FormFieldData field;
4943 test::CreateTestFormField("Card Name", "cardname", "", "text", &field);
4944 credit_card_form.fields.push_back(field);
4945 test::CreateTestFormField("Card Number", "cardnumber", "", "text", &field);
4946 credit_card_form.fields.push_back(field);
4947 test::CreateTestFormField("Expiration Month", "ccmonth", "", "text", &field);
4948 credit_card_form.fields.push_back(field);
4949 test::CreateTestFormField("Expiration Year", "ccyear", "", "text", &field);
4950 credit_card_form.fields.push_back(field);
4951
4952 FormsSeen(std::vector<FormData>(1, credit_card_form));
4953
4954 // Edit the data, and submit.
4955 credit_card_form.fields[0].value = ASCIIToUTF16("Flo Master");
4956 credit_card_form.fields[1].value = ASCIIToUTF16("4111111111111111");
4957 credit_card_form.fields[2].value = ASCIIToUTF16("11");
4958 credit_card_form.fields[3].value = ASCIIToUTF16("2017");
4959
4960 base::HistogramTester histogram_tester;
4961
4962 // Neither a local save nor an upload should happen in this case.
4963 EXPECT_CALL(autofill_client_, ConfirmSaveCreditCardLocally(_, _)).Times(0);
4964 FormSubmitted(credit_card_form);
4965 EXPECT_FALSE(autofill_manager_->credit_card_was_uploaded());
4966
4967 // Verify that the correct histogram entry (and only that) was logged.
4968 histogram_tester.ExpectUniqueSample(
4969 "Autofill.CardUploadDecisionExpanded",
4970 AutofillMetrics::UPLOAD_NOT_OFFERED_NO_CVC, 1);
4971 // Verify that the correct UKM was logged.
4972 ExpectCardUploadDecisionUkm(AutofillMetrics::UPLOAD_NOT_OFFERED_NO_CVC);
4973
4974 rappor::TestRapporServiceImpl* rappor_service =
4975 autofill_client_.test_rappor_service();
4976 EXPECT_EQ(1, rappor_service->GetReportsCount());
4977 std::string sample;
4978 rappor::RapporType type;
4979 EXPECT_TRUE(rappor_service->GetRecordedSampleForMetric(
4980 "Autofill.CardUploadNotOfferedNoCvc", &sample, &type));
4981 EXPECT_EQ("myform.com", sample);
4982 EXPECT_EQ(rappor::ETLD_PLUS_ONE_RAPPOR_TYPE, type);
4983 }
4984
4985 // TODO(crbug.com/666704): Flaky on android_n5x_swarming_rel bot.
4986 #if defined(OS_ANDROID)
4842 #define MAYBE_UploadCreditCard_NoProfileAvailable DISABLED_UploadCreditCard_NoPr ofileAvailable 4987 #define MAYBE_UploadCreditCard_NoProfileAvailable DISABLED_UploadCreditCard_NoPr ofileAvailable
4843 #else 4988 #else
4844 #define MAYBE_UploadCreditCard_NoProfileAvailable UploadCreditCard_NoProfileAvai lable 4989 #define MAYBE_UploadCreditCard_NoProfileAvailable UploadCreditCard_NoProfileAvai lable
4845 #endif 4990 #endif
4846 TEST_F(AutofillManagerTest, MAYBE_UploadCreditCard_NoProfileAvailable) { 4991 TEST_F(AutofillManagerTest, MAYBE_UploadCreditCard_NoProfileAvailable) {
4847 EnableUkmLogging(); 4992 EnableUkmLogging();
4848 personal_data_.ClearAutofillProfiles(); 4993 personal_data_.ClearAutofillProfiles();
4849 autofill_manager_->set_credit_card_upload_enabled(true); 4994 autofill_manager_->set_credit_card_upload_enabled(true);
4850 4995
4851 // Don't fill or submit an address form. 4996 // Don't fill or submit an address form.
(...skipping 1038 matching lines...) Expand 10 before | Expand all | Expand 10 after
5890 FormsSeen({form}); 6035 FormsSeen({form});
5891 6036
5892 // Suggestions should be displayed. 6037 // Suggestions should be displayed.
5893 for (const FormFieldData& field : form.fields) { 6038 for (const FormFieldData& field : form.fields) {
5894 GetAutofillSuggestions(form, field); 6039 GetAutofillSuggestions(form, field);
5895 EXPECT_TRUE(external_delegate_->on_suggestions_returned_seen()); 6040 EXPECT_TRUE(external_delegate_->on_suggestions_returned_seen());
5896 } 6041 }
5897 } 6042 }
5898 6043
5899 } // namespace autofill 6044 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698