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

Unified Diff: components/autofill/core/browser/autofill_manager_unittest.cc

Issue 2146823003: Autofill Credit Card Signin Promo: Put behind Feature (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed comments Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: components/autofill/core/browser/autofill_manager_unittest.cc
diff --git a/components/autofill/core/browser/autofill_manager_unittest.cc b/components/autofill/core/browser/autofill_manager_unittest.cc
index 5ebd6204cb7769aaa0270aa06f1841a0fec031e2..a99c1174b0c37ff233a51fe7ccf09dd72923dc2e 100644
--- a/components/autofill/core/browser/autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/autofill_manager_unittest.cc
@@ -11,10 +11,12 @@
#include <vector>
#include "base/command_line.h"
+#include "base/feature_list.h"
#include "base/format_macros.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_vector.h"
+#include "base/metrics/field_trial.h"
#include "base/run_loop.h"
#include "base/strings/string16.h"
#include "base/strings/string_number_conversions.h"
@@ -27,6 +29,7 @@
#include "build/build_config.h"
#include "components/autofill/core/browser/autocomplete_history_manager.h"
#include "components/autofill/core/browser/autofill_download_manager.h"
+#include "components/autofill/core/browser/autofill_experiments.h"
#include "components/autofill/core/browser/autofill_profile.h"
#include "components/autofill/core/browser/autofill_test_utils.h"
#include "components/autofill/core/browser/credit_card.h"
@@ -44,6 +47,7 @@
#include "components/autofill/core/common/form_field_data.h"
#include "components/prefs/pref_service.h"
#include "components/rappor/test_rappor_service.h"
+#include "components/variations/variations_associated_data.h"
#include "grit/components_strings.h"
#include "net/url_request/url_request_test_util.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -731,6 +735,8 @@ class TestAutofillExternalDelegate : public AutofillExternalDelegate {
class AutofillManagerTest : public testing::Test {
public:
+ AutofillManagerTest() : field_trial_list_(nullptr) {}
+
void SetUp() override {
autofill_client_.SetPrefs(test::PrefServiceForTesting());
personal_data_.set_database(autofill_client_.GetDatabase());
@@ -749,6 +755,10 @@ class AutofillManagerTest : public testing::Test {
autofill_manager_.get(),
autofill_driver_.get()));
autofill_manager_->SetExternalDelegate(external_delegate_.get());
+
+ // Clear all the things.
+ base::FeatureList::ClearInstanceForTesting();
+ variations::testing::ClearAllVariationParams();
}
void TearDown() override {
@@ -765,6 +775,32 @@ class AutofillManagerTest : public testing::Test {
request_context_ = nullptr;
}
+ void EnableCreditCardSigninPromoFeatureWithLimit(int impression_limit) {
+ const std::string kTrialName = "MyTrial";
+ const std::string kGroupName = "Group1";
+
+ scoped_refptr<base::FieldTrial> trial(
+ base::FieldTrialList::CreateFieldTrial(kTrialName, kGroupName));
+ std::map<std::string, std::string> params;
+ params[kCreditCardSigninPromoImpressionLimitParamKey] =
+ base::IntToString(impression_limit);
+ ASSERT_TRUE(
+ variations::AssociateVariationParams(kTrialName, kGroupName, params));
+
+ // Enable the feature.
+ std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
+ feature_list->RegisterFieldTrialOverride(
+ kAutofillCreditCardSigninPromo.name,
+ base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial.get());
+ base::FeatureList::SetInstance(std::move(feature_list));
+
+ // Double-checking our params made it.
+ std::map<std::string, std::string> actualParams;
+ EXPECT_TRUE(variations::GetVariationParamsByFeature(
+ kAutofillCreditCardSigninPromo, &actualParams));
+ EXPECT_EQ(params, actualParams);
+ }
+
void GetAutofillSuggestions(int query_id,
const FormData& form,
const FormFieldData& field) {
@@ -956,6 +992,7 @@ class AutofillManagerTest : public testing::Test {
TestPaymentsClient* payments_client_;
TestAutofillDownloadManager* download_manager_;
TestPersonalDataManager personal_data_;
+ base::FieldTrialList field_trial_list_;
};
class TestFormStructure : public FormStructure {
@@ -4910,8 +4947,60 @@ TEST_F(AutofillManagerTest, NoCreditCardSuggestionsForNonPrefixTokenMatch) {
}
// Test that ShouldShowCreditCardSigninPromo behaves as expected for a credit
-// card form.
-TEST_F(AutofillManagerTest, ShouldShowCreditCardSigninPromo_CreditCardField) {
+// card form, with no impression limit and the feature enabled.
+TEST_F(AutofillManagerTest,
+ ShouldShowCreditCardSigninPromo_CreditCardField_NoLimit) {
+ // Enable the feature with no impression limit.
+ EnableCreditCardSigninPromoFeatureWithLimit(0);
+
+ // Set up our form data.
+ FormData form;
+ CreateTestCreditCardFormData(&form, true, false);
+ std::vector<FormData> forms(1, form);
+ FormsSeen(forms);
+
+ FormFieldData field;
+ test::CreateTestFormField("Name on Card", "nameoncard", "", "text", &field);
+
+ // The result will depend on what ShouldShowSigninPromo(). We control its
+ // output and verify that both cases behave as expected.
+ EXPECT_CALL(autofill_client_, ShouldShowSigninPromo())
+ .WillOnce(testing::Return(true));
+ EXPECT_TRUE(autofill_manager_->ShouldShowCreditCardSigninPromo(form, field));
+
+ EXPECT_CALL(autofill_client_, ShouldShowSigninPromo())
+ .WillOnce(testing::Return(false));
+ EXPECT_FALSE(autofill_manager_->ShouldShowCreditCardSigninPromo(form, field));
+}
+
+// Test that ShouldShowCreditCardSigninPromo doesn't show for a credit card form
+// when the feature is off.
+TEST_F(AutofillManagerTest,
+ ShouldShowCreditCardSigninPromo_CreditCardField_FeatureOff) {
+ // Set up our form data.
+ FormData form;
+ CreateTestCreditCardFormData(&form, true, false);
+ std::vector<FormData> forms(1, form);
+ FormsSeen(forms);
+
+ FormFieldData field;
+ test::CreateTestFormField("Name on Card", "nameoncard", "", "text", &field);
+
+ // Returns false without calling ShouldShowSigninPromo().
+ EXPECT_CALL(autofill_client_, ShouldShowSigninPromo()).Times(0);
+ EXPECT_FALSE(autofill_manager_->ShouldShowCreditCardSigninPromo(form, field));
+}
+
+// Test that ShouldShowCreditCardSigninPromo behaves as expected for a credit
+// card form with an impression limit and no impressions yet.
+TEST_F(AutofillManagerTest,
+ ShouldShowCreditCardSigninPromo_CreditCardField_UnmetLimit) {
+ // Enable the feature with an impression limit.
+ EnableCreditCardSigninPromoFeatureWithLimit(10);
+ // No impressions yet.
+ ASSERT_EQ(0, autofill_client_.GetPrefs()->GetInteger(
+ prefs::kAutofillCreditCardSigninPromoImpressionCount));
+
// Set up our form data.
FormData form;
CreateTestCreditCardFormData(&form, true, false);
@@ -4921,13 +5010,58 @@ TEST_F(AutofillManagerTest, ShouldShowCreditCardSigninPromo_CreditCardField) {
FormFieldData field;
test::CreateTestFormField("Name on Card", "nameoncard", "", "text", &field);
+ // The mock implementation of ShouldShowSigninPromo() will return true here,
+ // creating an impression, and false below, preventing an impression.
EXPECT_CALL(autofill_client_, ShouldShowSigninPromo())
.WillOnce(testing::Return(true));
EXPECT_TRUE(autofill_manager_->ShouldShowCreditCardSigninPromo(form, field));
+ // Expect to now have an impression.
+ EXPECT_EQ(1, autofill_client_.GetPrefs()->GetInteger(
+ prefs::kAutofillCreditCardSigninPromoImpressionCount));
+
EXPECT_CALL(autofill_client_, ShouldShowSigninPromo())
.WillOnce(testing::Return(false));
EXPECT_FALSE(autofill_manager_->ShouldShowCreditCardSigninPromo(form, field));
+
+ // No additional impression.
+ EXPECT_EQ(1, autofill_client_.GetPrefs()->GetInteger(
+ prefs::kAutofillCreditCardSigninPromoImpressionCount));
+}
+
+// Test that ShouldShowCreditCardSigninPromo behaves as expected for a credit
+// card form with an impression limit that has been attained already.
+TEST_F(AutofillManagerTest,
+ ShouldShowCreditCardSigninPromo_CreditCardField_WithAttainedLimit) {
+ // Enable the feature with an impression limit.
+ EnableCreditCardSigninPromoFeatureWithLimit(10);
+
+ // Set up our form data.
+ FormData form;
+ CreateTestCreditCardFormData(&form, true, false);
+ std::vector<FormData> forms(1, form);
+ FormsSeen(forms);
+
+ FormFieldData field;
+ test::CreateTestFormField("Name on Card", "nameoncard", "", "text", &field);
+
+ // Set the impression count to the same value as the limit.
+ autofill_client_.GetPrefs()->SetInteger(
+ prefs::kAutofillCreditCardSigninPromoImpressionCount, 10);
+
+ // Both calls will now return false, regardless of the mock implementation of
+ // ShouldShowSigninPromo().
+ EXPECT_CALL(autofill_client_, ShouldShowSigninPromo())
+ .WillOnce(testing::Return(true));
+ EXPECT_FALSE(autofill_manager_->ShouldShowCreditCardSigninPromo(form, field));
+
+ EXPECT_CALL(autofill_client_, ShouldShowSigninPromo())
+ .WillOnce(testing::Return(false));
+ EXPECT_FALSE(autofill_manager_->ShouldShowCreditCardSigninPromo(form, field));
+
+ // Number of impressions stay the same.
+ EXPECT_EQ(10, autofill_client_.GetPrefs()->GetInteger(
+ prefs::kAutofillCreditCardSigninPromoImpressionCount));
}
// Test that ShouldShowCreditCardSigninPromo behaves as expected for an address
« no previous file with comments | « components/autofill/core/browser/autofill_manager.cc ('k') | components/autofill/core/common/autofill_pref_names.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698