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

Unified Diff: chrome/browser/password_manager/password_manager_setting_migrator_service_unittest.cc

Issue 1420533007: [Smart Lock, Prefs reconciliation] Finished componetization. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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: 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
deleted file mode 100644
index fb0786a5c6f6b92aa67ee7c5aa860e599b0cd17e..0000000000000000000000000000000000000000
--- a/chrome/browser/password_manager/password_manager_setting_migrator_service_unittest.cc
+++ /dev/null
@@ -1,469 +0,0 @@
-// Copyright (c) 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#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/password_manager/password_manager_setting_migrator_service.h"
-#include "components/password_manager/core/browser/password_manager.h"
-#include "components/password_manager/core/common/password_manager_pref_names.h"
-#include "components/pref_registry/testing_pref_service_syncable.h"
-#include "components/sync_driver/fake_sync_service.h"
-#include "components/syncable_prefs/pref_model_associator_client.h"
-#include "components/syncable_prefs/pref_service_mock_factory.h"
-#include "components/syncable_prefs/pref_service_syncable.h"
-#include "sync/api/fake_sync_change_processor.h"
-#include "sync/api/sync_error_factory.h"
-#include "sync/api/sync_error_factory_mock.h"
-#include "sync/internal_api/public/attachments/attachment_service_proxy_for_test.h"
-#include "sync/protocol/sync.pb.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace {
-
-const char kFieldTrialName[] = "PasswordManagerSettingsMigration";
-const char kEnabledGroupName[] = "Enable";
-const char kDisabledGroupName[] = "Disable";
-
-const char kInitialValuesHistogramName[] =
- "PasswordManager.SettingsReconciliation.InitialValues";
-
-const char kInitialAndFinalValuesHistogramName[] =
- "PasswordManager.SettingsReconciliation.InitialAndFinalValues";
-
-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,
-};
-
-// Enum used for histogram tracking of the combined initial values and final
-// values for the legacy and new preferences.
-enum PasswordManagerPreferencesInitialAndFinalValues {
- I00F00,
- I00F01,
- I00F10,
- I00F11,
- I01F00,
- I01F01,
- I01F10,
- I01F11,
- I10F00,
- I10F01,
- I10F10,
- I10F11,
- I11F00,
- I11F01,
- I11F10,
- I11F11,
- NUM_INITIAL_AND_FINAL_VALUES,
-};
-
-syncer::SyncData CreatePrefSyncData(const std::string& name, bool value) {
- base::FundamentalValue bool_value(value);
- std::string serialized;
- base::JSONWriter::Write(bool_value, &serialized);
- sync_pb::EntitySpecifics specifics;
- sync_pb::PreferenceSpecifics* pref = nullptr;
- if (name == password_manager::prefs::kPasswordManagerSavingEnabled)
- pref = specifics.mutable_preference();
- else if (name == password_manager::prefs::kCredentialsEnableService)
- pref = specifics.mutable_priority_preference()->mutable_preference();
- else
- NOTREACHED() << "Wrong preference name: " << name;
- pref->set_name(name);
- pref->set_value(serialized);
- return syncer::SyncData::CreateRemoteData(
- 1, specifics, base::Time(), syncer::AttachmentIdList(),
- syncer::AttachmentServiceProxyForTest::Create());
-}
-
-// Emulates start of the syncing for the specific sync type. If |name| is
-// kPasswordManagerSavingEnabled preference, then it's PREFERENCE data type.
-// If |name| is kCredentialsEnableService pref, then it's PRIORITY_PREFERENCE
-// data type.
-void StartSyncingPref(syncable_prefs::PrefServiceSyncable* prefs,
- const std::string& name,
- BooleanPrefState pref_state_in_sync) {
- syncer::SyncDataList sync_data_list;
- if (pref_state_in_sync == EMPTY) {
- sync_data_list = syncer::SyncDataList();
- } else {
- sync_data_list.push_back(
- CreatePrefSyncData(name, pref_state_in_sync == ON));
- }
-
- syncer::ModelType type = syncer::UNSPECIFIED;
- if (name == password_manager::prefs::kPasswordManagerSavingEnabled)
- type = syncer::PREFERENCES;
- else if (name == password_manager::prefs::kCredentialsEnableService)
- type = syncer::PRIORITY_PREFERENCES;
- ASSERT_NE(syncer::UNSPECIFIED, type) << "Wrong preference name: " << name;
- syncer::SyncableService* sync = prefs->GetSyncableService(type);
- sync->MergeDataAndStartSyncing(
- type, sync_data_list, scoped_ptr<syncer::SyncChangeProcessor>(
- new syncer::FakeSyncChangeProcessor),
- scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock));
-}
-
-class SyncServiceMock : public sync_driver::FakeSyncService {
- public:
- bool HasSyncSetupCompleted() const override { return true; }
-
- bool CanSyncStart() const override { return can_sync_start_; }
-
- void SetCanSyncStart(bool can_sync_start) {
- can_sync_start_ = can_sync_start;
- }
-
- private:
- bool can_sync_start_ = true;
-};
-
-class TestPrefModelAssociatorClient
- : public syncable_prefs::PrefModelAssociatorClient {
- public:
- TestPrefModelAssociatorClient() {}
- ~TestPrefModelAssociatorClient() override {}
-
- // PrefModelAssociatorClient implementation.
- bool IsMergeableListPreference(const std::string& pref_name) const override {
- return false;
- }
-
- bool IsMergeableDictionaryPreference(
- const std::string& pref_name) const override {
- return false;
- }
-
- bool IsMigratedPreference(const std::string& new_pref_name,
- std::string* old_pref_name) const override {
- return false;
- }
-
- bool IsOldMigratedPreference(const std::string& old_pref_name,
- std::string* new_pref_name) const override {
- return false;
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(TestPrefModelAssociatorClient);
-};
-
-} // namespace
-
-namespace password_manager {
-
-class PasswordManagerSettingMigratorServiceTest : public testing::Test {
- protected:
- PasswordManagerSettingMigratorServiceTest() {}
- ~PasswordManagerSettingMigratorServiceTest() override {}
-
- void SetUp() override {
- SetupPreferenceMigrationEnvironment();
- EnforcePasswordManagerSettingMigrationExperiment(kEnabledGroupName);
- }
-
- void SetupLocalPrefState(const std::string& name, BooleanPrefState state) {
- if (state == ON)
- prefs()->SetBoolean(name, true);
- else if (state == OFF)
- prefs()->SetBoolean(name, false);
- else if (state == EMPTY)
- ASSERT_TRUE(prefs()->FindPreference(name)->IsDefaultValue());
- }
-
- syncable_prefs::PrefServiceSyncable* prefs() { return pref_service_.get(); }
-
- void SetupPreferenceMigrationEnvironment() {
- syncable_prefs::PrefServiceMockFactory factory;
- factory.SetPrefModelAssociatorClient(&client_);
- scoped_refptr<user_prefs::PrefRegistrySyncable> pref_registry(
- new user_prefs::PrefRegistrySyncable);
- password_manager::PasswordManager::RegisterProfilePrefs(
- pref_registry.get());
- scoped_ptr<syncable_prefs::PrefServiceSyncable> pref_service_syncable =
- factory.CreateSyncable(pref_registry.get());
- migration_service_.reset(
- new PasswordManagerSettingMigratorService(pref_service_syncable.get()));
- pref_service_.reset(pref_service_syncable.release());
- }
-
- void ExpectValuesForBothPrefValues(bool new_pref_value, bool old_pref_value) {
- EXPECT_EQ(new_pref_value,
- prefs()->GetBoolean(prefs::kCredentialsEnableService));
- EXPECT_EQ(old_pref_value,
- prefs()->GetBoolean(prefs::kPasswordManagerSavingEnabled));
- }
-
- SyncServiceMock* profile_sync_service() { return &sync_service_; }
-
- void NotifyProfileAdded() {
- migration_service_->InitializeMigration(&sync_service_);
- }
-
- void EnforcePasswordManagerSettingMigrationExperiment(const char* name) {
- // The existing instance of FieldTrialList should be deleted before creating
- // new one, so reset() is called in order to do so.
- field_trial_list_.reset();
- field_trial_list_.reset(new base::FieldTrialList(nullptr));
- base::FieldTrialList::CreateFieldTrial(kFieldTrialName, name);
- }
-
- private:
- scoped_ptr<base::FieldTrialList> field_trial_list_;
- TestPrefModelAssociatorClient client_;
- SyncServiceMock sync_service_;
- scoped_ptr<syncable_prefs::PrefServiceSyncable> pref_service_;
- scoped_ptr<PasswordManagerSettingMigratorService> migration_service_;
-
- DISALLOW_COPY_AND_ASSIGN(PasswordManagerSettingMigratorServiceTest);
-};
-
-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}};
-
- for (const auto& test_case : kTestingTable) {
- SetupPreferenceMigrationEnvironment();
- EnforcePasswordManagerSettingMigrationExperiment(test_case.group);
- 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,
- ReconcileWhenWhenBothPrefsTypesArrivesFromSync) {
- const struct {
- BooleanPrefState new_pref_local_value;
- BooleanPrefState old_pref_local_value;
- BooleanPrefState new_pref_sync_value;
- BooleanPrefState old_pref_sync_value;
- bool result_value;
- PasswordManagerPreferencesInitialValues histogram_initial_value;
- PasswordManagerPreferencesInitialAndFinalValues histogram_initial_and_final;
- } kTestingTable[] = {
-#if defined(OS_ANDROID)
- {ON, OFF, ON, EMPTY, false, N1L0, I10F00},
- {ON, OFF, OFF, EMPTY, false, N1L0, I10F00},
- {ON, OFF, EMPTY, EMPTY, false, N1L0, I10F00},
- {ON, ON, ON, EMPTY, true, N1L1, I11F11},
- {ON, ON, OFF, EMPTY, false, N1L1, I11F00},
- {OFF, OFF, ON, EMPTY, true, N0L0, I00F11},
- {OFF, OFF, OFF, EMPTY, false, N0L0, I00F00},
- {OFF, ON, ON, EMPTY, true, N0L1, I01F11},
- {OFF, ON, OFF, EMPTY, false, N0L1, I01F00},
- {OFF, ON, EMPTY, EMPTY, false, N0L1, I01F00},
-#else
- {EMPTY, EMPTY, EMPTY, EMPTY, true, N1L1, I11F11},
- {EMPTY, EMPTY, EMPTY, OFF, false, N1L1, I11F00},
- {EMPTY, EMPTY, EMPTY, ON, true, N1L1, I11F11},
- {EMPTY, EMPTY, OFF, EMPTY, false, N1L1, I11F00},
- {EMPTY, EMPTY, ON, EMPTY, true, N1L1, I11F11},
- {OFF, OFF, EMPTY, EMPTY, false, N0L0, I00F00},
- {OFF, OFF, OFF, OFF, false, N0L0, I00F00},
- {OFF, OFF, OFF, ON, true, N0L0, I00F11},
- {OFF, OFF, ON, OFF, true, N0L0, I00F11},
- {OFF, ON, OFF, ON, false, N0L1, I01F00},
- {OFF, ON, ON, OFF, false, N0L1, I01F00},
- {OFF, ON, ON, ON, true, N0L1, I01F11},
- {ON, OFF, EMPTY, EMPTY, false, N1L0, I10F00},
- {ON, OFF, OFF, ON, false, N1L0, I10F00},
- {ON, OFF, ON, OFF, false, N1L0, I10F00},
- {ON, OFF, ON, ON, true, N1L0, I10F11},
- {ON, ON, EMPTY, OFF, false, N1L1, I11F00},
- {ON, ON, EMPTY, ON, true, N1L1, I11F11},
- {ON, ON, OFF, EMPTY, false, N1L1, I11F00},
- {ON, ON, OFF, OFF, false, N1L1, I11F00},
- {ON, ON, OFF, ON, false, N1L1, I11F00},
- {ON, ON, ON, EMPTY, true, N1L1, I11F11},
- {ON, ON, ON, OFF, false, N1L1, I11F00},
- {ON, ON, ON, ON, true, N1L1, I11F11},
-#endif
- };
-
- for (const auto& test_case : kTestingTable) {
- SetupPreferenceMigrationEnvironment();
- EnforcePasswordManagerSettingMigrationExperiment(kEnabledGroupName);
- SCOPED_TRACE(testing::Message("Local data = ")
- << test_case.new_pref_local_value << " "
- << test_case.old_pref_local_value);
- SCOPED_TRACE(testing::Message("Sync data = ")
- << test_case.new_pref_sync_value << " "
- << test_case.old_pref_sync_value);
- SetupLocalPrefState(prefs::kPasswordManagerSavingEnabled,
- test_case.old_pref_local_value);
- SetupLocalPrefState(prefs::kCredentialsEnableService,
- test_case.new_pref_local_value);
- base::HistogramTester tester;
- NotifyProfileAdded();
- StartSyncingPref(prefs(), prefs::kCredentialsEnableService,
- test_case.new_pref_sync_value);
-#if !defined(OS_ANDROID)
- StartSyncingPref(prefs(), prefs::kPasswordManagerSavingEnabled,
- test_case.old_pref_sync_value);
-#endif
- ExpectValuesForBothPrefValues(test_case.result_value,
- test_case.result_value);
- EXPECT_THAT(tester.GetAllSamples(kInitialValuesHistogramName),
- testing::ElementsAre(
- base::Bucket(test_case.histogram_initial_value, 1)));
- EXPECT_THAT(tester.GetAllSamples(kInitialAndFinalValuesHistogramName),
- testing::ElementsAre(
- base::Bucket(test_case.histogram_initial_and_final, 1)));
- }
-}
-
-TEST_F(PasswordManagerSettingMigratorServiceTest,
- DoNotReconcileWhenWhenBothPrefsTypesArrivesFromSync) {
- const struct {
- BooleanPrefState new_pref_local_value;
- BooleanPrefState old_pref_local_value;
- BooleanPrefState new_pref_sync_value;
- BooleanPrefState old_pref_sync_value;
- bool result_new_pref_value;
- bool result_old_pref_value;
- PasswordManagerPreferencesInitialValues histogram_initial_value;
- } kTestingTable[] = {
-#if defined(OS_ANDROID)
- {ON, OFF, ON, EMPTY, true, false, N1L0},
- {ON, OFF, OFF, EMPTY, false, false, N1L0},
- {ON, OFF, EMPTY, EMPTY, true, false, N1L0},
- {ON, ON, ON, EMPTY, true, true, N1L1},
- {ON, ON, OFF, EMPTY, false, true, N1L1},
- {OFF, OFF, ON, EMPTY, true, false, N0L0},
- {OFF, OFF, OFF, EMPTY, false, false, N0L0},
- {OFF, ON, ON, EMPTY, true, true, N0L1},
- {OFF, ON, OFF, EMPTY, false, true, N0L1},
- {OFF, ON, EMPTY, EMPTY, false, true, N0L1},
-#else
- {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},
-#endif
- };
-
- for (const auto& test_case : kTestingTable) {
- SetupPreferenceMigrationEnvironment();
- EnforcePasswordManagerSettingMigrationExperiment(kDisabledGroupName);
- SCOPED_TRACE(testing::Message("Local data = ")
- << test_case.new_pref_local_value << " "
- << test_case.old_pref_local_value);
- SCOPED_TRACE(testing::Message("Sync data = ")
- << test_case.new_pref_sync_value << " "
- << test_case.old_pref_sync_value);
- SetupLocalPrefState(prefs::kPasswordManagerSavingEnabled,
- test_case.old_pref_local_value);
- SetupLocalPrefState(prefs::kCredentialsEnableService,
- test_case.new_pref_local_value);
- base::HistogramTester tester;
- NotifyProfileAdded();
- StartSyncingPref(prefs(), prefs::kCredentialsEnableService,
- test_case.new_pref_sync_value);
-#if !defined(OS_ANDROID)
- StartSyncingPref(prefs(), prefs::kPasswordManagerSavingEnabled,
- test_case.old_pref_sync_value);
-#endif
- 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)));
- EXPECT_THAT(tester.GetAllSamples(kInitialAndFinalValuesHistogramName),
- testing::IsEmpty());
- }
-}
-
-TEST_F(PasswordManagerSettingMigratorServiceTest,
- ReconcileWhenSyncIsNotExpectedPasswordManagerEnabledOff) {
- prefs()->SetBoolean(prefs::kPasswordManagerSavingEnabled, false);
- profile_sync_service()->SetCanSyncStart(false);
- base::HistogramTester tester;
- NotifyProfileAdded();
- ExpectValuesForBothPrefValues(false, false);
- EXPECT_THAT(tester.GetAllSamples(kInitialAndFinalValuesHistogramName),
- testing::ElementsAre(base::Bucket(I10F00, 1)));
-}
-
-TEST_F(PasswordManagerSettingMigratorServiceTest,
- ReconcileWhenSyncIsNotExpectedPasswordManagerEnabledOn) {
- prefs()->SetBoolean(prefs::kPasswordManagerSavingEnabled, true);
- ASSERT_EQ(prefs()->GetBoolean(prefs::kCredentialsEnableService), true);
- profile_sync_service()->SetCanSyncStart(false);
- base::HistogramTester tester;
- NotifyProfileAdded();
- ExpectValuesForBothPrefValues(true, true);
- EXPECT_THAT(tester.GetAllSamples(kInitialAndFinalValuesHistogramName),
- testing::ElementsAre(base::Bucket(I11F11, 1)));
-}
-
-TEST_F(PasswordManagerSettingMigratorServiceTest,
- ReconcileWhenSyncIsNotExpectedDefaultValuesForPrefs) {
- ASSERT_EQ(prefs()->GetBoolean(prefs::kCredentialsEnableService), true);
- profile_sync_service()->SetCanSyncStart(false);
- base::HistogramTester tester;
- NotifyProfileAdded();
- ExpectValuesForBothPrefValues(true, true);
- EXPECT_THAT(tester.GetAllSamples(kInitialAndFinalValuesHistogramName),
- testing::ElementsAre(base::Bucket(I11F11, 1)));
-}
-
-} // namespace password_manager

Powered by Google App Engine
This is Rietveld 408576698