| Index: chrome/browser/sync/profile_sync_service_preference_unittest.cc
|
| diff --git a/chrome/browser/sync/profile_sync_service_preference_unittest.cc b/chrome/browser/sync/profile_sync_service_preference_unittest.cc
|
| deleted file mode 100644
|
| index 3bd5f131f4bf54692ca1a2a313a20cf3ff9d24b1..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/sync/profile_sync_service_preference_unittest.cc
|
| +++ /dev/null
|
| @@ -1,916 +0,0 @@
|
| -// Copyright (c) 2012 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 <map>
|
| -#include <string>
|
| -#include <utility>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/bind_helpers.h"
|
| -#include "base/callback.h"
|
| -#include "base/json/json_reader.h"
|
| -#include "base/json/json_string_value_serializer.h"
|
| -#include "base/json/json_writer.h"
|
| -#include "base/location.h"
|
| -#include "base/prefs/scoped_user_pref_update.h"
|
| -#include "base/stl_util.h"
|
| -#include "base/strings/string_piece.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "chrome/browser/invalidation/fake_invalidation_service.h"
|
| -#include "chrome/browser/invalidation/invalidation_service_factory.h"
|
| -#include "chrome/browser/prefs/pref_model_associator.h"
|
| -#include "chrome/browser/prefs/pref_service_syncable.h"
|
| -#include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
|
| -#include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h"
|
| -#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
|
| -#include "chrome/browser/signin/signin_manager_factory.h"
|
| -#include "chrome/browser/sync/abstract_profile_sync_service_test.h"
|
| -#include "chrome/browser/sync/glue/sync_backend_host.h"
|
| -#include "chrome/browser/sync/glue/ui_data_type_controller.h"
|
| -#include "chrome/browser/sync/profile_sync_service_factory.h"
|
| -#include "chrome/browser/sync/profile_sync_test_util.h"
|
| -#include "chrome/browser/sync/test_profile_sync_service.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "chrome/test/base/testing_browser_process.h"
|
| -#include "chrome/test/base/testing_pref_service_syncable.h"
|
| -#include "chrome/test/base/testing_profile.h"
|
| -#include "chrome/test/base/testing_profile_manager.h"
|
| -#include "components/signin/core/browser/signin_manager.h"
|
| -#include "components/sync_driver/generic_change_processor.h"
|
| -#include "components/user_prefs/pref_registry_syncable.h"
|
| -#include "google_apis/gaia/gaia_constants.h"
|
| -#include "sync/api/attachments/fake_attachment_service.h"
|
| -#include "sync/api/sync_data.h"
|
| -#include "sync/internal_api/public/base/model_type.h"
|
| -#include "sync/internal_api/public/change_record.h"
|
| -#include "sync/internal_api/public/data_type_debug_info_listener.h"
|
| -#include "sync/internal_api/public/read_node.h"
|
| -#include "sync/internal_api/public/read_transaction.h"
|
| -#include "sync/internal_api/public/write_node.h"
|
| -#include "sync/internal_api/public/write_transaction.h"
|
| -#include "sync/protocol/preference_specifics.pb.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using base::JSONReader;
|
| -using browser_sync::GenericChangeProcessor;
|
| -using browser_sync::SharedChangeProcessor;
|
| -using browser_sync::UIDataTypeController;
|
| -using syncer::ChangeRecord;
|
| -using testing::Invoke;
|
| -using testing::Return;
|
| -using testing::_;
|
| -
|
| -namespace {
|
| -const char kTestProfileName[] = "test-profile";
|
| -}
|
| -
|
| -typedef std::map<const std::string, const base::Value*> PreferenceValues;
|
| -
|
| -ACTION_P(CreateAndSaveChangeProcessor, change_processor) {
|
| - syncer::UserShare* user_share = arg0->GetUserShare();
|
| - *change_processor = new GenericChangeProcessor(
|
| - arg1,
|
| - arg2,
|
| - arg3,
|
| - user_share,
|
| - syncer::FakeAttachmentService::CreateForTest());
|
| - return *change_processor;
|
| -}
|
| -
|
| -ACTION_P(ReturnNewDataTypeManagerWithDebugListener, debug_listener) {
|
| - return new browser_sync::DataTypeManagerImpl(
|
| - debug_listener,
|
| - arg1,
|
| - arg2,
|
| - arg3,
|
| - arg4,
|
| - arg5);
|
| -}
|
| -
|
| -// TODO(zea): Refactor to remove the ProfileSyncService usage.
|
| -class ProfileSyncServicePreferenceTest
|
| - : public AbstractProfileSyncServiceTest,
|
| - public syncer::DataTypeDebugInfoListener {
|
| - public:
|
| - int64 SetSyncedValue(const std::string& name, const base::Value& value) {
|
| - syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
|
| - syncer::ReadNode root(&trans);
|
| - if (root.InitByTagLookup(syncer::ModelTypeToRootTag(
|
| - syncer::PREFERENCES)) != syncer::BaseNode::INIT_OK) {
|
| - return syncer::kInvalidId;
|
| - }
|
| -
|
| - syncer::WriteNode tag_node(&trans);
|
| - syncer::WriteNode node(&trans);
|
| -
|
| - if (tag_node.InitByClientTagLookup(syncer::PREFERENCES, name) ==
|
| - syncer::BaseNode::INIT_OK) {
|
| - return WriteSyncedValue(name, value, &tag_node);
|
| - }
|
| -
|
| - syncer::WriteNode::InitUniqueByCreationResult result =
|
| - node.InitUniqueByCreation(syncer::PREFERENCES, root, name);
|
| - if (result == syncer::WriteNode::INIT_SUCCESS)
|
| - return WriteSyncedValue(name, value, &node);
|
| -
|
| - return syncer::kInvalidId;
|
| - }
|
| -
|
| - // DataTypeDebugInfoListener implementation.
|
| - virtual void OnDataTypeConfigureComplete(
|
| - const std::vector<syncer::DataTypeConfigurationStats>&
|
| - configuration_stats) OVERRIDE {
|
| - ASSERT_EQ(1u, configuration_stats.size());
|
| - association_stats_ = configuration_stats[0].association_stats;
|
| - }
|
| -
|
| - protected:
|
| - ProfileSyncServicePreferenceTest()
|
| - : profile_manager_(TestingBrowserProcess::GetGlobal()),
|
| - debug_ptr_factory_(this),
|
| - example_url0_("http://example.com/0"),
|
| - example_url1_("http://example.com/1"),
|
| - example_url2_("http://example.com/2"),
|
| - not_synced_preference_name_("nonsense_pref_name"),
|
| - not_synced_preference_default_value_("default"),
|
| - non_default_charset_value_("foo") {}
|
| -
|
| - virtual void SetUp() {
|
| - AbstractProfileSyncServiceTest::SetUp();
|
| - ASSERT_TRUE(profile_manager_.SetUp());
|
| - TestingProfile::TestingFactories testing_factories;
|
| - testing_factories.push_back(std::make_pair(
|
| - ProfileOAuth2TokenServiceFactory::GetInstance(),
|
| - BuildAutoIssuingFakeProfileOAuth2TokenService));
|
| - profile_ = profile_manager_.CreateTestingProfile(
|
| - kTestProfileName,
|
| - scoped_ptr<PrefServiceSyncable>(),
|
| - base::UTF8ToUTF16(kTestProfileName),
|
| - 0,
|
| - std::string(),
|
| - testing_factories);
|
| - invalidation::InvalidationServiceFactory::GetInstance()->SetTestingFactory(
|
| - profile_, invalidation::FakeInvalidationService::Build);
|
| - prefs_ = profile_->GetTestingPrefService();
|
| -
|
| - prefs_->registry()->RegisterStringPref(
|
| - not_synced_preference_name_.c_str(),
|
| - not_synced_preference_default_value_,
|
| - user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
|
| - }
|
| -
|
| - virtual void TearDown() {
|
| - profile_ = NULL;
|
| - profile_manager_.DeleteTestingProfile(kTestProfileName);
|
| - AbstractProfileSyncServiceTest::TearDown();
|
| - }
|
| -
|
| - int GetSyncPreferenceCount() {
|
| - syncer::ReadTransaction trans(FROM_HERE, sync_service_->GetUserShare());
|
| - syncer::ReadNode node(&trans);
|
| - if (node.InitByTagLookup(syncer::ModelTypeToRootTag(syncer::PREFERENCES)) !=
|
| - syncer::BaseNode::INIT_OK)
|
| - return 0;
|
| - return node.GetTotalNodeCount() - 1;
|
| - }
|
| -
|
| - bool StartSyncService(const base::Closure& callback,
|
| - bool will_fail_association) {
|
| - if (sync_service_)
|
| - return false;
|
| -
|
| - SigninManagerBase* signin =
|
| - SigninManagerFactory::GetForProfile(profile_);
|
| - signin->SetAuthenticatedUsername("test");
|
| - sync_service_ = TestProfileSyncService::BuildAutoStartAsyncInit(profile_,
|
| - callback);
|
| - pref_sync_service_ = reinterpret_cast<PrefModelAssociator*>(
|
| - prefs_->GetSyncableService(syncer::PREFERENCES));
|
| - if (!pref_sync_service_)
|
| - return false;
|
| - ProfileSyncComponentsFactoryMock* components =
|
| - sync_service_->components_factory_mock();
|
| - EXPECT_CALL(*components, GetSyncableServiceForType(syncer::PREFERENCES)).
|
| - WillOnce(Return(pref_sync_service_->AsWeakPtr()));
|
| -
|
| - EXPECT_CALL(*components, CreateDataTypeManager(_, _, _, _, _, _)).
|
| - WillOnce(ReturnNewDataTypeManagerWithDebugListener(
|
| - syncer::MakeWeakHandle(debug_ptr_factory_.GetWeakPtr())));
|
| - dtc_ = new UIDataTypeController(base::MessageLoopProxy::current(),
|
| - base::Closure(),
|
| - syncer::PREFERENCES,
|
| - components,
|
| - profile_,
|
| - sync_service_);
|
| - EXPECT_CALL(*components, CreateSharedChangeProcessor()).
|
| - WillOnce(Return(new SharedChangeProcessor()));
|
| - EXPECT_CALL(*components, CreateGenericChangeProcessor(_, _, _, _)).
|
| - WillOnce(CreateAndSaveChangeProcessor(
|
| - &change_processor_));
|
| - sync_service_->RegisterDataTypeController(dtc_);
|
| - ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)
|
| - ->UpdateCredentials("test", "oauth2_login_token");
|
| -
|
| - sync_service_->Initialize();
|
| - base::MessageLoop::current()->Run();
|
| -
|
| - // It's possible this test triggered an unrecoverable error, in which case
|
| - // we can't get the preference count.
|
| - if (sync_service_->ShouldPushChanges()) {
|
| - EXPECT_EQ(GetSyncPreferenceCount(),
|
| - association_stats_.num_sync_items_after_association);
|
| - }
|
| - EXPECT_EQ(association_stats_.num_sync_items_after_association,
|
| - association_stats_.num_sync_items_before_association +
|
| - association_stats_.num_sync_items_added -
|
| - association_stats_.num_sync_items_deleted);
|
| -
|
| - return true;
|
| - }
|
| -
|
| - const base::Value& GetPreferenceValue(const std::string& name) {
|
| - const PrefService::Preference* preference =
|
| - prefs_->FindPreference(name.c_str());
|
| - return *preference->GetValue();
|
| - }
|
| -
|
| - // Caller gets ownership of the returned value.
|
| - const base::Value* GetSyncedValue(const std::string& name) {
|
| - syncer::ReadTransaction trans(FROM_HERE, sync_service_->GetUserShare());
|
| - syncer::ReadNode node(&trans);
|
| -
|
| - if (node.InitByClientTagLookup(syncer::PREFERENCES, name) !=
|
| - syncer::BaseNode::INIT_OK) {
|
| - return NULL;
|
| - }
|
| -
|
| - const sync_pb::PreferenceSpecifics& specifics(
|
| - node.GetEntitySpecifics().preference());
|
| -
|
| - return base::JSONReader::Read(specifics.value());
|
| - }
|
| -
|
| - int64 WriteSyncedValue(const std::string& name,
|
| - const base::Value& value,
|
| - syncer::WriteNode* node) {
|
| - syncer::SyncData sync_data;
|
| - if (!pref_sync_service_->CreatePrefSyncData(name,
|
| - value,
|
| - &sync_data)) {
|
| - return syncer::kInvalidId;
|
| - }
|
| - node->SetEntitySpecifics(sync_data.GetSpecifics());
|
| - return node->GetId();
|
| - }
|
| -
|
| - 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);
|
| - }
|
| -
|
| - std::string ValueString(const base::Value& value) {
|
| - std::string serialized;
|
| - JSONStringValueSerializer json(&serialized);
|
| - json.Serialize(value);
|
| - return serialized;
|
| - }
|
| -
|
| - // Returns whether a given preference name is a new name of a migrated
|
| - // preference. Exposed here for testing.
|
| - static bool IsMigratedPreference(const char* preference_name) {
|
| - return PrefModelAssociator::IsMigratedPreference(preference_name);
|
| - }
|
| - static bool IsOldMigratedPreference(const char* old_preference_name) {
|
| - return PrefModelAssociator::IsOldMigratedPreference(old_preference_name);
|
| - }
|
| -
|
| - TestingProfileManager profile_manager_;
|
| - TestingProfile* profile_;
|
| - TestingPrefServiceSyncable* prefs_;
|
| -
|
| - UIDataTypeController* dtc_;
|
| - PrefModelAssociator* pref_sync_service_;
|
| - GenericChangeProcessor* change_processor_;
|
| - syncer::DataTypeAssociationStats association_stats_;
|
| - base::WeakPtrFactory<DataTypeDebugInfoListener> debug_ptr_factory_;
|
| -
|
| - std::string example_url0_;
|
| - std::string example_url1_;
|
| - std::string example_url2_;
|
| - std::string not_synced_preference_name_;
|
| - std::string not_synced_preference_default_value_;
|
| - std::string non_default_charset_value_;
|
| -};
|
| -
|
| -class AddPreferenceEntriesHelper {
|
| - public:
|
| - AddPreferenceEntriesHelper(ProfileSyncServicePreferenceTest* test,
|
| - const PreferenceValues& entries)
|
| - : callback_(base::Bind(
|
| - &AddPreferenceEntriesHelper::AddPreferenceEntriesCallback,
|
| - base::Unretained(this), test, entries)),
|
| - success_(false) {
|
| - }
|
| -
|
| - const base::Closure& callback() const { return callback_; }
|
| - bool success() { return success_; }
|
| -
|
| - private:
|
| - void AddPreferenceEntriesCallback(ProfileSyncServicePreferenceTest* test,
|
| - const PreferenceValues& entries) {
|
| - if (!test->CreateRoot(syncer::PREFERENCES))
|
| - return;
|
| -
|
| - for (PreferenceValues::const_iterator i = entries.begin();
|
| - i != entries.end(); ++i) {
|
| - if (test->SetSyncedValue(i->first, *i->second) == syncer::kInvalidId)
|
| - return;
|
| - }
|
| - success_ = true;
|
| - }
|
| -
|
| - base::Closure callback_;
|
| - bool success_;
|
| -};
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest, CreatePrefSyncData) {
|
| - prefs_->SetString(prefs::kHomePage, example_url0_);
|
| - CreateRootHelper create_root(this, syncer::PREFERENCES);
|
| - ASSERT_TRUE(StartSyncService(create_root.callback(), false));
|
| - ASSERT_TRUE(create_root.success());
|
| -
|
| - const PrefService::Preference* pref =
|
| - prefs_->FindPreference(prefs::kHomePage);
|
| - syncer::SyncData sync_data;
|
| - EXPECT_TRUE(pref_sync_service_->CreatePrefSyncData(pref->name(),
|
| - *pref->GetValue(), &sync_data));
|
| - EXPECT_EQ(std::string(prefs::kHomePage),
|
| - syncer::SyncDataLocal(sync_data).GetTag());
|
| - const sync_pb::PreferenceSpecifics& specifics(sync_data.GetSpecifics().
|
| - preference());
|
| - EXPECT_EQ(std::string(prefs::kHomePage), specifics.name());
|
| -
|
| - scoped_ptr<base::Value> value(base::JSONReader::Read(specifics.value()));
|
| - EXPECT_TRUE(pref->GetValue()->Equals(value.get()));
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest, ModelAssociationDoNotSyncDefaults) {
|
| - const PrefService::Preference* pref =
|
| - prefs_->FindPreference(prefs::kHomePage);
|
| - EXPECT_TRUE(pref->IsDefaultValue());
|
| - CreateRootHelper create_root(this, syncer::PREFERENCES);
|
| - ASSERT_TRUE(StartSyncService(create_root.callback(), false));
|
| - ASSERT_TRUE(create_root.success());
|
| - EXPECT_TRUE(IsSynced(prefs::kHomePage));
|
| - EXPECT_TRUE(pref->IsDefaultValue());
|
| - EXPECT_TRUE(GetSyncedValue(prefs::kHomePage) == NULL);
|
| - EXPECT_TRUE(GetSyncedValue(not_synced_preference_name_) == NULL);
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest, ModelAssociationEmptyCloud) {
|
| - prefs_->SetString(prefs::kHomePage, example_url0_);
|
| - {
|
| - ListPrefUpdate update(prefs_, prefs::kURLsToRestoreOnStartup);
|
| - base::ListValue* url_list = update.Get();
|
| - url_list->Append(new base::StringValue(example_url0_));
|
| - url_list->Append(new base::StringValue(example_url1_));
|
| - }
|
| - CreateRootHelper create_root(this, syncer::PREFERENCES);
|
| - ASSERT_TRUE(StartSyncService(create_root.callback(), false));
|
| - ASSERT_TRUE(create_root.success());
|
| -
|
| - scoped_ptr<const base::Value> value(GetSyncedValue(prefs::kHomePage));
|
| - ASSERT_TRUE(value.get());
|
| - EXPECT_TRUE(GetPreferenceValue(prefs::kHomePage).Equals(value.get()));
|
| - value.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartup));
|
| - ASSERT_TRUE(value.get());
|
| - EXPECT_TRUE(
|
| - GetPreferenceValue(prefs::kURLsToRestoreOnStartup).Equals(value.get()));
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest, ModelAssociationCloudHasData) {
|
| - prefs_->SetString(prefs::kHomePage, example_url0_);
|
| - {
|
| - ListPrefUpdate update(prefs_, prefs::kURLsToRestoreOnStartup);
|
| - base::ListValue* url_list = update.Get();
|
| - url_list->Append(new base::StringValue(example_url0_));
|
| - url_list->Append(new base::StringValue(example_url1_));
|
| - }
|
| -
|
| - PreferenceValues cloud_data;
|
| - STLValueDeleter<PreferenceValues> cloud_data_deleter(&cloud_data);
|
| - cloud_data[prefs::kHomePage] = new base::StringValue(example_url1_);
|
| - base::ListValue* urls_to_restore = new base::ListValue;
|
| - urls_to_restore->Append(new base::StringValue(example_url1_));
|
| - urls_to_restore->Append(new base::StringValue(example_url2_));
|
| - cloud_data[prefs::kURLsToRestoreOnStartup] = urls_to_restore;
|
| - cloud_data[prefs::kDefaultCharset] =
|
| - new base::StringValue(non_default_charset_value_);
|
| -
|
| - AddPreferenceEntriesHelper helper(this, cloud_data);
|
| - ASSERT_TRUE(StartSyncService(helper.callback(), false));
|
| - ASSERT_TRUE(helper.success());
|
| -
|
| - scoped_ptr<const base::Value> value(GetSyncedValue(prefs::kHomePage));
|
| - ASSERT_TRUE(value.get());
|
| - std::string string_value;
|
| - EXPECT_TRUE(value->GetAsString(&string_value));
|
| - EXPECT_EQ(example_url1_, string_value);
|
| - EXPECT_EQ(example_url1_, prefs_->GetString(prefs::kHomePage));
|
| -
|
| - scoped_ptr<base::ListValue> expected_urls(new base::ListValue);
|
| - expected_urls->Append(new base::StringValue(example_url1_));
|
| - expected_urls->Append(new base::StringValue(example_url2_));
|
| - expected_urls->Append(new base::StringValue(example_url0_));
|
| - value.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartup));
|
| - ASSERT_TRUE(value.get());
|
| - EXPECT_TRUE(value->Equals(expected_urls.get()));
|
| - EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartup).
|
| - Equals(expected_urls.get()));
|
| -
|
| - value.reset(GetSyncedValue(prefs::kDefaultCharset));
|
| - ASSERT_TRUE(value.get());
|
| - EXPECT_TRUE(value->GetAsString(&string_value));
|
| - EXPECT_EQ(non_default_charset_value_, string_value);
|
| - EXPECT_EQ(non_default_charset_value_,
|
| - prefs_->GetString(prefs::kDefaultCharset));
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest, ModelAssociationMigrateOldData) {
|
| - ASSERT_TRUE(IsMigratedPreference(prefs::kURLsToRestoreOnStartup));
|
| - ASSERT_TRUE(IsOldMigratedPreference(prefs::kURLsToRestoreOnStartupOld));
|
| -
|
| - PreferenceValues cloud_data;
|
| - STLValueDeleter<PreferenceValues> cloud_data_deleter(&cloud_data);
|
| - base::ListValue* urls_to_restore = new base::ListValue;
|
| - urls_to_restore->Append(new base::StringValue(example_url1_));
|
| - urls_to_restore->Append(new base::StringValue(example_url2_));
|
| - cloud_data[prefs::kURLsToRestoreOnStartupOld] = urls_to_restore;
|
| -
|
| - AddPreferenceEntriesHelper helper(this, cloud_data);
|
| - ASSERT_TRUE(StartSyncService(helper.callback(), false));
|
| - ASSERT_TRUE(helper.success());
|
| -
|
| - // Expect that the new preference data contains the old pref's values.
|
| - scoped_ptr<base::ListValue> expected_urls(new base::ListValue);
|
| - expected_urls->Append(new base::StringValue(example_url1_));
|
| - expected_urls->Append(new base::StringValue(example_url2_));
|
| -
|
| - ASSERT_TRUE(HasSyncData(prefs::kURLsToRestoreOnStartup));
|
| - scoped_ptr<const base::Value> value(
|
| - GetSyncedValue(prefs::kURLsToRestoreOnStartup));
|
| - ASSERT_TRUE(value.get());
|
| - EXPECT_TRUE(value->Equals(expected_urls.get()));
|
| - EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartup).
|
| - Equals(expected_urls.get()));
|
| -
|
| - // The old preference value should be the same.
|
| - expected_urls.reset(new base::ListValue);
|
| - value.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartupOld));
|
| - ASSERT_TRUE(value.get());
|
| - EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartupOld).
|
| - Equals(expected_urls.get()));
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest,
|
| - ModelAssociationCloudHasOldMigratedData) {
|
| - ASSERT_TRUE(IsMigratedPreference(prefs::kURLsToRestoreOnStartup));
|
| - ASSERT_TRUE(IsOldMigratedPreference(prefs::kURLsToRestoreOnStartupOld));
|
| - prefs_->SetString(prefs::kHomePage, example_url0_);
|
| - {
|
| - ListPrefUpdate update(prefs_, prefs::kURLsToRestoreOnStartup);
|
| - base::ListValue* url_list = update.Get();
|
| - url_list->Append(new base::StringValue(example_url0_));
|
| - url_list->Append(new base::StringValue(example_url1_));
|
| - }
|
| -
|
| - PreferenceValues cloud_data;
|
| - STLValueDeleter<PreferenceValues> cloud_data_deleter(&cloud_data);
|
| - cloud_data[prefs::kHomePage] = new base::StringValue(example_url1_);
|
| - base::ListValue* urls_to_restore = new base::ListValue;
|
| - urls_to_restore->Append(new base::StringValue(example_url1_));
|
| - urls_to_restore->Append(new base::StringValue(example_url2_));
|
| - cloud_data[prefs::kURLsToRestoreOnStartupOld] = urls_to_restore;
|
| -
|
| - AddPreferenceEntriesHelper helper(this, cloud_data);
|
| - ASSERT_TRUE(StartSyncService(helper.callback(), false));
|
| - ASSERT_TRUE(helper.success());
|
| -
|
| - scoped_ptr<const base::Value> value(GetSyncedValue(prefs::kHomePage));
|
| - ASSERT_TRUE(value.get());
|
| - std::string string_value;
|
| - EXPECT_TRUE(value->GetAsString(&string_value));
|
| - EXPECT_EQ(example_url1_, string_value);
|
| - EXPECT_EQ(example_url1_, prefs_->GetString(prefs::kHomePage));
|
| -
|
| - // Expect that the new preference data contains the merged old prefs values.
|
| - scoped_ptr<base::ListValue> expected_urls(new base::ListValue);
|
| - expected_urls->Append(new base::StringValue(example_url1_));
|
| - expected_urls->Append(new base::StringValue(example_url2_));
|
| - expected_urls->Append(new base::StringValue(example_url0_));
|
| -
|
| - ASSERT_TRUE(HasSyncData(prefs::kURLsToRestoreOnStartup));
|
| - value.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartup));
|
| - ASSERT_TRUE(value.get());
|
| - EXPECT_TRUE(value->Equals(expected_urls.get()));
|
| - EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartup).
|
| - Equals(expected_urls.get()));
|
| -
|
| - // The old preference name should also contain the merged sync data.
|
| - expected_urls.reset(new base::ListValue);
|
| - value.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartupOld));
|
| - ASSERT_TRUE(value.get());
|
| - EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartupOld).
|
| - Equals(expected_urls.get()));
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest,
|
| - ModelAssociationCloudHasNewMigratedData) {
|
| - ASSERT_TRUE(IsMigratedPreference(prefs::kURLsToRestoreOnStartup));
|
| - ASSERT_TRUE(IsOldMigratedPreference(prefs::kURLsToRestoreOnStartupOld));
|
| - prefs_->SetString(prefs::kHomePage, example_url0_);
|
| - {
|
| - ListPrefUpdate update(prefs_, prefs::kURLsToRestoreOnStartupOld);
|
| - base::ListValue* url_list = update.Get();
|
| - url_list->Append(new base::StringValue(example_url0_));
|
| - url_list->Append(new base::StringValue(example_url1_));
|
| - }
|
| -
|
| - PreferenceValues cloud_data;
|
| - STLValueDeleter<PreferenceValues> cloud_data_deleter(&cloud_data);
|
| - cloud_data[prefs::kHomePage] = new base::StringValue(example_url1_);
|
| - base::ListValue* urls_to_restore = new base::ListValue;
|
| - urls_to_restore->Append(new base::StringValue(example_url1_));
|
| - urls_to_restore->Append(new base::StringValue(example_url2_));
|
| - cloud_data[prefs::kURLsToRestoreOnStartup] = urls_to_restore;
|
| -
|
| - AddPreferenceEntriesHelper helper(this, cloud_data);
|
| - ASSERT_TRUE(StartSyncService(helper.callback(), false));
|
| - ASSERT_TRUE(helper.success());
|
| -
|
| - scoped_ptr<const base::Value> value(GetSyncedValue(prefs::kHomePage));
|
| - ASSERT_TRUE(value.get());
|
| - std::string string_value;
|
| - EXPECT_TRUE(value->GetAsString(&string_value));
|
| - EXPECT_EQ(example_url1_, string_value);
|
| - EXPECT_EQ(example_url1_, prefs_->GetString(prefs::kHomePage));
|
| -
|
| - // Expect that the cloud data under the new migrated preference name sticks.
|
| - scoped_ptr<base::ListValue> expected_urls(new base::ListValue);
|
| - expected_urls->Append(new base::StringValue(example_url1_));
|
| - expected_urls->Append(new base::StringValue(example_url2_));
|
| -
|
| - ASSERT_TRUE(HasSyncData(prefs::kURLsToRestoreOnStartup));
|
| - value.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartup));
|
| - ASSERT_TRUE(value.get());
|
| - EXPECT_TRUE(value->Equals(expected_urls.get()));
|
| - EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartup).
|
| - Equals(expected_urls.get()));
|
| -
|
| - // The old preference data should still be here, though not synced.
|
| - expected_urls.reset(new base::ListValue);
|
| - expected_urls->Append(new base::StringValue(example_url0_));
|
| - expected_urls->Append(new base::StringValue(example_url1_));
|
| -
|
| - value.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartupOld));
|
| - ASSERT_FALSE(value.get());
|
| - EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartupOld).
|
| - Equals(expected_urls.get()));
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest,
|
| - ModelAssociationCloudAddsOldAndNewMigratedData) {
|
| - ASSERT_TRUE(IsMigratedPreference(prefs::kURLsToRestoreOnStartup));
|
| - ASSERT_TRUE(IsOldMigratedPreference(prefs::kURLsToRestoreOnStartupOld));
|
| - prefs_->SetString(prefs::kHomePage, example_url0_);
|
| - {
|
| - ListPrefUpdate update_old(prefs_, prefs::kURLsToRestoreOnStartupOld);
|
| - base::ListValue* url_list_old = update_old.Get();
|
| - url_list_old->Append(new base::StringValue(example_url0_));
|
| - url_list_old->Append(new base::StringValue(example_url1_));
|
| - ListPrefUpdate update(prefs_, prefs::kURLsToRestoreOnStartup);
|
| - base::ListValue* url_list = update.Get();
|
| - url_list->Append(new base::StringValue(example_url1_));
|
| - url_list->Append(new base::StringValue(example_url2_));
|
| - }
|
| -
|
| - PreferenceValues cloud_data;
|
| - STLValueDeleter<PreferenceValues> cloud_data_deleter(&cloud_data);
|
| - cloud_data[prefs::kHomePage] = new base::StringValue(example_url1_);
|
| -
|
| - AddPreferenceEntriesHelper helper(this, cloud_data);
|
| - ASSERT_TRUE(StartSyncService(helper.callback(), false));
|
| - ASSERT_TRUE(helper.success());
|
| -
|
| - scoped_ptr<const base::Value> value(GetSyncedValue(prefs::kHomePage));
|
| - ASSERT_TRUE(value.get());
|
| - std::string string_value;
|
| - EXPECT_TRUE(value->GetAsString(&string_value));
|
| - EXPECT_EQ(example_url1_, string_value);
|
| - EXPECT_EQ(example_url1_, prefs_->GetString(prefs::kHomePage));
|
| -
|
| - // Expect that the cloud data under the new migrated preference name sticks.
|
| - scoped_ptr<base::ListValue> expected_urls(new base::ListValue);
|
| - expected_urls->Append(new base::StringValue(example_url1_));
|
| - expected_urls->Append(new base::StringValue(example_url2_));
|
| -
|
| - ASSERT_TRUE(HasSyncData(prefs::kURLsToRestoreOnStartup));
|
| - value.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartup));
|
| - ASSERT_TRUE(value.get());
|
| - EXPECT_TRUE(value->Equals(expected_urls.get()));
|
| - EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartup).
|
| - Equals(expected_urls.get()));
|
| -
|
| - // Should not have synced in the old startup url values.
|
| - value.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartupOld));
|
| - ASSERT_FALSE(value.get());
|
| - EXPECT_FALSE(GetPreferenceValue(prefs::kURLsToRestoreOnStartupOld).
|
| - Equals(expected_urls.get()));
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest, FailModelAssociation) {
|
| - ASSERT_TRUE(StartSyncService(base::Closure(), true));
|
| - EXPECT_TRUE(sync_service_->HasUnrecoverableError());
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest, UpdatedPreferenceWithDefaultValue) {
|
| - const PrefService::Preference* pref =
|
| - prefs_->FindPreference(prefs::kHomePage);
|
| - EXPECT_TRUE(pref->IsDefaultValue());
|
| -
|
| - CreateRootHelper create_root(this, syncer::PREFERENCES);
|
| - ASSERT_TRUE(StartSyncService(create_root.callback(), false));
|
| - ASSERT_TRUE(create_root.success());
|
| -
|
| - base::StringValue expected(example_url0_);
|
| - profile_->GetPrefs()->Set(prefs::kHomePage, expected);
|
| -
|
| - scoped_ptr<const base::Value> actual(GetSyncedValue(prefs::kHomePage));
|
| - ASSERT_TRUE(actual.get());
|
| - EXPECT_TRUE(expected.Equals(actual.get()));
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest, UpdatedPreferenceWithValue) {
|
| - profile_->GetPrefs()->SetString(prefs::kHomePage, example_url0_);
|
| - CreateRootHelper create_root(this, syncer::PREFERENCES);
|
| - ASSERT_TRUE(StartSyncService(create_root.callback(), false));
|
| - ASSERT_TRUE(create_root.success());
|
| -
|
| - base::StringValue expected(example_url1_);
|
| - profile_->GetPrefs()->Set(prefs::kHomePage, expected);
|
| -
|
| - scoped_ptr<const base::Value> actual(GetSyncedValue(prefs::kHomePage));
|
| - ASSERT_TRUE(actual.get());
|
| - EXPECT_TRUE(expected.Equals(actual.get()));
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeActionUpdate) {
|
| - profile_->GetPrefs()->SetString(prefs::kHomePage, example_url0_);
|
| - CreateRootHelper create_root(this, syncer::PREFERENCES);
|
| - ASSERT_TRUE(StartSyncService(create_root.callback(), false));
|
| - ASSERT_TRUE(create_root.success());
|
| -
|
| - base::StringValue expected(example_url1_);
|
| - int64 node_id = SetSyncedValue(prefs::kHomePage, expected);
|
| - ASSERT_NE(node_id, syncer::kInvalidId);
|
| - {
|
| - syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
|
| - change_processor_->ApplyChangesFromSyncModel(
|
| - &trans, 0,
|
| - ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList(
|
| - node_id, ChangeRecord::ACTION_UPDATE));
|
| - }
|
| - change_processor_->CommitChangesFromSyncModel();
|
| -
|
| - const base::Value& actual = GetPreferenceValue(prefs::kHomePage);
|
| - EXPECT_TRUE(expected.Equals(&actual));
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeActionAdd) {
|
| - CreateRootHelper create_root(this, syncer::PREFERENCES);
|
| - ASSERT_TRUE(StartSyncService(create_root.callback(), false));
|
| - ASSERT_TRUE(create_root.success());
|
| -
|
| - base::StringValue expected(example_url0_);
|
| - int64 node_id = SetSyncedValue(prefs::kHomePage, expected);
|
| - ASSERT_NE(node_id, syncer::kInvalidId);
|
| - {
|
| - syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
|
| - change_processor_->ApplyChangesFromSyncModel(
|
| - &trans, 0,
|
| - ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList(
|
| - node_id, ChangeRecord::ACTION_ADD));
|
| - }
|
| - change_processor_->CommitChangesFromSyncModel();
|
| -
|
| - const base::Value& actual = GetPreferenceValue(prefs::kHomePage);
|
| - EXPECT_TRUE(expected.Equals(&actual));
|
| - EXPECT_EQ(1U,
|
| - pref_sync_service_->registered_preferences().count(prefs::kHomePage));
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeUnknownPreference) {
|
| - CreateRootHelper create_root(this, syncer::PREFERENCES);
|
| - ASSERT_TRUE(StartSyncService(create_root.callback(), false));
|
| - ASSERT_TRUE(create_root.success());
|
| -
|
| - base::StringValue expected(example_url0_);
|
| - int64 node_id = SetSyncedValue("unknown preference", expected);
|
| - ASSERT_NE(node_id, syncer::kInvalidId);
|
| - {
|
| - syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
|
| - change_processor_->ApplyChangesFromSyncModel(
|
| - &trans, 0,
|
| - ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList(
|
| - node_id, ChangeRecord::ACTION_UPDATE));
|
| - }
|
| - change_processor_->CommitChangesFromSyncModel();
|
| -
|
| - // Nothing interesting happens on the client when it gets an update
|
| - // of an unknown preference. We just should not crash.
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest, ManagedPreferences) {
|
| - // Make the homepage preference managed.
|
| - base::StringValue managed_value("http://example.com");
|
| - prefs_->SetManagedPref(prefs::kHomePage, managed_value.DeepCopy());
|
| -
|
| - CreateRootHelper create_root(this, syncer::PREFERENCES);
|
| - ASSERT_TRUE(StartSyncService(create_root.callback(), false));
|
| - ASSERT_TRUE(create_root.success());
|
| -
|
| - // Changing the homepage preference should not sync anything.
|
| - base::StringValue user_value("http://chromium..com");
|
| - prefs_->SetUserPref(prefs::kHomePage, user_value.DeepCopy());
|
| - EXPECT_EQ(NULL, GetSyncedValue(prefs::kHomePage));
|
| -
|
| - // An incoming sync transaction should change the user value, not the managed
|
| - // value.
|
| - base::StringValue sync_value("http://crbug.com");
|
| - int64 node_id = SetSyncedValue(prefs::kHomePage, sync_value);
|
| - ASSERT_NE(node_id, syncer::kInvalidId);
|
| - {
|
| - syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
|
| - change_processor_->ApplyChangesFromSyncModel(
|
| - &trans, 0,
|
| - ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList(
|
| - node_id, ChangeRecord::ACTION_UPDATE));
|
| - }
|
| - change_processor_->CommitChangesFromSyncModel();
|
| -
|
| - EXPECT_TRUE(managed_value.Equals(prefs_->GetManagedPref(prefs::kHomePage)));
|
| - EXPECT_TRUE(sync_value.Equals(prefs_->GetUserPref(prefs::kHomePage)));
|
| -}
|
| -
|
| -// 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(ProfileSyncServicePreferenceTest, ManagedListPreferences) {
|
| - // Make the list of urls to restore on startup managed.
|
| - base::ListValue managed_value;
|
| - managed_value.Append(new base::StringValue(example_url0_));
|
| - managed_value.Append(new base::StringValue(example_url1_));
|
| - prefs_->SetManagedPref(prefs::kURLsToRestoreOnStartup,
|
| - managed_value.DeepCopy());
|
| -
|
| - // Set a cloud version.
|
| - PreferenceValues cloud_data;
|
| - STLValueDeleter<PreferenceValues> cloud_data_deleter(&cloud_data);
|
| - base::ListValue* urls_to_restore = new base::ListValue;
|
| - urls_to_restore->Append(new base::StringValue(example_url1_));
|
| - urls_to_restore->Append(new base::StringValue(example_url2_));
|
| - cloud_data[prefs::kURLsToRestoreOnStartup] = urls_to_restore;
|
| -
|
| - // Start sync and verify the synced value didn't get merged.
|
| - AddPreferenceEntriesHelper helper(this, cloud_data);
|
| - ASSERT_TRUE(StartSyncService(helper.callback(), false));
|
| - ASSERT_TRUE(helper.success());
|
| - scoped_ptr<const base::Value> actual(
|
| - GetSyncedValue(prefs::kURLsToRestoreOnStartup));
|
| - EXPECT_TRUE(cloud_data[prefs::kURLsToRestoreOnStartup]->Equals(actual.get()));
|
| -
|
| - // Changing the user's urls to restore on startup pref should not sync
|
| - // anything.
|
| - base::ListValue user_value;
|
| - user_value.Append(new base::StringValue("http://chromium.org"));
|
| - prefs_->SetUserPref(prefs::kURLsToRestoreOnStartup, user_value.DeepCopy());
|
| - actual.reset(GetSyncedValue(prefs::kURLsToRestoreOnStartup));
|
| - EXPECT_TRUE(cloud_data[prefs::kURLsToRestoreOnStartup]->Equals(actual.get()));
|
| -
|
| - // An incoming sync transaction should change the user value, not the managed
|
| - // value.
|
| - base::ListValue sync_value;
|
| - sync_value.Append(new base::StringValue("http://crbug.com"));
|
| - int64 node_id = SetSyncedValue(prefs::kURLsToRestoreOnStartup, sync_value);
|
| - ASSERT_NE(node_id, syncer::kInvalidId);
|
| - {
|
| - syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
|
| - change_processor_->ApplyChangesFromSyncModel(
|
| - &trans, 0,
|
| - ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList(
|
| - node_id, ChangeRecord::ACTION_UPDATE));
|
| - }
|
| - change_processor_->CommitChangesFromSyncModel();
|
| -
|
| - EXPECT_TRUE(managed_value.Equals(
|
| - prefs_->GetManagedPref(prefs::kURLsToRestoreOnStartup)));
|
| - EXPECT_TRUE(sync_value.Equals(
|
| - prefs_->GetUserPref(prefs::kURLsToRestoreOnStartup)));
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest, DynamicManagedPreferences) {
|
| - CreateRootHelper create_root(this, syncer::PREFERENCES);
|
| - ASSERT_TRUE(StartSyncService(create_root.callback(), false));
|
| - ASSERT_TRUE(create_root.success());
|
| -
|
| - base::StringValue initial_value("http://example.com/initial");
|
| - profile_->GetPrefs()->Set(prefs::kHomePage, initial_value);
|
| - scoped_ptr<const base::Value> actual(GetSyncedValue(prefs::kHomePage));
|
| - 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");
|
| - profile_->GetTestingPrefService()->SetManagedPref(prefs::kHomePage,
|
| - managed_value.DeepCopy());
|
| -
|
| - // The pref value should be the one dictated by policy.
|
| - EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(prefs::kHomePage)));
|
| -
|
| - // Switch kHomePage back to unmanaged.
|
| - profile_->GetTestingPrefService()->RemoveManagedPref(prefs::kHomePage);
|
| -
|
| - // The original value should be picked up.
|
| - EXPECT_TRUE(initial_value.Equals(&GetPreferenceValue(prefs::kHomePage)));
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest,
|
| - DynamicManagedPreferencesWithSyncChange) {
|
| - CreateRootHelper create_root(this, syncer::PREFERENCES);
|
| - ASSERT_TRUE(StartSyncService(create_root.callback(), false));
|
| - ASSERT_TRUE(create_root.success());
|
| -
|
| - base::StringValue initial_value("http://example.com/initial");
|
| - profile_->GetPrefs()->Set(prefs::kHomePage, initial_value);
|
| - scoped_ptr<const base::Value> actual(GetSyncedValue(prefs::kHomePage));
|
| - EXPECT_TRUE(initial_value.Equals(actual.get()));
|
| -
|
| - // Switch kHomePage to managed and set a different value.
|
| - base::StringValue managed_value("http://example.com/managed");
|
| - profile_->GetTestingPrefService()->SetManagedPref(prefs::kHomePage,
|
| - managed_value.DeepCopy());
|
| -
|
| - // Change the sync value.
|
| - base::StringValue sync_value("http://example.com/sync");
|
| - int64 node_id = SetSyncedValue(prefs::kHomePage, sync_value);
|
| - ASSERT_NE(node_id, syncer::kInvalidId);
|
| - {
|
| - syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
|
| - change_processor_->ApplyChangesFromSyncModel(
|
| - &trans, 0,
|
| - ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList(
|
| - node_id, ChangeRecord::ACTION_ADD));
|
| - }
|
| - change_processor_->CommitChangesFromSyncModel();
|
| -
|
| - // The pref value should still be the one dictated by policy.
|
| - EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(prefs::kHomePage)));
|
| -
|
| - // Switch kHomePage back to unmanaged.
|
| - profile_->GetTestingPrefService()->RemoveManagedPref(prefs::kHomePage);
|
| -
|
| - // Sync value should be picked up.
|
| - EXPECT_TRUE(sync_value.Equals(&GetPreferenceValue(prefs::kHomePage)));
|
| -}
|
| -
|
| -TEST_F(ProfileSyncServicePreferenceTest, DynamicManagedDefaultPreferences) {
|
| - const PrefService::Preference* pref =
|
| - prefs_->FindPreference(prefs::kHomePage);
|
| - EXPECT_TRUE(pref->IsDefaultValue());
|
| - CreateRootHelper create_root(this, syncer::PREFERENCES);
|
| - ASSERT_TRUE(StartSyncService(create_root.callback(), false));
|
| - ASSERT_TRUE(create_root.success());
|
| - EXPECT_TRUE(IsSynced(prefs::kHomePage));
|
| - EXPECT_TRUE(pref->IsDefaultValue());
|
| - EXPECT_TRUE(GetSyncedValue(prefs::kHomePage) == NULL);
|
| - // Switch kHomePage to managed and set a different value.
|
| - base::StringValue managed_value("http://example.com/managed");
|
| - profile_->GetTestingPrefService()->SetManagedPref(prefs::kHomePage,
|
| - managed_value.DeepCopy());
|
| - // The pref value should be the one dictated by policy.
|
| - EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(prefs::kHomePage)));
|
| - EXPECT_FALSE(pref->IsDefaultValue());
|
| - // There should be no synced value.
|
| - EXPECT_TRUE(GetSyncedValue(prefs::kHomePage) == NULL);
|
| - // Switch kHomePage back to unmanaged.
|
| - profile_->GetTestingPrefService()->RemoveManagedPref(prefs::kHomePage);
|
| - // The original value should be picked up.
|
| - EXPECT_TRUE(pref->IsDefaultValue());
|
| - // There should still be no synced value.
|
| - EXPECT_TRUE(GetSyncedValue(prefs::kHomePage) == NULL);
|
| -}
|
|
|