| Index: components/password_manager/core/browser/password_bubble_experiment_unittest.cc
|
| diff --git a/components/password_manager/core/browser/password_bubble_experiment_unittest.cc b/components/password_manager/core/browser/password_bubble_experiment_unittest.cc
|
| index 4f4baa8cd4fb8764050fc85ba26ae281ac59eabc..b9ba0531ceed07d93e0b1824343016931e9ae907 100644
|
| --- a/components/password_manager/core/browser/password_bubble_experiment_unittest.cc
|
| +++ b/components/password_manager/core/browser/password_bubble_experiment_unittest.cc
|
| @@ -12,6 +12,7 @@
|
| #include "components/prefs/pref_registry_simple.h"
|
| #include "components/prefs/pref_service.h"
|
| #include "components/prefs/testing_pref_service.h"
|
| +#include "components/sync/base/model_type.h"
|
| #include "components/sync/driver/fake_sync_service.h"
|
| #include "components/variations/variations_associated_data.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| @@ -21,50 +22,8 @@ namespace password_bubble_experiment {
|
|
|
| namespace {
|
|
|
| -const char kSmartLockNoBrandingGroupName[] = "NoSmartLockBranding";
|
| -
|
| enum class CustomPassphraseState { NONE, SET };
|
|
|
| -enum class SavePromptFirstRunExperience { NONE, PRESENT };
|
| -
|
| -enum class UserType { SMARTLOCK, NOT_SMARTLOCK };
|
| -
|
| -struct IsSmartLockBrandingEnabledTestcase {
|
| - CustomPassphraseState passphrase_state;
|
| - syncer::ModelType type;
|
| - SmartLockBranding expected_branding;
|
| - UserType expected_user_type;
|
| -};
|
| -
|
| -std::ostream& operator<<(std::ostream& os,
|
| - const IsSmartLockBrandingEnabledTestcase& testcase) {
|
| - os << (testcase.passphrase_state == CustomPassphraseState::SET ? "{SET, "
|
| - : "{NONE, ");
|
| - os << (testcase.type == syncer::PASSWORDS ? "syncer::PASSWORDS, "
|
| - : "not syncer::PASSWORDS, ");
|
| - switch (testcase.expected_branding) {
|
| - case SmartLockBranding::NONE:
|
| - os << "NONE, ";
|
| - break;
|
| - case SmartLockBranding::FULL:
|
| - os << "FULL, ";
|
| - break;
|
| - case SmartLockBranding::SAVE_PROMPT_ONLY:
|
| - os << "SAVE_PROMPT_ONLY, ";
|
| - break;
|
| - }
|
| - os << (testcase.expected_user_type == UserType::SMARTLOCK ? "SMARTLOCK}"
|
| - : "NOT_SMARTLOCK}");
|
| - return os;
|
| -}
|
| -
|
| -struct ShouldShowSavePromptFirstRunExperienceTestcase {
|
| - CustomPassphraseState passphrase_state;
|
| - syncer::ModelType type;
|
| - bool pref_value;
|
| - SavePromptFirstRunExperience first_run_experience;
|
| -};
|
| -
|
| class TestSyncService : public syncer::FakeSyncService {
|
| public:
|
| // FakeSyncService overrides.
|
| @@ -128,39 +87,9 @@ class PasswordManagerPasswordBubbleExperimentTest : public testing::Test {
|
|
|
| PrefService* prefs() { return &pref_service_; }
|
|
|
| - void EnforceExperimentGroup(const char* group_name) {
|
| - ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(kBrandingExperimentName,
|
| - group_name));
|
| - }
|
| -
|
| TestSyncService* sync_service() { return &fake_sync_service_; }
|
|
|
| - void TestIsSmartLockBrandingEnabledTestcase(
|
| - const IsSmartLockBrandingEnabledTestcase& test_case) {
|
| - SetupFakeSyncServiceForTestCase(test_case.type, test_case.passphrase_state);
|
| - EXPECT_EQ(test_case.expected_branding,
|
| - GetSmartLockBrandingState(sync_service()));
|
| - EXPECT_EQ(test_case.expected_user_type == UserType::SMARTLOCK,
|
| - IsSmartLockUser(sync_service()));
|
| - }
|
| -
|
| - void TestShouldShowSavePromptFirstRunExperienceTestcase(
|
| - const ShouldShowSavePromptFirstRunExperienceTestcase& test_case) {
|
| - SetupFakeSyncServiceForTestCase(test_case.type, test_case.passphrase_state);
|
| - prefs()->SetBoolean(
|
| - password_manager::prefs::kWasSavePrompFirstRunExperienceShown,
|
| - test_case.pref_value);
|
| - bool should_show_first_run_experience =
|
| - ShouldShowSavePromptFirstRunExperience(sync_service(), prefs());
|
| - if (test_case.first_run_experience ==
|
| - SavePromptFirstRunExperience::PRESENT) {
|
| - EXPECT_FALSE(should_show_first_run_experience);
|
| - } else {
|
| - EXPECT_FALSE(should_show_first_run_experience);
|
| - }
|
| - }
|
| -
|
| - private:
|
| + protected:
|
| void SetupFakeSyncServiceForTestCase(syncer::ModelType type,
|
| CustomPassphraseState passphrase_state) {
|
| syncer::ModelTypeSet active_types;
|
| @@ -171,164 +100,17 @@ class PasswordManagerPasswordBubbleExperimentTest : public testing::Test {
|
| passphrase_state == CustomPassphraseState::SET);
|
| }
|
|
|
| + private:
|
| TestSyncService fake_sync_service_;
|
| base::FieldTrialList field_trial_list_;
|
| TestingPrefServiceSimple pref_service_;
|
| };
|
|
|
| TEST_F(PasswordManagerPasswordBubbleExperimentTest,
|
| - IsSmartLockBrandingEnabledTestNoBranding) {
|
| - const IsSmartLockBrandingEnabledTestcase kTestData[] = {
|
| - {CustomPassphraseState::SET, syncer::PASSWORDS, SmartLockBranding::NONE,
|
| - UserType::NOT_SMARTLOCK},
|
| - {CustomPassphraseState::SET, syncer::BOOKMARKS, SmartLockBranding::NONE,
|
| - UserType::NOT_SMARTLOCK},
|
| - {CustomPassphraseState::NONE, syncer::PASSWORDS, SmartLockBranding::NONE,
|
| - UserType::SMARTLOCK},
|
| - {CustomPassphraseState::NONE, syncer::BOOKMARKS, SmartLockBranding::NONE,
|
| - UserType::NOT_SMARTLOCK},
|
| - };
|
| -
|
| - EnforceExperimentGroup(kSmartLockNoBrandingGroupName);
|
| - for (const auto& test_case : kTestData) {
|
| - SCOPED_TRACE(testing::Message("test_case = ") << test_case);
|
| - TestIsSmartLockBrandingEnabledTestcase(test_case);
|
| - }
|
| -}
|
| -
|
| -TEST_F(PasswordManagerPasswordBubbleExperimentTest,
|
| - IsSmartLockBrandingEnabledTest_FULL) {
|
| - const IsSmartLockBrandingEnabledTestcase kTestData[] = {
|
| - {CustomPassphraseState::SET, syncer::PASSWORDS, SmartLockBranding::NONE,
|
| - UserType::NOT_SMARTLOCK},
|
| - {CustomPassphraseState::SET, syncer::BOOKMARKS, SmartLockBranding::NONE,
|
| - UserType::NOT_SMARTLOCK},
|
| - {CustomPassphraseState::NONE, syncer::PASSWORDS, SmartLockBranding::FULL,
|
| - UserType::SMARTLOCK},
|
| - {CustomPassphraseState::NONE, syncer::BOOKMARKS, SmartLockBranding::NONE,
|
| - UserType::NOT_SMARTLOCK},
|
| - };
|
| -
|
| - EnforceExperimentGroup(kSmartLockBrandingGroupName);
|
| - for (const auto& test_case : kTestData) {
|
| - SCOPED_TRACE(testing::Message("test_case = ") << test_case);
|
| - TestIsSmartLockBrandingEnabledTestcase(test_case);
|
| - }
|
| -}
|
| -
|
| -TEST_F(PasswordManagerPasswordBubbleExperimentTest,
|
| - IsSmartLockBrandingEnabledTest_SAVE_PROMPT_ONLY) {
|
| - const IsSmartLockBrandingEnabledTestcase kTestData[] = {
|
| - {CustomPassphraseState::SET, syncer::PASSWORDS, SmartLockBranding::NONE,
|
| - UserType::NOT_SMARTLOCK},
|
| - {CustomPassphraseState::SET, syncer::BOOKMARKS, SmartLockBranding::NONE,
|
| - UserType::NOT_SMARTLOCK},
|
| - {CustomPassphraseState::NONE, syncer::PASSWORDS,
|
| - SmartLockBranding::SAVE_PROMPT_ONLY, UserType::SMARTLOCK},
|
| - {CustomPassphraseState::NONE, syncer::BOOKMARKS, SmartLockBranding::NONE,
|
| - UserType::NOT_SMARTLOCK},
|
| - };
|
| -
|
| - EnforceExperimentGroup(kSmartLockBrandingSavePromptOnlyGroupName);
|
| - for (const auto& test_case : kTestData) {
|
| - SCOPED_TRACE(testing::Message("test_case = ") << test_case);
|
| - TestIsSmartLockBrandingEnabledTestcase(test_case);
|
| - }
|
| -}
|
| -
|
| -TEST_F(PasswordManagerPasswordBubbleExperimentTest,
|
| - ShoulShowSavePrompBrandingGroup) {
|
| - const struct ShouldShowSavePromptFirstRunExperienceTestcase kTestData[] = {
|
| - {CustomPassphraseState::SET, syncer::PASSWORDS, true,
|
| - SavePromptFirstRunExperience::NONE},
|
| - {CustomPassphraseState::SET, syncer::PASSWORDS, false,
|
| - SavePromptFirstRunExperience::NONE},
|
| - {CustomPassphraseState::SET, syncer::BOOKMARKS, true,
|
| - SavePromptFirstRunExperience::NONE},
|
| - {CustomPassphraseState::SET, syncer::BOOKMARKS, false,
|
| - SavePromptFirstRunExperience::NONE},
|
| - {CustomPassphraseState::NONE, syncer::PASSWORDS, true,
|
| - SavePromptFirstRunExperience::NONE},
|
| - {CustomPassphraseState::NONE, syncer::PASSWORDS, false,
|
| - SavePromptFirstRunExperience::NONE},
|
| - {CustomPassphraseState::NONE, syncer::BOOKMARKS, true,
|
| - SavePromptFirstRunExperience::NONE},
|
| - {CustomPassphraseState::NONE, syncer::BOOKMARKS, false,
|
| - SavePromptFirstRunExperience::NONE},
|
| - };
|
| -
|
| - EnforceExperimentGroup(kSmartLockBrandingGroupName);
|
| - for (const auto& test_case : kTestData) {
|
| - TestShouldShowSavePromptFirstRunExperienceTestcase(test_case);
|
| - }
|
| -}
|
| -
|
| -TEST_F(PasswordManagerPasswordBubbleExperimentTest,
|
| - ShoulShowSavePrompNoBrandingGroup) {
|
| - const struct ShouldShowSavePromptFirstRunExperienceTestcase kTestData[] = {
|
| - {CustomPassphraseState::SET, syncer::PASSWORDS, true,
|
| - SavePromptFirstRunExperience::NONE},
|
| - {CustomPassphraseState::SET, syncer::PASSWORDS, false,
|
| - SavePromptFirstRunExperience::NONE},
|
| - {CustomPassphraseState::SET, syncer::BOOKMARKS, true,
|
| - SavePromptFirstRunExperience::NONE},
|
| - {CustomPassphraseState::SET, syncer::BOOKMARKS, false,
|
| - SavePromptFirstRunExperience::NONE},
|
| - {CustomPassphraseState::NONE, syncer::PASSWORDS, true,
|
| - SavePromptFirstRunExperience::NONE},
|
| - {CustomPassphraseState::NONE, syncer::PASSWORDS, false,
|
| - SavePromptFirstRunExperience::NONE},
|
| - {CustomPassphraseState::NONE, syncer::BOOKMARKS, true,
|
| - SavePromptFirstRunExperience::NONE},
|
| - {CustomPassphraseState::NONE, syncer::BOOKMARKS, false,
|
| - SavePromptFirstRunExperience::NONE},
|
| - };
|
| -
|
| - EnforceExperimentGroup(kSmartLockNoBrandingGroupName);
|
| - for (const auto& test_case : kTestData) {
|
| - TestShouldShowSavePromptFirstRunExperienceTestcase(test_case);
|
| - }
|
| -}
|
| -
|
| -TEST_F(PasswordManagerPasswordBubbleExperimentTest,
|
| - RecordFirstRunExperienceWasShownTest) {
|
| - const struct {
|
| - bool initial_pref_value;
|
| - bool result_pref_value;
|
| - } kTestData[] = {
|
| - {false, true}, {true, true},
|
| - };
|
| - for (const auto& test_case : kTestData) {
|
| - // Record Save prompt first run experience.
|
| - prefs()->SetBoolean(
|
| - password_manager::prefs::kWasSavePrompFirstRunExperienceShown,
|
| - test_case.initial_pref_value);
|
| - RecordSavePromptFirstRunExperienceWasShown(prefs());
|
| - EXPECT_EQ(
|
| - test_case.result_pref_value,
|
| - prefs()->GetBoolean(
|
| - password_manager::prefs::kWasSavePrompFirstRunExperienceShown));
|
| - // Record Auto sign-in first run experience.
|
| - prefs()->SetBoolean(
|
| - password_manager::prefs::kWasAutoSignInFirstRunExperienceShown,
|
| - test_case.initial_pref_value);
|
| - EXPECT_EQ(!test_case.initial_pref_value,
|
| - ShouldShowAutoSignInPromptFirstRunExperience(prefs()));
|
| - RecordAutoSignInPromptFirstRunExperienceWasShown(prefs());
|
| - EXPECT_EQ(
|
| - test_case.result_pref_value,
|
| - prefs()->GetBoolean(
|
| - password_manager::prefs::kWasAutoSignInFirstRunExperienceShown));
|
| - EXPECT_EQ(!test_case.result_pref_value,
|
| - ShouldShowAutoSignInPromptFirstRunExperience(prefs()));
|
| - }
|
| -}
|
| -
|
| -TEST_F(PasswordManagerPasswordBubbleExperimentTest,
|
| ShouldShowChromeSignInPasswordPromo) {
|
| // By default the promo is off.
|
| EXPECT_FALSE(ShouldShowChromeSignInPasswordPromo(prefs(), nullptr));
|
| - const struct {
|
| + constexpr struct {
|
| bool was_already_clicked;
|
| bool is_sync_allowed;
|
| bool is_first_setup_complete;
|
| @@ -362,4 +144,24 @@ TEST_F(PasswordManagerPasswordBubbleExperimentTest,
|
| }
|
| }
|
|
|
| +TEST_F(PasswordManagerPasswordBubbleExperimentTest, IsSmartLockUser) {
|
| + constexpr struct {
|
| + syncer::ModelType type;
|
| + CustomPassphraseState passphrase_state;
|
| + bool expected_smart_lock_user;
|
| + } kTestData[] = {
|
| + {syncer::ModelType::BOOKMARKS, CustomPassphraseState::NONE, false},
|
| + {syncer::ModelType::BOOKMARKS, CustomPassphraseState::SET, false},
|
| + {syncer::ModelType::PASSWORDS, CustomPassphraseState::NONE, true},
|
| + {syncer::ModelType::PASSWORDS, CustomPassphraseState::SET, false},
|
| + };
|
| + for (const auto& test_case : kTestData) {
|
| + SCOPED_TRACE(testing::Message("#test_case = ") << (&test_case - kTestData));
|
| + SetupFakeSyncServiceForTestCase(test_case.type, test_case.passphrase_state);
|
| +
|
| + EXPECT_EQ(test_case.expected_smart_lock_user,
|
| + IsSmartLockUser(sync_service()));
|
| + }
|
| +}
|
| +
|
| } // namespace password_bubble_experiment
|
|
|