Chromium Code Reviews| Index: chrome/browser/password_manager/password_manager_setting_migrator_service_unittest.cc |
| diff --git a/chrome/browser/password_manager/password_manager_setting_migrator_service_unittest.cc b/chrome/browser/password_manager/password_manager_setting_migrator_service_unittest.cc |
| index beadf7188e5ebba8ec462afb63fa25edf4435ca0..606f840c934cf6fdc8606614c5f21a9119a99d8b 100644 |
| --- a/chrome/browser/password_manager/password_manager_setting_migrator_service_unittest.cc |
| +++ b/chrome/browser/password_manager/password_manager_setting_migrator_service_unittest.cc |
| @@ -5,8 +5,10 @@ |
| #include "base/json/json_writer.h" |
| #include "base/metrics/field_trial.h" |
| #include "base/prefs/pref_service.h" |
| +#include "base/test/histogram_tester.h" |
| #include "base/values.h" |
| #include "chrome/browser/chrome_notification_types.h" |
| +#include "chrome/browser/password_manager/password_manager_setting_migrator_service.h" |
| #include "chrome/browser/prefs/pref_service_syncable_util.h" |
| #include "chrome/browser/sync/profile_sync_service_factory.h" |
| #include "chrome/browser/sync/profile_sync_service_mock.h" |
| @@ -31,6 +33,9 @@ const char kFieldTrialName[] = "PasswordManagerSettingsMigration"; |
| const char kEnabledGroupName[] = "Enable"; |
| const char kDisabledGroupName[] = "Disable"; |
| +const char kSettingsReconciliationInitialValuesMetrics[] = |
|
engedy
2015/09/24 14:26:18
nit: How about |kInitialValuesHistogramName|? I th
melandory
2015/09/28 07:10:12
Done.
|
| + "PasswordManager.SettingsReconciliation.InitialValues"; |
| + |
| enum BooleanPrefState { |
| OFF, |
| ON, |
| @@ -145,30 +150,6 @@ class PasswordManagerSettingMigratorServiceTest : public testing::Test { |
| base::FieldTrialList::CreateFieldTrial(kFieldTrialName, name); |
| } |
| - void TestOnLocalChange(const std::string& name, bool value) { |
| - PrefService* prefs = profile()->GetPrefs(); |
| - prefs->SetBoolean(prefs::kCredentialsEnableService, !value); |
| - prefs->SetBoolean(prefs::kPasswordManagerSavingEnabled, !value); |
| - NotifyProfileAdded(); |
| - prefs->SetBoolean(name, value); |
| - ExpectValuesForBothPrefValues(value, value); |
| - } |
| - |
| - void TestOnLocalChangeWhenMigrationIsDisabled(const std::string& name, |
| - bool value) { |
| - ResetProfile(); |
| - EnforcePasswordManagerSettingMigrationExperiment(kDisabledGroupName); |
| - PrefService* prefs = profile()->GetPrefs(); |
| - prefs->SetBoolean(prefs::kCredentialsEnableService, !value); |
| - prefs->SetBoolean(prefs::kPasswordManagerSavingEnabled, !value); |
| - NotifyProfileAdded(); |
| - prefs->SetBoolean(name, value); |
| - if (name == prefs::kPasswordManagerSavingEnabled) |
| - ExpectValuesForBothPrefValues(!value, value); |
| - else |
| - ExpectValuesForBothPrefValues(value, !value); |
| - } |
| - |
| private: |
| content::TestBrowserThreadBundle thread_bundle_; |
| scoped_ptr<TestingProfile> profile_; |
| @@ -177,36 +158,47 @@ class PasswordManagerSettingMigratorServiceTest : public testing::Test { |
| DISALLOW_COPY_AND_ASSIGN(PasswordManagerSettingMigratorServiceTest); |
| }; |
| -TEST_F(PasswordManagerSettingMigratorServiceTest, |
| - ReconcileOnLocalChangeOfPasswordManagerSavingEnabledOn) { |
| - TestOnLocalChange(prefs::kPasswordManagerSavingEnabled, true); |
| -} |
| - |
| -TEST_F(PasswordManagerSettingMigratorServiceTest, |
| - ReconcileOnLocalChangeOfPasswordManagerSavingEnabledOff) { |
| - TestOnLocalChange(prefs::kPasswordManagerSavingEnabled, false); |
| -} |
| - |
| -TEST_F(PasswordManagerSettingMigratorServiceTest, |
| - ReconcileOnLocalChangeOfCredentialsEnableServiceOn) { |
| - TestOnLocalChange(prefs::kCredentialsEnableService, true); |
| -} |
| - |
| -TEST_F(PasswordManagerSettingMigratorServiceTest, |
| - ReconcileOnLocalChangeOfCredentialsEnableServiceOff) { |
| - TestOnLocalChange(prefs::kCredentialsEnableService, false); |
| -} |
| - |
| -TEST_F(PasswordManagerSettingMigratorServiceTest, |
| - DoNotReconcileOnLocalChangeOfNewPrefWhenMigrationIsDisabled) { |
| - TestOnLocalChangeWhenMigrationIsDisabled(prefs::kCredentialsEnableService, |
| - false); |
| -} |
| +TEST_F(PasswordManagerSettingMigratorServiceTest, TestMigrationOnLocalChanges) { |
| + const struct { |
| + const char* group; |
| + const char* pref_name; |
| + bool pref_value; |
| + bool expected_new_pref_value; |
| + bool expected_old_pref_value; |
| + } kTestingTable[] = { |
| + {kEnabledGroupName, prefs::kPasswordManagerSavingEnabled, true, true, |
| + true}, |
| + {kEnabledGroupName, prefs::kPasswordManagerSavingEnabled, false, false, |
| + false}, |
| + {kEnabledGroupName, prefs::kCredentialsEnableService, true, true, true}, |
| + {kEnabledGroupName, prefs::kCredentialsEnableService, false, false, |
| + false}, |
| + {kDisabledGroupName, prefs::kPasswordManagerSavingEnabled, false, true, |
| + false}, |
| + {kDisabledGroupName, prefs::kCredentialsEnableService, false, false, |
| + true}}; |
| -TEST_F(PasswordManagerSettingMigratorServiceTest, |
| - DoNotReconcileOnLocalChangeOfLegacyPrefWhenMigrationIsDisabled) { |
| - TestOnLocalChangeWhenMigrationIsDisabled(prefs::kPasswordManagerSavingEnabled, |
| - false); |
| + for (const auto& test_case : kTestingTable) { |
| + ResetProfile(); |
| + EnforcePasswordManagerSettingMigrationExperiment(test_case.group); |
| + PrefService* prefs = profile()->GetPrefs(); |
| + prefs->SetBoolean(prefs::kCredentialsEnableService, !test_case.pref_value); |
| + prefs->SetBoolean(prefs::kPasswordManagerSavingEnabled, |
| + !test_case.pref_value); |
| + base::HistogramTester tester; |
| + PasswordManagerPreferencesInitialValues histogram_initial_value; |
| + if (test_case.pref_value) |
| + histogram_initial_value = N0L0; |
| + else |
| + histogram_initial_value = N1L1; |
| + NotifyProfileAdded(); |
| + prefs->SetBoolean(test_case.pref_name, test_case.pref_value); |
| + ExpectValuesForBothPrefValues(test_case.expected_new_pref_value, |
| + test_case.expected_old_pref_value); |
| + EXPECT_THAT( |
|
engedy
2015/09/24 14:26:18
Wait a second, is this the right place to verify t
melandory
2015/09/28 07:10:12
But service is started here also, so metrics will
engedy
2015/09/28 10:03:48
SGTM.
|
| + tester.GetAllSamples(kSettingsReconciliationInitialValuesMetrics), |
| + testing::ElementsAre(base::Bucket(histogram_initial_value, 1))); |
| + } |
| } |
| TEST_F(PasswordManagerSettingMigratorServiceTest, |
| @@ -217,31 +209,32 @@ TEST_F(PasswordManagerSettingMigratorServiceTest, |
| BooleanPrefState new_pref_sync_value; |
| BooleanPrefState old_pref_sync_value; |
| bool result_value; |
| + PasswordManagerPreferencesInitialValues histogram_initial_value; |
| } kTestingTable[] = { |
| - {EMPTY, EMPTY, EMPTY, EMPTY, true}, |
| - {EMPTY, EMPTY, EMPTY, OFF, false}, |
| - {EMPTY, EMPTY, EMPTY, ON, true}, |
| - {EMPTY, EMPTY, OFF, EMPTY, false}, |
| - {EMPTY, EMPTY, ON, EMPTY, true}, |
| - {OFF, OFF, EMPTY, EMPTY, false}, |
| - {OFF, OFF, OFF, OFF, false}, |
| - {OFF, OFF, OFF, ON, true}, |
| - {OFF, OFF, ON, OFF, true}, |
| - {OFF, ON, OFF, ON, false}, |
| - {OFF, ON, ON, OFF, false}, |
| - {OFF, ON, ON, ON, true}, |
| - {ON, OFF, EMPTY, EMPTY, false}, |
| - {ON, OFF, OFF, ON, false}, |
| - {ON, OFF, ON, OFF, false}, |
| - {ON, OFF, ON, ON, true}, |
| - {ON, ON, EMPTY, OFF, false}, |
| - {ON, ON, EMPTY, ON, true}, |
| - {ON, ON, OFF, EMPTY, false}, |
| - {ON, ON, OFF, OFF, false}, |
| - {ON, ON, OFF, ON, false}, |
| - {ON, ON, ON, EMPTY, true}, |
| - {ON, ON, ON, OFF, false}, |
| - {ON, ON, ON, ON, true}, |
| + {EMPTY, EMPTY, EMPTY, EMPTY, true, N1L1}, |
| + {EMPTY, EMPTY, EMPTY, OFF, false, N1L1}, |
| + {EMPTY, EMPTY, EMPTY, ON, true, N1L1}, |
| + {EMPTY, EMPTY, OFF, EMPTY, false, N1L1}, |
| + {EMPTY, EMPTY, ON, EMPTY, true, N1L1}, |
| + {OFF, OFF, EMPTY, EMPTY, false, N0L0}, |
| + {OFF, OFF, OFF, OFF, false, N0L0}, |
| + {OFF, OFF, OFF, ON, true, N0L0}, |
| + {OFF, OFF, ON, OFF, true, N0L0}, |
| + {OFF, ON, OFF, ON, false, N0L1}, |
| + {OFF, ON, ON, OFF, false, N0L1}, |
| + {OFF, ON, ON, ON, true, N0L1}, |
| + {ON, OFF, EMPTY, EMPTY, false, N1L0}, |
| + {ON, OFF, OFF, ON, false, N1L0}, |
| + {ON, OFF, ON, OFF, false, N1L0}, |
| + {ON, OFF, ON, ON, true, N1L0}, |
| + {ON, ON, EMPTY, OFF, false, N1L1}, |
| + {ON, ON, EMPTY, ON, true, N1L1}, |
| + {ON, ON, OFF, EMPTY, false, N1L1}, |
| + {ON, ON, OFF, OFF, false, N1L1}, |
| + {ON, ON, OFF, ON, false, N1L1}, |
| + {ON, ON, ON, EMPTY, true, N1L1}, |
| + {ON, ON, ON, OFF, false, N1L1}, |
| + {ON, ON, ON, ON, true, N1L1}, |
| }; |
| for (const auto& test_case : kTestingTable) { |
| @@ -257,6 +250,7 @@ TEST_F(PasswordManagerSettingMigratorServiceTest, |
| test_case.old_pref_local_value); |
| SetupLocalPrefState(prefs::kCredentialsEnableService, |
| test_case.new_pref_local_value); |
| + base::HistogramTester tester; |
| NotifyProfileAdded(); |
| syncable_prefs::PrefServiceSyncable* prefs = |
| PrefServiceSyncableFromProfile(profile()); |
| @@ -266,6 +260,10 @@ TEST_F(PasswordManagerSettingMigratorServiceTest, |
| test_case.old_pref_sync_value); |
| ExpectValuesForBothPrefValues(test_case.result_value, |
| test_case.result_value); |
| + EXPECT_THAT( |
| + tester.GetAllSamples(kSettingsReconciliationInitialValuesMetrics), |
| + testing::ElementsAre( |
| + base::Bucket(test_case.histogram_initial_value, 1))); |
| } |
| } |
| @@ -278,29 +276,30 @@ TEST_F(PasswordManagerSettingMigratorServiceTest, |
| BooleanPrefState old_pref_sync_value; |
| bool result_new_pref_value; |
| bool result_old_pref_value; |
| + PasswordManagerPreferencesInitialValues histogram_initial_value; |
| } kTestingTable[] = { |
| - {OFF, OFF, OFF, ON, false, true}, |
| - {OFF, OFF, ON, OFF, true, false}, |
| - {OFF, OFF, ON, ON, true, true}, |
| - {OFF, ON, EMPTY, OFF, false, false}, |
| - {OFF, ON, EMPTY, ON, false, true}, |
| - {OFF, ON, OFF, EMPTY, false, true}, |
| - {OFF, ON, OFF, OFF, false, false}, |
| - {OFF, ON, OFF, ON, false, true}, |
| - {OFF, ON, ON, EMPTY, true, true}, |
| - {OFF, ON, ON, OFF, true, false}, |
| - {OFF, ON, ON, ON, true, true}, |
| - {ON, OFF, OFF, ON, false, true}, |
| - {ON, OFF, ON, OFF, true, false}, |
| - {ON, OFF, ON, ON, true, true}, |
| - {ON, ON, EMPTY, OFF, true, false}, |
| - {ON, ON, EMPTY, ON, true, true}, |
| - {ON, ON, OFF, EMPTY, false, true}, |
| - {ON, ON, OFF, OFF, false, false}, |
| - {ON, ON, OFF, ON, false, true}, |
| - {ON, ON, ON, EMPTY, true, true}, |
| - {ON, ON, ON, OFF, true, false}, |
| - {ON, ON, ON, ON, true, true}, |
| + {OFF, OFF, OFF, ON, false, true, N0L0}, |
| + {OFF, OFF, ON, OFF, true, false, N0L0}, |
| + {OFF, OFF, ON, ON, true, true, N0L0}, |
| + {OFF, ON, EMPTY, OFF, false, false, N0L1}, |
| + {OFF, ON, EMPTY, ON, false, true, N0L1}, |
| + {OFF, ON, OFF, EMPTY, false, true, N0L1}, |
| + {OFF, ON, OFF, OFF, false, false, N0L1}, |
| + {OFF, ON, OFF, ON, false, true, N0L1}, |
| + {OFF, ON, ON, EMPTY, true, true, N0L1}, |
| + {OFF, ON, ON, OFF, true, false, N0L1}, |
| + {OFF, ON, ON, ON, true, true, N0L1}, |
| + {ON, OFF, OFF, ON, false, true, N1L0}, |
| + {ON, OFF, ON, OFF, true, false, N1L0}, |
| + {ON, OFF, ON, ON, true, true, N1L0}, |
| + {ON, ON, EMPTY, OFF, true, false, N1L1}, |
| + {ON, ON, EMPTY, ON, true, true, N1L1}, |
| + {ON, ON, OFF, EMPTY, false, true, N1L1}, |
| + {ON, ON, OFF, OFF, false, false, N1L1}, |
| + {ON, ON, OFF, ON, false, true, N1L1}, |
| + {ON, ON, ON, EMPTY, true, true, N1L1}, |
| + {ON, ON, ON, OFF, true, false, N1L1}, |
| + {ON, ON, ON, ON, true, true, N1L1}, |
| }; |
| for (const auto& test_case : kTestingTable) { |
| @@ -316,6 +315,7 @@ TEST_F(PasswordManagerSettingMigratorServiceTest, |
| test_case.old_pref_local_value); |
| SetupLocalPrefState(prefs::kCredentialsEnableService, |
| test_case.new_pref_local_value); |
| + base::HistogramTester tester; |
| NotifyProfileAdded(); |
| syncable_prefs::PrefServiceSyncable* prefs = |
| PrefServiceSyncableFromProfile(profile()); |
| @@ -325,6 +325,10 @@ TEST_F(PasswordManagerSettingMigratorServiceTest, |
| test_case.old_pref_sync_value); |
| ExpectValuesForBothPrefValues(test_case.result_new_pref_value, |
| test_case.result_old_pref_value); |
| + EXPECT_THAT( |
| + tester.GetAllSamples(kSettingsReconciliationInitialValuesMetrics), |
| + testing::ElementsAre( |
| + base::Bucket(test_case.histogram_initial_value, 1))); |
| } |
| } |
| @@ -362,4 +366,17 @@ TEST_F(PasswordManagerSettingMigratorServiceTest, |
| ExpectValuesForBothPrefValues(true, true); |
| } |
| +TEST_F(PasswordManagerSettingMigratorServiceTest, |
| + TestThatMetricsAreNotReportedIfInitializationWasFinished) { |
|
engedy
2015/09/24 14:26:18
nit: s/.../NoInitialValuesAreReportedAfterInitiali
|
| + PrefService* prefs = profile()->GetPrefs(); |
| + prefs->SetBoolean(prefs::kCredentialsEnableService, false); |
| + prefs->SetBoolean(prefs::kPasswordManagerSavingEnabled, false); |
| + NotifyProfileAdded(); |
| + // Check that nothing is reported after initalization. |
| + base::HistogramTester tester; |
| + prefs->SetBoolean(prefs::kPasswordManagerSavingEnabled, true); |
| + EXPECT_THAT(tester.GetAllSamples(kSettingsReconciliationInitialValuesMetrics), |
| + testing::IsEmpty()); |
| +} |
| + |
| } // namespace password_manager |