| 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
|
| index 12488bc48d574198ef96f2e6ed4f0bbbead44325..b6cfd538881fbfd4d2883e669f2ee1136812ddc3 100644
|
| --- a/chrome/browser/sync/profile_sync_service_preference_unittest.cc
|
| +++ b/chrome/browser/sync/profile_sync_service_preference_unittest.cc
|
| @@ -12,10 +12,12 @@
|
| #include "chrome/browser/prefs/pref_model_associator.h"
|
| #include "chrome/browser/prefs/scoped_user_pref_update.h"
|
| #include "chrome/browser/sync/abstract_profile_sync_service_test.h"
|
| +#include "chrome/browser/sync/api/sync_data.h"
|
| #include "chrome/browser/sync/engine/syncapi.h"
|
| #include "chrome/browser/sync/glue/generic_change_processor.h"
|
| #include "chrome/browser/sync/glue/preference_data_type_controller.h"
|
| #include "chrome/browser/sync/glue/sync_backend_host.h"
|
| +#include "chrome/browser/sync/glue/syncable_service_adapter.h"
|
| #include "chrome/browser/sync/profile_sync_test_util.h"
|
| #include "chrome/browser/sync/protocol/preference_specifics.pb.h"
|
| #include "chrome/browser/sync/syncable/model_type.h"
|
| @@ -32,12 +34,29 @@ using base::JSONReader;
|
| using browser_sync::GenericChangeProcessor;
|
| using browser_sync::PreferenceDataTypeController;
|
| using browser_sync::SyncBackendHost;
|
| +using browser_sync::SyncableServiceAdapter;
|
| using sync_api::SyncManager;
|
| using testing::_;
|
| +using testing::Invoke;
|
| using testing::Return;
|
|
|
| typedef std::map<const std::string, const Value*> PreferenceValues;
|
|
|
| +ACTION_P4(BuildPrefSyncComponents, profile_sync_service, pref_sync_service,
|
| + model_associator_ptr, change_processor_ptr) {
|
| + sync_api::UserShare* user_share = profile_sync_service->GetUserShare();
|
| + *change_processor_ptr = new GenericChangeProcessor(pref_sync_service,
|
| + profile_sync_service,
|
| + user_share);
|
| + *model_associator_ptr = new browser_sync::SyncableServiceAdapter(
|
| + syncable::PREFERENCES,
|
| + pref_sync_service,
|
| + *change_processor_ptr);
|
| + return ProfileSyncFactory::SyncComponents(*model_associator_ptr,
|
| + *change_processor_ptr);
|
| +}
|
| +
|
| +// TODO(zea): Refactor to remove the ProfileSyncService usage.
|
| class ProfileSyncServicePreferenceTest
|
| : public AbstractProfileSyncServiceTest {
|
| protected:
|
| @@ -72,13 +91,15 @@ class ProfileSyncServicePreferenceTest
|
|
|
| service_.reset(new TestProfileSyncService(
|
| &factory_, profile_.get(), "test", false, task));
|
| - model_associator_ =
|
| - reinterpret_cast<PrefModelAssociator*>(prefs_->GetSyncableService());
|
| - change_processor_ = new GenericChangeProcessor(model_associator_,
|
| - service_.get());
|
| + pref_sync_service_ = reinterpret_cast<PrefModelAssociator*>(
|
| + prefs_->GetSyncableService());
|
| + if (!pref_sync_service_)
|
| + return false;
|
| EXPECT_CALL(factory_, CreatePreferenceSyncComponents(_, _)).
|
| - WillOnce(Return(ProfileSyncFactory::SyncComponents(
|
| - model_associator_, change_processor_)));
|
| + WillOnce(BuildPrefSyncComponents(service_.get(),
|
| + pref_sync_service_,
|
| + &model_associator_,
|
| + &change_processor_));
|
|
|
| EXPECT_CALL(factory_, CreateDataTypeManager(_, _)).
|
| WillOnce(ReturnNewDataTypeManager());
|
| @@ -106,14 +127,11 @@ class ProfileSyncServicePreferenceTest
|
| sync_api::ReadTransaction trans(service_->GetUserShare());
|
| sync_api::ReadNode node(&trans);
|
|
|
| - int64 node_id = model_associator_->GetSyncIdFromChromeId(name);
|
| - if (node_id == sync_api::kInvalidId)
|
| - return NULL;
|
| - if (!node.InitByIdLookup(node_id))
|
| + if (!node.InitByClientTagLookup(syncable::PREFERENCES, name))
|
| return NULL;
|
|
|
| const sync_pb::PreferenceSpecifics& specifics(
|
| - node.GetPreferenceSpecifics());
|
| + node.GetEntitySpecifics().GetExtension(sync_pb::preference));
|
|
|
| JSONReader reader;
|
| return reader.JsonToValue(specifics.value(), false, false);
|
| @@ -122,8 +140,13 @@ class ProfileSyncServicePreferenceTest
|
| int64 WriteSyncedValue(const std::string& name,
|
| const Value& value,
|
| sync_api::WriteNode* node) {
|
| - if (!PrefModelAssociator::WritePreferenceToNode(name, value, node))
|
| + SyncData sync_data;
|
| + if (!PrefModelAssociator::CreatePrefSyncData(name,
|
| + value,
|
| + &sync_data)) {
|
| return sync_api::kInvalidId;
|
| + }
|
| + node->SetEntitySpecifics(sync_data.GetSpecifics());
|
| return node->GetId();
|
| }
|
|
|
| @@ -138,29 +161,24 @@ class ProfileSyncServicePreferenceTest
|
| sync_api::WriteNode tag_node(&trans);
|
| sync_api::WriteNode node(&trans);
|
|
|
| - int64 node_id = model_associator_->GetSyncIdFromChromeId(name);
|
| - if (node_id == sync_api::kInvalidId) {
|
| - if (tag_node.InitByClientTagLookup(syncable::PREFERENCES, name))
|
| - return WriteSyncedValue(name, value, &tag_node);
|
| - if (node.InitUniqueByCreation(syncable::PREFERENCES, root, name))
|
| - return WriteSyncedValue(name, value, &node);
|
| - } else if (node.InitByIdLookup(node_id)) {
|
| + if (tag_node.InitByClientTagLookup(syncable::PREFERENCES, name))
|
| + return WriteSyncedValue(name, value, &tag_node);
|
| + if (node.InitUniqueByCreation(syncable::PREFERENCES, root, name))
|
| return WriteSyncedValue(name, value, &node);
|
| - }
|
| +
|
| return sync_api::kInvalidId;
|
| }
|
|
|
| - SyncManager::ChangeRecord* MakeChangeRecord(const std::string& name,
|
| - SyncManager::ChangeRecord) {
|
| - int64 node_id = model_associator_->GetSyncIdFromChromeId(name);
|
| + SyncManager::ChangeRecord* MakeChangeRecord(int64 node_id,
|
| + SyncManager::ChangeRecord::Action action) {
|
| SyncManager::ChangeRecord* record = new SyncManager::ChangeRecord();
|
| - record->action = SyncManager::ChangeRecord::ACTION_UPDATE;
|
| + record->action = action;
|
| record->id = node_id;
|
| return record;
|
| }
|
|
|
| bool IsSynced(const std::string& pref_name) {
|
| - return model_associator_->synced_preferences().count(pref_name) > 0;
|
| + return pref_sync_service_->registered_preferences().count(pref_name) > 0;
|
| }
|
|
|
| std::string ValueString(const Value& value) {
|
| @@ -176,7 +194,8 @@ class ProfileSyncServicePreferenceTest
|
| TestingPrefService* prefs_;
|
|
|
| PreferenceDataTypeController* dtc_;
|
| - PrefModelAssociator* model_associator_;
|
| + PrefModelAssociator* pref_sync_service_;
|
| + SyncableServiceAdapter* model_associator_;
|
| GenericChangeProcessor* change_processor_;
|
|
|
| std::string example_url0_;
|
| @@ -213,7 +232,7 @@ class AddPreferenceEntriesTask : public Task {
|
| bool success_;
|
| };
|
|
|
| -TEST_F(ProfileSyncServicePreferenceTest, WritePreferenceToNode) {
|
| +TEST_F(ProfileSyncServicePreferenceTest, CreatePrefSyncData) {
|
| prefs_->SetString(prefs::kHomePage, example_url0_);
|
| CreateRootTask task(this, syncable::PREFERENCES);
|
| ASSERT_TRUE(StartSyncService(&task, false));
|
| @@ -221,15 +240,12 @@ TEST_F(ProfileSyncServicePreferenceTest, WritePreferenceToNode) {
|
|
|
| const PrefService::Preference* pref =
|
| prefs_->FindPreference(prefs::kHomePage);
|
| - sync_api::WriteTransaction trans(service_->GetUserShare());
|
| - sync_api::WriteNode node(&trans);
|
| - EXPECT_TRUE(node.InitByClientTagLookup(syncable::PREFERENCES,
|
| - prefs::kHomePage));
|
| -
|
| - EXPECT_TRUE(PrefModelAssociator::WritePreferenceToNode(
|
| - pref->name(), *pref->GetValue(), &node));
|
| - EXPECT_EQ(UTF8ToWide(prefs::kHomePage), node.GetTitle());
|
| - const sync_pb::PreferenceSpecifics& specifics(node.GetPreferenceSpecifics());
|
| + SyncData sync_data;
|
| + EXPECT_TRUE(PrefModelAssociator::CreatePrefSyncData(pref->name(),
|
| + *pref->GetValue(), &sync_data));
|
| + EXPECT_EQ(std::string(prefs::kHomePage), sync_data.GetTag());
|
| + const sync_pb::PreferenceSpecifics& specifics(sync_data.GetSpecifics().
|
| + GetExtension(sync_pb::preference));
|
| EXPECT_EQ(std::string(prefs::kHomePage), specifics.name());
|
|
|
| base::JSONReader reader;
|
| @@ -364,15 +380,15 @@ TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeActionUpdate) {
|
| ASSERT_TRUE(task.success());
|
|
|
| scoped_ptr<Value> expected(Value::CreateStringValue(example_url1_));
|
| - ASSERT_NE(SetSyncedValue(prefs::kHomePage, *expected), sync_api::kInvalidId);
|
| - int64 node_id = model_associator_->GetSyncIdFromChromeId(prefs::kHomePage);
|
| - scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord);
|
| - record->action = SyncManager::ChangeRecord::ACTION_UPDATE;
|
| - record->id = node_id;
|
| + int64 node_id = SetSyncedValue(prefs::kHomePage, *expected);
|
| + ASSERT_NE(node_id, sync_api::kInvalidId);
|
| + scoped_ptr<SyncManager::ChangeRecord> record(MakeChangeRecord(
|
| + node_id, SyncManager::ChangeRecord::ACTION_UPDATE));
|
| {
|
| sync_api::WriteTransaction trans(service_->GetUserShare());
|
| change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1);
|
| }
|
| + change_processor_->CommitChangesFromSyncModel();
|
|
|
| const Value& actual = GetPreferenceValue(prefs::kHomePage);
|
| EXPECT_TRUE(expected->Equals(&actual));
|
| @@ -386,18 +402,18 @@ TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeActionAdd) {
|
| scoped_ptr<Value> expected(Value::CreateStringValue(example_url0_));
|
| int64 node_id = SetSyncedValue(prefs::kHomePage, *expected);
|
| ASSERT_NE(node_id, sync_api::kInvalidId);
|
| - scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord);
|
| - record->action = SyncManager::ChangeRecord::ACTION_ADD;
|
| - record->id = node_id;
|
| + scoped_ptr<SyncManager::ChangeRecord> record(MakeChangeRecord(
|
| + node_id, SyncManager::ChangeRecord::ACTION_ADD));
|
| {
|
| sync_api::WriteTransaction trans(service_->GetUserShare());
|
| change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1);
|
| }
|
| + change_processor_->CommitChangesFromSyncModel();
|
|
|
| const Value& actual = GetPreferenceValue(prefs::kHomePage);
|
| EXPECT_TRUE(expected->Equals(&actual));
|
| - EXPECT_EQ(node_id,
|
| - model_associator_->GetSyncIdFromChromeId(prefs::kHomePage));
|
| + EXPECT_EQ(1U,
|
| + pref_sync_service_->synced_preferences().count(prefs::kHomePage));
|
| }
|
|
|
| TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeUnknownPreference) {
|
| @@ -408,13 +424,13 @@ TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeUnknownPreference) {
|
| scoped_ptr<Value> expected(Value::CreateStringValue(example_url0_));
|
| int64 node_id = SetSyncedValue("unknown preference", *expected);
|
| ASSERT_NE(node_id, sync_api::kInvalidId);
|
| - scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord);
|
| - record->action = SyncManager::ChangeRecord::ACTION_ADD;
|
| - record->id = node_id;
|
| + scoped_ptr<SyncManager::ChangeRecord> record(MakeChangeRecord(
|
| + node_id, SyncManager::ChangeRecord::ACTION_UPDATE));
|
| {
|
| sync_api::WriteTransaction trans(service_->GetUserShare());
|
| change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1);
|
| }
|
| + change_processor_->CommitChangesFromSyncModel();
|
|
|
| // Nothing interesting happens on the client when it gets an update
|
| // of an unknown preference. We just should not crash.
|
| @@ -441,13 +457,14 @@ TEST_F(ProfileSyncServicePreferenceTest, ManagedPreferences) {
|
| Value::CreateStringValue("http://crbug.com"));
|
| int64 node_id = SetSyncedValue(prefs::kHomePage, *sync_value);
|
| ASSERT_NE(node_id, sync_api::kInvalidId);
|
| - scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord);
|
| - record->action = SyncManager::ChangeRecord::ACTION_UPDATE;
|
| - record->id = node_id;
|
| + scoped_ptr<SyncManager::ChangeRecord> record(MakeChangeRecord(
|
| + node_id, SyncManager::ChangeRecord::ACTION_UPDATE));
|
| {
|
| sync_api::WriteTransaction trans(service_->GetUserShare());
|
| change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1);
|
| }
|
| + change_processor_->CommitChangesFromSyncModel();
|
| +
|
| EXPECT_TRUE(managed_value->Equals(
|
| prefs_->GetManagedPref(prefs::kHomePage)));
|
| EXPECT_TRUE(user_value->Equals(
|
| @@ -472,21 +489,21 @@ TEST_F(ProfileSyncServicePreferenceTest, DynamicManagedPreferences) {
|
| prefs::kHomePage, managed_value->DeepCopy());
|
|
|
| // Sync node should be gone.
|
| - EXPECT_EQ(sync_api::kInvalidId,
|
| - model_associator_->GetSyncIdFromChromeId(prefs::kHomePage));
|
| + EXPECT_EQ(0U,
|
| + pref_sync_service_->synced_preferences().count(prefs::kHomePage));
|
|
|
| // Change the sync value.
|
| scoped_ptr<Value> sync_value(
|
| Value::CreateStringValue("http://example.com/sync"));
|
| int64 node_id = SetSyncedValue(prefs::kHomePage, *sync_value);
|
| ASSERT_NE(node_id, sync_api::kInvalidId);
|
| - scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord);
|
| - record->action = SyncManager::ChangeRecord::ACTION_ADD;
|
| - record->id = node_id;
|
| + scoped_ptr<SyncManager::ChangeRecord> record(MakeChangeRecord(
|
| + node_id, SyncManager::ChangeRecord::ACTION_ADD));
|
| {
|
| sync_api::WriteTransaction trans(service_->GetUserShare());
|
| change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1);
|
| }
|
| + change_processor_->CommitChangesFromSyncModel();
|
|
|
| // The pref value should still be the one dictated by policy.
|
| EXPECT_TRUE(managed_value->Equals(&GetPreferenceValue(prefs::kHomePage)));
|
|
|