| Index: components/syncable_prefs/pref_service_syncable_unittest.cc
|
| diff --git a/components/syncable_prefs/pref_service_syncable_unittest.cc b/components/syncable_prefs/pref_service_syncable_unittest.cc
|
| deleted file mode 100644
|
| index a68137c1e880a5437a31ea85837c179dfb465c52..0000000000000000000000000000000000000000
|
| --- a/components/syncable_prefs/pref_service_syncable_unittest.cc
|
| +++ /dev/null
|
| @@ -1,574 +0,0 @@
|
| -// Copyright 2014 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 "components/syncable_prefs/pref_service_syncable.h"
|
| -
|
| -#include <stdint.h>
|
| -
|
| -#include "base/json/json_reader.h"
|
| -#include "base/json/json_string_value_serializer.h"
|
| -#include "base/json/json_writer.h"
|
| -#include "base/macros.h"
|
| -#include "base/memory/ptr_util.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "components/pref_registry/pref_registry_syncable.h"
|
| -#include "components/prefs/scoped_user_pref_update.h"
|
| -#include "components/sync/model/attachments/attachment_id.h"
|
| -#include "components/sync/model/attachments/attachment_service_proxy_for_test.h"
|
| -#include "components/sync/model/sync_change.h"
|
| -#include "components/sync/model/sync_data.h"
|
| -#include "components/sync/model/sync_error_factory_mock.h"
|
| -#include "components/sync/model/syncable_service.h"
|
| -#include "components/sync/protocol/preference_specifics.pb.h"
|
| -#include "components/sync/protocol/sync.pb.h"
|
| -#include "components/syncable_prefs/pref_model_associator.h"
|
| -#include "components/syncable_prefs/pref_model_associator_client.h"
|
| -#include "components/syncable_prefs/testing_pref_service_syncable.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using syncer::SyncChange;
|
| -using syncer::SyncData;
|
| -
|
| -namespace syncable_prefs {
|
| -
|
| -namespace {
|
| -
|
| -const char kExampleUrl0[] = "http://example.com/0";
|
| -const char kExampleUrl1[] = "http://example.com/1";
|
| -const char kExampleUrl2[] = "http://example.com/2";
|
| -const char kStringPrefName[] = "string_pref_name";
|
| -const char kListPrefName[] = "list_pref_name";
|
| -const char kUnsyncedPreferenceName[] = "nonsense_pref_name";
|
| -const char kUnsyncedPreferenceDefaultValue[] = "default";
|
| -const char kDefaultCharsetPrefName[] = "default_charset";
|
| -const char kNonDefaultCharsetValue[] = "foo";
|
| -const char kDefaultCharsetValue[] = "utf-8";
|
| -
|
| -void Increment(int* num) {
|
| - (*num)++;
|
| -}
|
| -
|
| -class TestPrefModelAssociatorClient : public PrefModelAssociatorClient {
|
| - public:
|
| - TestPrefModelAssociatorClient() {}
|
| - ~TestPrefModelAssociatorClient() override {}
|
| -
|
| - // PrefModelAssociatorClient implementation.
|
| - bool IsMergeableListPreference(const std::string& pref_name) const override {
|
| - return pref_name == kListPrefName;
|
| - }
|
| -
|
| - bool IsMergeableDictionaryPreference(
|
| - const std::string& pref_name) const override {
|
| - return false;
|
| - }
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(TestPrefModelAssociatorClient);
|
| -};
|
| -
|
| -class TestSyncProcessorStub : public syncer::SyncChangeProcessor {
|
| - public:
|
| - explicit TestSyncProcessorStub(syncer::SyncChangeList* output)
|
| - : output_(output), fail_next_(false) {}
|
| - syncer::SyncError ProcessSyncChanges(
|
| - const tracked_objects::Location& from_here,
|
| - const syncer::SyncChangeList& change_list) override {
|
| - if (output_)
|
| - output_->insert(output_->end(), change_list.begin(), change_list.end());
|
| - if (fail_next_) {
|
| - fail_next_ = false;
|
| - return syncer::SyncError(
|
| - FROM_HERE, syncer::SyncError::DATATYPE_ERROR, "Error",
|
| - syncer::PREFERENCES);
|
| - }
|
| - return syncer::SyncError();
|
| - }
|
| -
|
| - void FailNextProcessSyncChanges() {
|
| - fail_next_ = true;
|
| - }
|
| -
|
| - syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const override {
|
| - return syncer::SyncDataList();
|
| - }
|
| - private:
|
| - syncer::SyncChangeList* output_;
|
| - bool fail_next_;
|
| -};
|
| -
|
| -class PrefServiceSyncableTest : public testing::Test {
|
| - public:
|
| - PrefServiceSyncableTest()
|
| - : pref_sync_service_(NULL),
|
| - test_processor_(NULL),
|
| - next_pref_remote_sync_node_id_(0) {}
|
| -
|
| - void SetUp() override {
|
| - prefs_.SetPrefModelAssociatorClientForTesting(&client_);
|
| - prefs_.registry()->RegisterStringPref(kUnsyncedPreferenceName,
|
| - kUnsyncedPreferenceDefaultValue);
|
| - prefs_.registry()->RegisterStringPref(
|
| - kStringPrefName,
|
| - std::string(),
|
| - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
|
| - prefs_.registry()->RegisterListPref(
|
| - kListPrefName,
|
| - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
|
| - prefs_.registry()->RegisterStringPref(
|
| - kDefaultCharsetPrefName,
|
| - kDefaultCharsetValue,
|
| - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
|
| -
|
| - pref_sync_service_ = reinterpret_cast<PrefModelAssociator*>(
|
| - prefs_.GetSyncableService(syncer::PREFERENCES));
|
| - ASSERT_TRUE(pref_sync_service_);
|
| - }
|
| -
|
| - syncer::SyncChange MakeRemoteChange(int64_t id,
|
| - const std::string& name,
|
| - const base::Value& value,
|
| - SyncChange::SyncChangeType type) {
|
| - std::string serialized;
|
| - JSONStringValueSerializer json(&serialized);
|
| - if (!json.Serialize(value))
|
| - return syncer::SyncChange();
|
| - sync_pb::EntitySpecifics entity;
|
| - sync_pb::PreferenceSpecifics* pref_one = entity.mutable_preference();
|
| - pref_one->set_name(name);
|
| - pref_one->set_value(serialized);
|
| - return syncer::SyncChange(
|
| - FROM_HERE,
|
| - type,
|
| - syncer::SyncData::CreateRemoteData(
|
| - id,
|
| - entity,
|
| - base::Time(),
|
| - syncer::AttachmentIdList(),
|
| - syncer::AttachmentServiceProxyForTest::Create()));
|
| - }
|
| -
|
| - void AddToRemoteDataList(const std::string& name,
|
| - const base::Value& value,
|
| - syncer::SyncDataList* out) {
|
| - std::string serialized;
|
| - JSONStringValueSerializer json(&serialized);
|
| - ASSERT_TRUE(json.Serialize(value));
|
| - sync_pb::EntitySpecifics one;
|
| - sync_pb::PreferenceSpecifics* pref_one = one.mutable_preference();
|
| - pref_one->set_name(name);
|
| - pref_one->set_value(serialized);
|
| - out->push_back(SyncData::CreateRemoteData(
|
| - ++next_pref_remote_sync_node_id_,
|
| - one,
|
| - base::Time(),
|
| - syncer::AttachmentIdList(),
|
| - syncer::AttachmentServiceProxyForTest::Create()));
|
| - }
|
| -
|
| - void InitWithSyncDataTakeOutput(const syncer::SyncDataList& initial_data,
|
| - syncer::SyncChangeList* output) {
|
| - test_processor_ = new TestSyncProcessorStub(output);
|
| - syncer::SyncMergeResult r = pref_sync_service_->MergeDataAndStartSyncing(
|
| - syncer::PREFERENCES, initial_data, base::WrapUnique(test_processor_),
|
| - base::MakeUnique<syncer::SyncErrorFactoryMock>());
|
| - EXPECT_FALSE(r.error().IsSet());
|
| - }
|
| -
|
| - void InitWithNoSyncData() {
|
| - InitWithSyncDataTakeOutput(syncer::SyncDataList(), NULL);
|
| - }
|
| -
|
| - const base::Value& GetPreferenceValue(const std::string& name) {
|
| - const PrefService::Preference* preference =
|
| - prefs_.FindPreference(name.c_str());
|
| - return *preference->GetValue();
|
| - }
|
| -
|
| - std::unique_ptr<base::Value> FindValue(const std::string& name,
|
| - const syncer::SyncChangeList& list) {
|
| - syncer::SyncChangeList::const_iterator it = list.begin();
|
| - for (; it != list.end(); ++it) {
|
| - if (syncer::SyncDataLocal(it->sync_data()).GetTag() == name) {
|
| - return base::JSONReader::Read(
|
| - it->sync_data().GetSpecifics().preference().value());
|
| - }
|
| - }
|
| - return nullptr;
|
| - }
|
| -
|
| - bool IsSynced(const std::string& pref_name) {
|
| - return pref_sync_service_->registered_preferences().count(pref_name) > 0;
|
| - }
|
| -
|
| - bool HasSyncData(const std::string& pref_name) {
|
| - return pref_sync_service_->IsPrefSynced(pref_name);
|
| - }
|
| -
|
| - PrefService* GetPrefs() { return &prefs_; }
|
| - TestingPrefServiceSyncable* GetTestingPrefService() { return &prefs_; }
|
| -
|
| - protected:
|
| - TestPrefModelAssociatorClient client_;
|
| - TestingPrefServiceSyncable prefs_;
|
| -
|
| - PrefModelAssociator* pref_sync_service_;
|
| - TestSyncProcessorStub* test_processor_;
|
| -
|
| - // TODO(tim): Remove this by fixing AttachmentServiceProxyForTest.
|
| - base::MessageLoop loop_;
|
| -
|
| - int next_pref_remote_sync_node_id_;
|
| -};
|
| -
|
| -TEST_F(PrefServiceSyncableTest, CreatePrefSyncData) {
|
| - prefs_.SetString(kStringPrefName, kExampleUrl0);
|
| -
|
| - const PrefService::Preference* pref = prefs_.FindPreference(kStringPrefName);
|
| - syncer::SyncData sync_data;
|
| - EXPECT_TRUE(pref_sync_service_->CreatePrefSyncData(pref->name(),
|
| - *pref->GetValue(), &sync_data));
|
| - EXPECT_EQ(std::string(kStringPrefName),
|
| - syncer::SyncDataLocal(sync_data).GetTag());
|
| - const sync_pb::PreferenceSpecifics& specifics(sync_data.GetSpecifics().
|
| - preference());
|
| - EXPECT_EQ(std::string(kStringPrefName), specifics.name());
|
| -
|
| - std::unique_ptr<base::Value> value =
|
| - base::JSONReader::Read(specifics.value());
|
| - EXPECT_TRUE(pref->GetValue()->Equals(value.get()));
|
| -}
|
| -
|
| -TEST_F(PrefServiceSyncableTest, ModelAssociationDoNotSyncDefaults) {
|
| - const PrefService::Preference* pref = prefs_.FindPreference(kStringPrefName);
|
| - EXPECT_TRUE(pref->IsDefaultValue());
|
| - syncer::SyncChangeList out;
|
| - InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
|
| -
|
| - EXPECT_TRUE(IsSynced(kStringPrefName));
|
| - EXPECT_TRUE(pref->IsDefaultValue());
|
| - EXPECT_FALSE(FindValue(kStringPrefName, out).get());
|
| -}
|
| -
|
| -TEST_F(PrefServiceSyncableTest, ModelAssociationEmptyCloud) {
|
| - prefs_.SetString(kStringPrefName, kExampleUrl0);
|
| - {
|
| - ListPrefUpdate update(GetPrefs(), kListPrefName);
|
| - base::ListValue* url_list = update.Get();
|
| - url_list->AppendString(kExampleUrl0);
|
| - url_list->AppendString(kExampleUrl1);
|
| - }
|
| - syncer::SyncChangeList out;
|
| - InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
|
| -
|
| - std::unique_ptr<base::Value> value(FindValue(kStringPrefName, out));
|
| - ASSERT_TRUE(value.get());
|
| - EXPECT_TRUE(GetPreferenceValue(kStringPrefName).Equals(value.get()));
|
| - value = FindValue(kListPrefName, out);
|
| - ASSERT_TRUE(value.get());
|
| - EXPECT_TRUE(GetPreferenceValue(kListPrefName).Equals(value.get()));
|
| -}
|
| -
|
| -TEST_F(PrefServiceSyncableTest, ModelAssociationCloudHasData) {
|
| - prefs_.SetString(kStringPrefName, kExampleUrl0);
|
| - {
|
| - ListPrefUpdate update(GetPrefs(), kListPrefName);
|
| - base::ListValue* url_list = update.Get();
|
| - url_list->AppendString(kExampleUrl0);
|
| - url_list->AppendString(kExampleUrl1);
|
| - }
|
| -
|
| - syncer::SyncDataList in;
|
| - syncer::SyncChangeList out;
|
| - AddToRemoteDataList(kStringPrefName, base::StringValue(kExampleUrl1), &in);
|
| - base::ListValue urls_to_restore;
|
| - urls_to_restore.AppendString(kExampleUrl1);
|
| - urls_to_restore.AppendString(kExampleUrl2);
|
| - AddToRemoteDataList(kListPrefName, urls_to_restore, &in);
|
| - AddToRemoteDataList(kDefaultCharsetPrefName,
|
| - base::StringValue(kNonDefaultCharsetValue),
|
| - &in);
|
| - InitWithSyncDataTakeOutput(in, &out);
|
| -
|
| - ASSERT_FALSE(FindValue(kStringPrefName, out).get());
|
| - ASSERT_FALSE(FindValue(kDefaultCharsetPrefName, out).get());
|
| -
|
| - EXPECT_EQ(kExampleUrl1, prefs_.GetString(kStringPrefName));
|
| -
|
| - std::unique_ptr<base::ListValue> expected_urls(new base::ListValue);
|
| - expected_urls->AppendString(kExampleUrl1);
|
| - expected_urls->AppendString(kExampleUrl2);
|
| - expected_urls->AppendString(kExampleUrl0);
|
| - std::unique_ptr<base::Value> value(FindValue(kListPrefName, out));
|
| - ASSERT_TRUE(value.get());
|
| - EXPECT_TRUE(value->Equals(expected_urls.get()));
|
| - EXPECT_TRUE(GetPreferenceValue(kListPrefName).Equals(expected_urls.get()));
|
| - EXPECT_EQ(kNonDefaultCharsetValue, prefs_.GetString(kDefaultCharsetPrefName));
|
| -}
|
| -
|
| -TEST_F(PrefServiceSyncableTest, FailModelAssociation) {
|
| - syncer::SyncChangeList output;
|
| - TestSyncProcessorStub* stub = new TestSyncProcessorStub(&output);
|
| - stub->FailNextProcessSyncChanges();
|
| - syncer::SyncMergeResult r = pref_sync_service_->MergeDataAndStartSyncing(
|
| - syncer::PREFERENCES, syncer::SyncDataList(), base::WrapUnique(stub),
|
| - base::MakeUnique<syncer::SyncErrorFactoryMock>());
|
| - EXPECT_TRUE(r.error().IsSet());
|
| -}
|
| -
|
| -TEST_F(PrefServiceSyncableTest, UpdatedPreferenceWithDefaultValue) {
|
| - const PrefService::Preference* pref = prefs_.FindPreference(kStringPrefName);
|
| - EXPECT_TRUE(pref->IsDefaultValue());
|
| -
|
| - syncer::SyncChangeList out;
|
| - InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
|
| - out.clear();
|
| -
|
| - base::StringValue expected(kExampleUrl0);
|
| - GetPrefs()->Set(kStringPrefName, expected);
|
| -
|
| - std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out));
|
| - ASSERT_TRUE(actual.get());
|
| - EXPECT_TRUE(expected.Equals(actual.get()));
|
| -}
|
| -
|
| -TEST_F(PrefServiceSyncableTest, UpdatedPreferenceWithValue) {
|
| - GetPrefs()->SetString(kStringPrefName, kExampleUrl0);
|
| - syncer::SyncChangeList out;
|
| - InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
|
| - out.clear();
|
| -
|
| - base::StringValue expected(kExampleUrl1);
|
| - GetPrefs()->Set(kStringPrefName, expected);
|
| -
|
| - std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out));
|
| - ASSERT_TRUE(actual.get());
|
| - EXPECT_TRUE(expected.Equals(actual.get()));
|
| -}
|
| -
|
| -TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeActionUpdate) {
|
| - GetPrefs()->SetString(kStringPrefName, kExampleUrl0);
|
| - InitWithNoSyncData();
|
| -
|
| - base::StringValue expected(kExampleUrl1);
|
| - syncer::SyncChangeList list;
|
| - list.push_back(MakeRemoteChange(
|
| - 1, kStringPrefName, expected, SyncChange::ACTION_UPDATE));
|
| - pref_sync_service_->ProcessSyncChanges(FROM_HERE, list);
|
| -
|
| - const base::Value& actual = GetPreferenceValue(kStringPrefName);
|
| - EXPECT_TRUE(expected.Equals(&actual));
|
| -}
|
| -
|
| -TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeActionAdd) {
|
| - InitWithNoSyncData();
|
| -
|
| - base::StringValue expected(kExampleUrl0);
|
| - syncer::SyncChangeList list;
|
| - list.push_back(MakeRemoteChange(
|
| - 1, kStringPrefName, expected, SyncChange::ACTION_ADD));
|
| - pref_sync_service_->ProcessSyncChanges(FROM_HERE, list);
|
| -
|
| - const base::Value& actual = GetPreferenceValue(kStringPrefName);
|
| - EXPECT_TRUE(expected.Equals(&actual));
|
| - EXPECT_EQ(1U,
|
| - pref_sync_service_->registered_preferences().count(kStringPrefName));
|
| -}
|
| -
|
| -TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeUnknownPreference) {
|
| - InitWithNoSyncData();
|
| - syncer::SyncChangeList list;
|
| - base::StringValue expected(kExampleUrl0);
|
| - list.push_back(MakeRemoteChange(
|
| - 1, "unknown preference", expected, SyncChange::ACTION_UPDATE));
|
| - pref_sync_service_->ProcessSyncChanges(FROM_HERE, list);
|
| - // Nothing interesting happens on the client when it gets an update
|
| - // of an unknown preference. We just should not crash.
|
| -}
|
| -
|
| -TEST_F(PrefServiceSyncableTest, ManagedPreferences) {
|
| - // Make the homepage preference managed.
|
| - base::StringValue managed_value("http://example.com");
|
| - prefs_.SetManagedPref(kStringPrefName, managed_value.DeepCopy());
|
| -
|
| - syncer::SyncChangeList out;
|
| - InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
|
| - out.clear();
|
| -
|
| - // Changing the homepage preference should not sync anything.
|
| - base::StringValue user_value("http://chromium..com");
|
| - prefs_.SetUserPref(kStringPrefName, user_value.DeepCopy());
|
| - EXPECT_TRUE(out.empty());
|
| -
|
| - // An incoming sync transaction should change the user value, not the managed
|
| - // value.
|
| - base::StringValue sync_value("http://crbug.com");
|
| - syncer::SyncChangeList list;
|
| - list.push_back(MakeRemoteChange(
|
| - 1, kStringPrefName, sync_value, SyncChange::ACTION_UPDATE));
|
| - pref_sync_service_->ProcessSyncChanges(FROM_HERE, list);
|
| -
|
| - EXPECT_TRUE(managed_value.Equals(prefs_.GetManagedPref(kStringPrefName)));
|
| - EXPECT_TRUE(sync_value.Equals(prefs_.GetUserPref(kStringPrefName)));
|
| -}
|
| -
|
| -// List preferences have special handling at association time due to our ability
|
| -// to merge the local and sync value. Make sure the merge logic doesn't merge
|
| -// managed preferences.
|
| -TEST_F(PrefServiceSyncableTest, ManagedListPreferences) {
|
| - // Make the list of urls to restore on startup managed.
|
| - base::ListValue managed_value;
|
| - managed_value.AppendString(kExampleUrl0);
|
| - managed_value.AppendString(kExampleUrl1);
|
| - prefs_.SetManagedPref(kListPrefName, managed_value.DeepCopy());
|
| -
|
| - // Set a cloud version.
|
| - syncer::SyncDataList in;
|
| - syncer::SyncChangeList out;
|
| - base::ListValue urls_to_restore;
|
| - urls_to_restore.AppendString(kExampleUrl1);
|
| - urls_to_restore.AppendString(kExampleUrl2);
|
| - AddToRemoteDataList(kListPrefName, urls_to_restore, &in);
|
| -
|
| - // Start sync and verify the synced value didn't get merged.
|
| - InitWithSyncDataTakeOutput(in, &out);
|
| - EXPECT_FALSE(FindValue(kListPrefName, out).get());
|
| - out.clear();
|
| -
|
| - // Changing the user's urls to restore on startup pref should not sync
|
| - // anything.
|
| - base::ListValue user_value;
|
| - user_value.AppendString("http://chromium.org");
|
| - prefs_.SetUserPref(kListPrefName, user_value.DeepCopy());
|
| - EXPECT_FALSE(FindValue(kListPrefName, out).get());
|
| -
|
| - // An incoming sync transaction should change the user value, not the managed
|
| - // value.
|
| - base::ListValue sync_value;
|
| - sync_value.AppendString("http://crbug.com");
|
| - syncer::SyncChangeList list;
|
| - list.push_back(MakeRemoteChange(
|
| - 1, kListPrefName, sync_value,
|
| - SyncChange::ACTION_UPDATE));
|
| - pref_sync_service_->ProcessSyncChanges(FROM_HERE, list);
|
| -
|
| - EXPECT_TRUE(managed_value.Equals(prefs_.GetManagedPref(kListPrefName)));
|
| - EXPECT_TRUE(sync_value.Equals(prefs_.GetUserPref(kListPrefName)));
|
| -}
|
| -
|
| -TEST_F(PrefServiceSyncableTest, DynamicManagedPreferences) {
|
| - syncer::SyncChangeList out;
|
| - InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
|
| - out.clear();
|
| - base::StringValue initial_value("http://example.com/initial");
|
| - GetPrefs()->Set(kStringPrefName, initial_value);
|
| - std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out));
|
| - ASSERT_TRUE(actual.get());
|
| - EXPECT_TRUE(initial_value.Equals(actual.get()));
|
| -
|
| - // Switch kHomePage to managed and set a different value.
|
| - base::StringValue managed_value("http://example.com/managed");
|
| - GetTestingPrefService()->SetManagedPref(kStringPrefName,
|
| - managed_value.DeepCopy());
|
| -
|
| - // The pref value should be the one dictated by policy.
|
| - EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kStringPrefName)));
|
| -
|
| - // Switch kHomePage back to unmanaged.
|
| - GetTestingPrefService()->RemoveManagedPref(kStringPrefName);
|
| -
|
| - // The original value should be picked up.
|
| - EXPECT_TRUE(initial_value.Equals(&GetPreferenceValue(kStringPrefName)));
|
| -}
|
| -
|
| -TEST_F(PrefServiceSyncableTest, DynamicManagedPreferencesWithSyncChange) {
|
| - syncer::SyncChangeList out;
|
| - InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
|
| - out.clear();
|
| -
|
| - base::StringValue initial_value("http://example.com/initial");
|
| - GetPrefs()->Set(kStringPrefName, initial_value);
|
| - std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out));
|
| - EXPECT_TRUE(initial_value.Equals(actual.get()));
|
| -
|
| - // Switch kHomePage to managed and set a different value.
|
| - base::StringValue managed_value("http://example.com/managed");
|
| - GetTestingPrefService()->SetManagedPref(kStringPrefName,
|
| - managed_value.DeepCopy());
|
| -
|
| - // Change the sync value.
|
| - base::StringValue sync_value("http://example.com/sync");
|
| - syncer::SyncChangeList list;
|
| - list.push_back(MakeRemoteChange(
|
| - 1, kStringPrefName, sync_value, SyncChange::ACTION_UPDATE));
|
| - pref_sync_service_->ProcessSyncChanges(FROM_HERE, list);
|
| -
|
| - // The pref value should still be the one dictated by policy.
|
| - EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kStringPrefName)));
|
| -
|
| - // Switch kHomePage back to unmanaged.
|
| - GetTestingPrefService()->RemoveManagedPref(kStringPrefName);
|
| -
|
| - // Sync value should be picked up.
|
| - EXPECT_TRUE(sync_value.Equals(&GetPreferenceValue(kStringPrefName)));
|
| -}
|
| -
|
| -TEST_F(PrefServiceSyncableTest, DynamicManagedDefaultPreferences) {
|
| - const PrefService::Preference* pref = prefs_.FindPreference(kStringPrefName);
|
| - EXPECT_TRUE(pref->IsDefaultValue());
|
| - syncer::SyncChangeList out;
|
| - InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
|
| -
|
| - EXPECT_TRUE(IsSynced(kStringPrefName));
|
| - EXPECT_TRUE(pref->IsDefaultValue());
|
| - EXPECT_FALSE(FindValue(kStringPrefName, out).get());
|
| - out.clear();
|
| -
|
| - // Switch kHomePage to managed and set a different value.
|
| - base::StringValue managed_value("http://example.com/managed");
|
| - GetTestingPrefService()->SetManagedPref(kStringPrefName,
|
| - managed_value.DeepCopy());
|
| - // The pref value should be the one dictated by policy.
|
| - EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kStringPrefName)));
|
| - EXPECT_FALSE(pref->IsDefaultValue());
|
| - // There should be no synced value.
|
| - EXPECT_FALSE(FindValue(kStringPrefName, out).get());
|
| - // Switch kHomePage back to unmanaged.
|
| - GetTestingPrefService()->RemoveManagedPref(kStringPrefName);
|
| - // The original value should be picked up.
|
| - EXPECT_TRUE(pref->IsDefaultValue());
|
| - // There should still be no synced value.
|
| - EXPECT_FALSE(FindValue(kStringPrefName, out).get());
|
| -}
|
| -
|
| -TEST_F(PrefServiceSyncableTest, DeletePreference) {
|
| - prefs_.SetString(kStringPrefName, kExampleUrl0);
|
| - const PrefService::Preference* pref = prefs_.FindPreference(kStringPrefName);
|
| - EXPECT_FALSE(pref->IsDefaultValue());
|
| -
|
| - InitWithNoSyncData();
|
| -
|
| - std::unique_ptr<base::Value> null_value = base::Value::CreateNullValue();
|
| - syncer::SyncChangeList list;
|
| - list.push_back(MakeRemoteChange(
|
| - 1, kStringPrefName, *null_value, SyncChange::ACTION_DELETE));
|
| - pref_sync_service_->ProcessSyncChanges(FROM_HERE, list);
|
| - EXPECT_TRUE(pref->IsDefaultValue());
|
| -}
|
| -
|
| -TEST_F(PrefServiceSyncableTest, RegisterMergeDataFinishedCallback) {
|
| - int num_callbacks = 0;
|
| -
|
| - prefs_.RegisterMergeDataFinishedCallback(
|
| - base::Bind(&Increment, &num_callbacks));
|
| - EXPECT_EQ(0, num_callbacks);
|
| -
|
| - InitWithNoSyncData();
|
| - EXPECT_EQ(1, num_callbacks);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -} // namespace syncable_prefs
|
|
|