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

Unified Diff: chrome/browser/sync/profile_sync_service_preference_unittest.cc

Issue 258753002: prefs / sync: rewrite ProfileSyncServicePreferenceTest to rely on sync/api instead of c/b/s/glue. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nit Created 6 years, 8 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
« no previous file with comments | « chrome/browser/prefs/prefs_syncable_service_unittest.cc ('k') | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
-}
« no previous file with comments | « chrome/browser/prefs/prefs_syncable_service_unittest.cc ('k') | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698