| Index: chrome/browser/prefs/profile_pref_store_manager_unittest.cc
|
| diff --git a/chrome/browser/prefs/profile_pref_store_manager_unittest.cc b/chrome/browser/prefs/profile_pref_store_manager_unittest.cc
|
| index fc8491aeb71b0f7741f2f3c9e3a41ff906459e36..f729fe309bac6e66890be6704f39eb8bc767741b 100644
|
| --- a/chrome/browser/prefs/profile_pref_store_manager_unittest.cc
|
| +++ b/chrome/browser/prefs/profile_pref_store_manager_unittest.cc
|
| @@ -33,7 +33,6 @@
|
| #include "components/prefs/pref_store.h"
|
| #include "components/prefs/testing_pref_service.h"
|
| #include "content/public/common/service_names.mojom.h"
|
| -#include "mojo/public/cpp/bindings/binding_set.h"
|
| #include "services/preferences/public/cpp/pref_service_main.h"
|
| #include "services/preferences/public/cpp/tracked/configuration.h"
|
| #include "services/preferences/public/cpp/tracked/mock_validation_delegate.h"
|
| @@ -138,8 +137,7 @@
|
|
|
| } // namespace
|
|
|
| -class ProfilePrefStoreManagerTest : public testing::TestWithParam<bool>,
|
| - public prefs::mojom::ResetOnLoadObserver {
|
| +class ProfilePrefStoreManagerTest : public testing::TestWithParam<bool> {
|
| public:
|
| ProfilePrefStoreManagerTest()
|
| : configuration_(prefs::ConstructTrackedConfiguration(kConfiguration)),
|
| @@ -174,9 +172,6 @@
|
| feature_list_.InitAndDisableFeature(features::kPrefService);
|
| }
|
| mock_validation_delegate_record_ = new MockValidationDelegateRecord;
|
| - mock_validation_delegate_ = base::MakeUnique<MockValidationDelegate>(
|
| - mock_validation_delegate_record_);
|
| -
|
| ProfilePrefStoreManager::RegisterProfilePrefs(profile_pref_registry_.get());
|
| for (const prefs::TrackedPreferenceMetadata* it = kConfiguration;
|
| it != kConfiguration + arraysize(kConfiguration); ++it) {
|
| @@ -206,8 +201,10 @@
|
|
|
| void ReloadConfiguration() {
|
| RelaunchPrefService();
|
| - manager_.reset(new ProfilePrefStoreManager(profile_dir_.GetPath(), seed_,
|
| - "device_id"));
|
| + manager_.reset(new ProfilePrefStoreManager(
|
| + profile_dir_.GetPath(),
|
| + prefs::CloneTrackedConfiguration(configuration_), kReportingIdCount,
|
| + seed_, "device_id", &local_state_));
|
| }
|
|
|
| void TearDown() override {
|
| @@ -220,6 +217,11 @@
|
| }
|
|
|
| protected:
|
| + bool SupportsPreferenceTracking() {
|
| + return ProfilePrefStoreManager::kPlatformSupportsPreferenceTracking &&
|
| + !GetParam();
|
| + }
|
| +
|
| void RelaunchPrefService() {
|
| if (!GetParam())
|
| return;
|
| @@ -231,10 +233,9 @@
|
| mojo::MakeRequest(&service_ptr));
|
| }
|
|
|
| - // Verifies whether a reset was reported via the OnResetOnLoad() hook. Also
|
| + // Verifies whether a reset was reported via the RecordReset() hook. Also
|
| // verifies that GetResetTime() was set (or not) accordingly.
|
| void VerifyResetRecorded(bool reset_expected) {
|
| - base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(reset_expected, reset_recorded_);
|
|
|
| PrefServiceFactory pref_service_factory;
|
| @@ -263,14 +264,15 @@
|
| void InitializePrefs() {
|
| // According to the implementation of ProfilePrefStoreManager, this is
|
| // actually a SegregatedPrefStore backed by two underlying pref stores.
|
| + mock_validation_delegate_ = base::MakeUnique<MockValidationDelegate>(
|
| + mock_validation_delegate_record_);
|
| scoped_refptr<PersistentPrefStore> pref_store =
|
| manager_->CreateProfilePrefStore(
|
| - prefs::CloneTrackedConfiguration(configuration_), kReportingIdCount,
|
| - worker_pool_->pool().get(),
|
| - reset_on_load_observer_bindings_.CreateInterfacePtrAndBind(this),
|
| - mock_validation_delegate_bindings_.CreateInterfacePtrAndBind(
|
| - mock_validation_delegate_.get()),
|
| - connector_.get(), profile_pref_registry_);
|
| + main_message_loop_.task_runner(),
|
| + base::Bind(&ProfilePrefStoreManagerTest::RecordReset,
|
| + base::Unretained(this)),
|
| + mock_validation_delegate_.get(), connector_.get(),
|
| + profile_pref_registry_);
|
| InitializePrefStore(pref_store.get());
|
| pref_store = NULL;
|
| base::RunLoop().RunUntilIdle();
|
| @@ -325,13 +327,18 @@
|
|
|
| void LoadExistingPrefs() {
|
| DestroyPrefStore();
|
| + // Constructing the PrefStore consumes the tracking configuration in
|
| + // |manager_|, so recreate it before constructing another PrefStore.
|
| + ReloadConfiguration();
|
| + mock_validation_delegate_ = base::MakeUnique<MockValidationDelegate>(
|
| + mock_validation_delegate_record_);
|
| pref_store_ = manager_->CreateProfilePrefStore(
|
| - prefs::CloneTrackedConfiguration(configuration_), kReportingIdCount,
|
| - worker_pool_->pool().get(),
|
| - reset_on_load_observer_bindings_.CreateInterfacePtrAndBind(this),
|
| - mock_validation_delegate_bindings_.CreateInterfacePtrAndBind(
|
| - mock_validation_delegate_.get()),
|
| - connector_.get(), profile_pref_registry_);
|
| + JsonPrefStore::GetTaskRunnerForFile(profile_dir_.GetPath(),
|
| + worker_pool_->pool().get()),
|
| + base::Bind(&ProfilePrefStoreManagerTest::RecordReset,
|
| + base::Unretained(this)),
|
| + mock_validation_delegate_.get(), connector_.get(),
|
| + profile_pref_registry_);
|
| pref_store_->AddObserver(®istry_verifier_);
|
| PrefStoreReadObserver read_observer(pref_store_);
|
| read_observer.Read();
|
| @@ -368,7 +375,7 @@
|
|
|
| void ExpectValidationObserved(const std::string& pref_path) {
|
| // No validations are expected for platforms that do not support tracking.
|
| - if (!ProfilePrefStoreManager::kPlatformSupportsPreferenceTracking)
|
| + if (!SupportsPreferenceTracking())
|
| return;
|
| if (!mock_validation_delegate_record_->GetEventForPath(pref_path))
|
| ADD_FAILURE() << "No validation observed for preference: " << pref_path;
|
| @@ -377,19 +384,19 @@
|
| base::MessageLoop main_message_loop_;
|
| std::vector<prefs::mojom::TrackedPreferenceMetadataPtr> configuration_;
|
| base::ScopedTempDir profile_dir_;
|
| + TestingPrefServiceSimple local_state_;
|
| scoped_refptr<user_prefs::PrefRegistrySyncable> profile_pref_registry_;
|
| RegistryVerifier registry_verifier_;
|
| scoped_refptr<MockValidationDelegateRecord> mock_validation_delegate_record_;
|
| - std::unique_ptr<MockValidationDelegate> mock_validation_delegate_;
|
| - mojo::BindingSet<prefs::mojom::TrackedPreferenceValidationDelegate>
|
| - mock_validation_delegate_bindings_;
|
| + std::unique_ptr<prefs::mojom::TrackedPreferenceValidationDelegate>
|
| + mock_validation_delegate_;
|
| std::unique_ptr<ProfilePrefStoreManager> manager_;
|
| scoped_refptr<PersistentPrefStore> pref_store_;
|
|
|
| std::string seed_;
|
|
|
| private:
|
| - void OnResetOnLoad() override {
|
| + void RecordReset() {
|
| // As-is |reset_recorded_| is only designed to remember a single reset, make
|
| // sure none was previously recorded (or that ClearResetRecorded() was
|
| // called).
|
| @@ -414,8 +421,6 @@
|
| std::unique_ptr<service_manager::ServiceContext> pref_service_context_;
|
| std::unique_ptr<service_manager::Connector> connector_;
|
| service_manager::mojom::ConnectorRequest connector_request_;
|
| - mojo::BindingSet<prefs::mojom::ResetOnLoadObserver>
|
| - reset_on_load_observer_bindings_;
|
| };
|
|
|
| TEST_P(ProfilePrefStoreManagerTest, StoreValues) {
|
| @@ -444,10 +449,9 @@
|
|
|
| // If preference tracking is supported, the tampered value of kProtectedAtomic
|
| // will be discarded at load time, leaving this preference undefined.
|
| - EXPECT_NE(ProfilePrefStoreManager::kPlatformSupportsPreferenceTracking,
|
| + EXPECT_NE(SupportsPreferenceTracking(),
|
| pref_store_->GetValue(kProtectedAtomic, NULL));
|
| - VerifyResetRecorded(
|
| - ProfilePrefStoreManager::kPlatformSupportsPreferenceTracking);
|
| + VerifyResetRecorded(SupportsPreferenceTracking());
|
|
|
| ExpectValidationObserved(kTrackedAtomic);
|
| ExpectValidationObserved(kProtectedAtomic);
|
| @@ -457,9 +461,8 @@
|
| auto master_prefs = base::MakeUnique<base::DictionaryValue>();
|
| master_prefs->Set(kTrackedAtomic, new base::Value(kFoobar));
|
| master_prefs->Set(kProtectedAtomic, new base::Value(kHelloWorld));
|
| - EXPECT_TRUE(manager_->InitializePrefsFromMasterPrefs(
|
| - prefs::CloneTrackedConfiguration(configuration_), kReportingIdCount,
|
| - std::move(master_prefs)));
|
| + EXPECT_TRUE(
|
| + manager_->InitializePrefsFromMasterPrefs(std::move(master_prefs)));
|
|
|
| LoadExistingPrefs();
|
|
|
| @@ -510,10 +513,9 @@
|
| // lead to a reset.
|
| ReplaceStringInPrefs(kBarfoo, kFoobar);
|
| LoadExistingPrefs();
|
| - EXPECT_NE(ProfilePrefStoreManager::kPlatformSupportsPreferenceTracking,
|
| + EXPECT_NE(SupportsPreferenceTracking(),
|
| pref_store_->GetValue(kUnprotectedPref, NULL));
|
| - VerifyResetRecorded(
|
| - ProfilePrefStoreManager::kPlatformSupportsPreferenceTracking);
|
| + VerifyResetRecorded(SupportsPreferenceTracking());
|
| }
|
|
|
| TEST_P(ProfilePrefStoreManagerTest, NewPrefWhenFirstProtecting) {
|
| @@ -571,10 +573,9 @@
|
|
|
| // If preference tracking is supported, kUnprotectedPref will have been
|
| // discarded because new values are not accepted without a valid super MAC.
|
| - EXPECT_NE(ProfilePrefStoreManager::kPlatformSupportsPreferenceTracking,
|
| + EXPECT_NE(SupportsPreferenceTracking(),
|
| pref_store_->GetValue(kUnprotectedPref, NULL));
|
| - VerifyResetRecorded(
|
| - ProfilePrefStoreManager::kPlatformSupportsPreferenceTracking);
|
| + VerifyResetRecorded(SupportsPreferenceTracking());
|
| }
|
|
|
| // This test verifies that preference values are correctly maintained when a
|
| @@ -619,8 +620,6 @@
|
| VerifyResetRecorded(false);
|
| }
|
|
|
| -// The parameter controls whether the user pref store is created within a
|
| -// service.
|
| INSTANTIATE_TEST_CASE_P(ProfilePrefStoreManagerTest,
|
| ProfilePrefStoreManagerTest,
|
| testing::Bool());
|
|
|