| 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..961218c639e7d804904b17d00485e7adaf578bff 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,12 +33,25 @@ const char kFieldTrialName[] = "PasswordManagerSettingsMigration";
|
| const char kEnabledGroupName[] = "Enable";
|
| const char kDisabledGroupName[] = "Disable";
|
|
|
| +const char kInitialValuesHistogramName[] =
|
| + "PasswordManager.SettingsReconciliation.InitialValues";
|
| +
|
| enum BooleanPrefState {
|
| OFF,
|
| ON,
|
| EMPTY, // datatype bucket is empty
|
| };
|
|
|
| +// Enum used for histogram tracking of the initial values for the legacy and new
|
| +// preferences.
|
| +enum PasswordManagerPreferencesInitialValues {
|
| + N0L0,
|
| + N0L1,
|
| + N1L0,
|
| + N1L1,
|
| + NUM_INITIAL_VALUES,
|
| +};
|
| +
|
| syncer::SyncData CreatePrefSyncData(const std::string& name, bool value) {
|
| base::FundamentalValue bool_value(value);
|
| std::string serialized;
|
| @@ -145,30 +160,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 +168,41 @@ 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);
|
| + NotifyProfileAdded();
|
| + base::HistogramTester tester;
|
| + 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(tester.GetAllSamples(kInitialValuesHistogramName),
|
| + testing::IsEmpty());
|
| + }
|
| }
|
|
|
| TEST_F(PasswordManagerSettingMigratorServiceTest,
|
| @@ -217,31 +213,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 +254,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 +264,9 @@ TEST_F(PasswordManagerSettingMigratorServiceTest,
|
| test_case.old_pref_sync_value);
|
| ExpectValuesForBothPrefValues(test_case.result_value,
|
| test_case.result_value);
|
| + EXPECT_THAT(tester.GetAllSamples(kInitialValuesHistogramName),
|
| + testing::ElementsAre(
|
| + base::Bucket(test_case.histogram_initial_value, 1)));
|
| }
|
| }
|
|
|
| @@ -278,29 +279,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 +318,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 +328,9 @@ 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(kInitialValuesHistogramName),
|
| + testing::ElementsAre(
|
| + base::Bucket(test_case.histogram_initial_value, 1)));
|
| }
|
| }
|
|
|
|
|