| Index: chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc
|
| diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc
|
| index 9432dc387b3f56cab20dfa49b55e9780a838c87d..a2b661fccf00fe08a0cbf477ee09d58d3b777ae9 100644
|
| --- a/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc
|
| +++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc
|
| @@ -35,8 +35,11 @@
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +using password_bubble_experiment::kBrandingExperimentName;
|
| using password_bubble_experiment::kChromeSignInPasswordPromoExperimentName;
|
| using password_bubble_experiment::kChromeSignInPasswordPromoThresholdParam;
|
| +using password_bubble_experiment::kSmartLockBrandingGroupName;
|
| +using password_bubble_experiment::kSmartLockBrandingSavePromptOnlyGroupName;
|
| using ::testing::AnyNumber;
|
| using ::testing::Return;
|
| using ::testing::ReturnRef;
|
| @@ -44,27 +47,24 @@ using ::testing::_;
|
|
|
| namespace {
|
|
|
| -constexpr char kFakeGroup[] = "FakeGroup";
|
| -constexpr char kSignInPromoCountTilNoThanksMetric[] =
|
| +const char kFakeGroup[] = "FakeGroup";
|
| +const char kSignInPromoCountTilNoThanksMetric[] =
|
| "PasswordManager.SignInPromoCountTilNoThanks";
|
| -constexpr char kSignInPromoCountTilSignInMetric[] =
|
| +const char kSignInPromoCountTilSignInMetric[] =
|
| "PasswordManager.SignInPromoCountTilSignIn";
|
| -constexpr char kSignInPromoDismissalCountMetric[] =
|
| +const char kSignInPromoDismissalCountMetric[] =
|
| "PasswordManager.SignInPromoDismissalCount";
|
| -constexpr char kSignInPromoDismissalReasonMetric[] =
|
| - "PasswordManager.SignInPromo";
|
| -constexpr char kSiteOrigin[] = "http://example.com/login";
|
| -constexpr char kUsername[] = "Admin";
|
| -constexpr char kUIDismissalReasonMetric[] = "PasswordManager.UIDismissalReason";
|
| +const char kSignInPromoDismissalReasonMetric[] = "PasswordManager.SignInPromo";
|
| +const char kSiteOrigin[] = "http://example.com/login";
|
| +const char kUsername[] = "Admin";
|
| +const char kUIDismissalReasonMetric[] = "PasswordManager.UIDismissalReason";
|
|
|
| class TestSyncService : public browser_sync::ProfileSyncServiceMock {
|
| public:
|
| - enum class SyncedTypes { ALL, NONE };
|
| -
|
| explicit TestSyncService(Profile* profile)
|
| : browser_sync::ProfileSyncServiceMock(
|
| CreateProfileSyncServiceParamsForTest(profile)),
|
| - synced_types_(SyncedTypes::NONE) {}
|
| + smartlock_enabled_(false) {}
|
| ~TestSyncService() override {}
|
|
|
| // FakeSyncService:
|
| @@ -72,14 +72,8 @@ class TestSyncService : public browser_sync::ProfileSyncServiceMock {
|
| bool IsSyncAllowed() const override { return true; }
|
| bool IsSyncActive() const override { return true; }
|
| syncer::ModelTypeSet GetActiveDataTypes() const override {
|
| - switch (synced_types_) {
|
| - case SyncedTypes::ALL:
|
| - return syncer::ModelTypeSet::All();
|
| - case SyncedTypes::NONE:
|
| - return syncer::ModelTypeSet();
|
| - }
|
| - NOTREACHED();
|
| - return syncer::ModelTypeSet();
|
| + return smartlock_enabled_ ? syncer::ModelTypeSet::All()
|
| + : syncer::ModelTypeSet();
|
| }
|
| bool CanSyncStart() const override { return true; }
|
| syncer::ModelTypeSet GetPreferredDataTypes() const override {
|
| @@ -87,12 +81,12 @@ class TestSyncService : public browser_sync::ProfileSyncServiceMock {
|
| }
|
| bool IsUsingSecondaryPassphrase() const override { return false; }
|
|
|
| - void set_synced_types(SyncedTypes synced_types) {
|
| - synced_types_ = synced_types;
|
| + void set_smartlock_enabled(bool smartlock_enabled) {
|
| + smartlock_enabled_ = smartlock_enabled;
|
| }
|
|
|
| private:
|
| - SyncedTypes synced_types_;
|
| + bool smartlock_enabled_;
|
| };
|
|
|
| std::unique_ptr<KeyedService> TestingSyncFactoryFunction(
|
| @@ -326,6 +320,46 @@ TEST_F(ManagePasswordsBubbleModelTest, ClickUpdate) {
|
| DestroyModel();
|
| }
|
|
|
| +TEST_F(ManagePasswordsBubbleModelTest, ShowSmartLockWarmWelcome) {
|
| + TestSyncService* sync_service = static_cast<TestSyncService*>(
|
| + ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse(
|
| + profile(), &TestingSyncFactoryFunction));
|
| + sync_service->set_smartlock_enabled(true);
|
| + base::FieldTrialList::CreateFieldTrial(kBrandingExperimentName,
|
| + kSmartLockBrandingGroupName);
|
| +
|
| + PretendPasswordWaiting();
|
| +
|
| + EXPECT_TRUE(model()->ShouldShowGoogleSmartLockWelcome());
|
| + EXPECT_CALL(*GetStore(), AddSiteStatsImpl(_));
|
| + DestroyModel();
|
| + PretendPasswordWaiting();
|
| +
|
| + EXPECT_FALSE(model()->ShouldShowGoogleSmartLockWelcome());
|
| + EXPECT_TRUE(prefs()->GetBoolean(
|
| + password_manager::prefs::kWasSavePrompFirstRunExperienceShown));
|
| +}
|
| +
|
| +TEST_F(ManagePasswordsBubbleModelTest, OmitSmartLockWarmWelcome) {
|
| + TestSyncService* sync_service = static_cast<TestSyncService*>(
|
| + ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse(
|
| + profile(), &TestingSyncFactoryFunction));
|
| + sync_service->set_smartlock_enabled(false);
|
| + base::FieldTrialList::CreateFieldTrial(kBrandingExperimentName,
|
| + kSmartLockBrandingGroupName);
|
| +
|
| + PretendPasswordWaiting();
|
| +
|
| + EXPECT_FALSE(model()->ShouldShowGoogleSmartLockWelcome());
|
| + EXPECT_CALL(*GetStore(), AddSiteStatsImpl(_));
|
| + DestroyModel();
|
| + PretendPasswordWaiting();
|
| +
|
| + EXPECT_FALSE(model()->ShouldShowGoogleSmartLockWelcome());
|
| + EXPECT_FALSE(prefs()->GetBoolean(
|
| + password_manager::prefs::kWasSavePrompFirstRunExperienceShown));
|
| +}
|
| +
|
| TEST_F(ManagePasswordsBubbleModelTest, OnBrandLinkClicked) {
|
| PretendPasswordWaiting();
|
|
|
| @@ -434,8 +468,11 @@ TEST_F(ManagePasswordsBubbleModelTest, SignInPromoDismiss) {
|
|
|
| namespace {
|
|
|
| +enum class SmartLockStatus { ENABLE, DISABLE };
|
| +
|
| struct TitleTestCase {
|
| - TestSyncService::SyncedTypes synced_types;
|
| + const char* experiment_group;
|
| + SmartLockStatus smartlock_status;
|
| const char* expected_title;
|
| };
|
|
|
| @@ -450,7 +487,12 @@ TEST_P(ManagePasswordsBubbleModelTitleTest, BrandedTitleOnSaving) {
|
| TestSyncService* sync_service = static_cast<TestSyncService*>(
|
| ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse(
|
| profile(), &TestingSyncFactoryFunction));
|
| - sync_service->set_synced_types(test_case.synced_types);
|
| + sync_service->set_smartlock_enabled(test_case.smartlock_status ==
|
| + SmartLockStatus::ENABLE);
|
| + if (test_case.experiment_group) {
|
| + base::FieldTrialList::CreateFieldTrial(kBrandingExperimentName,
|
| + test_case.experiment_group);
|
| + }
|
|
|
| PretendPasswordWaiting();
|
| EXPECT_THAT(base::UTF16ToUTF8(model()->title()),
|
| @@ -462,9 +504,17 @@ namespace {
|
| // Below, "Chrom" is the common prefix of Chromium and Google Chrome. Ideally,
|
| // we would use the localised strings, but ResourceBundle does not get
|
| // initialised for this unittest.
|
| -constexpr TitleTestCase kTitleTestCases[] = {
|
| - {TestSyncService::SyncedTypes::ALL, "Google Smart Lock"},
|
| - {TestSyncService::SyncedTypes::NONE, "Chrom"},
|
| +const TitleTestCase kTitleTestCases[] = {
|
| + {kSmartLockBrandingGroupName, SmartLockStatus::ENABLE, "Google Smart Lock"},
|
| + {kSmartLockBrandingSavePromptOnlyGroupName, SmartLockStatus::ENABLE,
|
| + "Google Smart Lock"},
|
| + {nullptr, SmartLockStatus::ENABLE, "Chrom"},
|
| + {"Default", SmartLockStatus::ENABLE, "Chrom"},
|
| + {kSmartLockBrandingGroupName, SmartLockStatus::DISABLE, "Chrom"},
|
| + {kSmartLockBrandingSavePromptOnlyGroupName, SmartLockStatus::DISABLE,
|
| + "Chrom"},
|
| + {"Default", SmartLockStatus::DISABLE, "Chrom"},
|
| + {nullptr, SmartLockStatus::DISABLE, "Chrom"},
|
| };
|
|
|
| } // namespace
|
| @@ -473,24 +523,67 @@ INSTANTIATE_TEST_CASE_P(Default,
|
| ManagePasswordsBubbleModelTitleTest,
|
| ::testing::ValuesIn(kTitleTestCases));
|
|
|
| +namespace {
|
| +
|
| +enum class ManageLinkTarget { EXTERNAL_PASSWORD_MANAGER, SETTINGS_PAGE };
|
| +
|
| +struct ManageLinkTestCase {
|
| + const char* experiment_group;
|
| + SmartLockStatus smartlock_status;
|
| + ManageLinkTarget expected_target;
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| class ManagePasswordsBubbleModelManageLinkTest
|
| : public ManagePasswordsBubbleModelTest,
|
| - public ::testing::WithParamInterface<TestSyncService::SyncedTypes> {};
|
| + public ::testing::WithParamInterface<ManageLinkTestCase> {};
|
|
|
| TEST_P(ManagePasswordsBubbleModelManageLinkTest, OnManageLinkClicked) {
|
| + ManageLinkTestCase test_case = GetParam();
|
| TestSyncService* sync_service = static_cast<TestSyncService*>(
|
| ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse(
|
| profile(), &TestingSyncFactoryFunction));
|
| - sync_service->set_synced_types(GetParam());
|
| + sync_service->set_smartlock_enabled(test_case.smartlock_status ==
|
| + SmartLockStatus::ENABLE);
|
| + if (test_case.experiment_group) {
|
| + base::FieldTrialList::CreateFieldTrial(kBrandingExperimentName,
|
| + test_case.experiment_group);
|
| + }
|
|
|
| PretendManagingPasswords();
|
|
|
| - EXPECT_CALL(*controller(), NavigateToPasswordManagerSettingsPage());
|
| + switch (test_case.expected_target) {
|
| + case ManageLinkTarget::EXTERNAL_PASSWORD_MANAGER:
|
| + EXPECT_CALL(*controller(), NavigateToExternalPasswordManager());
|
| + break;
|
| + case ManageLinkTarget::SETTINGS_PAGE:
|
| + EXPECT_CALL(*controller(), NavigateToPasswordManagerSettingsPage());
|
| + break;
|
| + }
|
|
|
| model()->OnManageLinkClicked();
|
| }
|
|
|
| +namespace {
|
| +
|
| +const ManageLinkTestCase kManageLinkTestCases[] = {
|
| + {kSmartLockBrandingGroupName, SmartLockStatus::ENABLE,
|
| + ManageLinkTarget::EXTERNAL_PASSWORD_MANAGER},
|
| + {kSmartLockBrandingSavePromptOnlyGroupName, SmartLockStatus::ENABLE,
|
| + ManageLinkTarget::SETTINGS_PAGE},
|
| + {nullptr, SmartLockStatus::ENABLE, ManageLinkTarget::SETTINGS_PAGE},
|
| + {"Default", SmartLockStatus::ENABLE, ManageLinkTarget::SETTINGS_PAGE},
|
| + {kSmartLockBrandingGroupName, SmartLockStatus::DISABLE,
|
| + ManageLinkTarget::SETTINGS_PAGE},
|
| + {kSmartLockBrandingSavePromptOnlyGroupName, SmartLockStatus::DISABLE,
|
| + ManageLinkTarget::SETTINGS_PAGE},
|
| + {nullptr, SmartLockStatus::DISABLE, ManageLinkTarget::SETTINGS_PAGE},
|
| + {"Default", SmartLockStatus::DISABLE, ManageLinkTarget::SETTINGS_PAGE},
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| INSTANTIATE_TEST_CASE_P(Default,
|
| ManagePasswordsBubbleModelManageLinkTest,
|
| - ::testing::Values(TestSyncService::SyncedTypes::ALL,
|
| - TestSyncService::SyncedTypes::NONE));
|
| + ::testing::ValuesIn(kManageLinkTestCases));
|
|
|