| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/prefs/pref_service_syncable.h" | 5 #include "chrome/browser/prefs/pref_service_syncable.h" |
| 6 | 6 |
| 7 #include "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" |
| 8 #include "base/json/json_string_value_serializer.h" | 8 #include "base/json/json_string_value_serializer.h" |
| 9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| 11 #include "base/prefs/scoped_user_pref_update.h" | 11 #include "base/prefs/scoped_user_pref_update.h" |
| 12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
| 13 #include "chrome/browser/prefs/pref_model_associator.h" | 13 #include "chrome/browser/prefs/pref_model_associator.h" |
| 14 #include "chrome/common/pref_names.h" | 14 #include "chrome/browser/prefs/pref_model_associator_client.h" |
| 15 #include "chrome/grit/locale_settings.h" | |
| 16 #include "chrome/test/base/testing_pref_service_syncable.h" | 15 #include "chrome/test/base/testing_pref_service_syncable.h" |
| 17 #include "components/pref_registry/pref_registry_syncable.h" | 16 #include "components/pref_registry/pref_registry_syncable.h" |
| 18 #include "sync/api/attachments/attachment_id.h" | 17 #include "sync/api/attachments/attachment_id.h" |
| 19 #include "sync/api/sync_change.h" | 18 #include "sync/api/sync_change.h" |
| 20 #include "sync/api/sync_data.h" | 19 #include "sync/api/sync_data.h" |
| 21 #include "sync/api/sync_error_factory_mock.h" | 20 #include "sync/api/sync_error_factory_mock.h" |
| 22 #include "sync/api/syncable_service.h" | 21 #include "sync/api/syncable_service.h" |
| 23 #include "sync/internal_api/public/attachments/attachment_service_proxy_for_test
.h" | 22 #include "sync/internal_api/public/attachments/attachment_service_proxy_for_test
.h" |
| 24 #include "sync/protocol/preference_specifics.pb.h" | 23 #include "sync/protocol/preference_specifics.pb.h" |
| 25 #include "sync/protocol/sync.pb.h" | 24 #include "sync/protocol/sync.pb.h" |
| 26 #include "testing/gtest/include/gtest/gtest.h" | 25 #include "testing/gtest/include/gtest/gtest.h" |
| 27 #include "ui/base/l10n/l10n_util.h" | |
| 28 | 26 |
| 29 using syncer::SyncChange; | 27 using syncer::SyncChange; |
| 30 using syncer::SyncData; | 28 using syncer::SyncData; |
| 31 | 29 |
| 32 namespace { | 30 namespace { |
| 33 const char kExampleUrl0[] = "http://example.com/0"; | 31 const char kExampleUrl0[] = "http://example.com/0"; |
| 34 const char kExampleUrl1[] = "http://example.com/1"; | 32 const char kExampleUrl1[] = "http://example.com/1"; |
| 35 const char kExampleUrl2[] = "http://example.com/2"; | 33 const char kExampleUrl2[] = "http://example.com/2"; |
| 34 |
| 36 const char kUnsyncedPreferenceName[] = "nonsense_pref_name"; | 35 const char kUnsyncedPreferenceName[] = "nonsense_pref_name"; |
| 37 const char kUnsyncedPreferenceDefaultValue[] = "default"; | 36 const char kUnsyncedPreferenceDefaultValue[] = "default"; |
| 38 const char kNonDefaultCharsetValue[] = "foo"; | 37 const char kNonDefaultCharsetValue[] = "foo"; |
| 38 const char kDefaultCharsetValue[] = "utf-8"; |
| 39 |
| 40 const char kDefaultCharset[] = "intl.charset_default"; |
| 41 const char kHomePage[] = "homepage"; |
| 42 const char kURLsToRestoreOnStartup[] = "session.startup_urls"; |
| 39 } // namespace | 43 } // namespace |
| 40 | 44 |
| 41 class TestSyncProcessorStub : public syncer::SyncChangeProcessor { | 45 class TestSyncProcessorStub : public syncer::SyncChangeProcessor { |
| 42 public: | 46 public: |
| 43 explicit TestSyncProcessorStub(syncer::SyncChangeList* output) | 47 explicit TestSyncProcessorStub(syncer::SyncChangeList* output) |
| 44 : output_(output), fail_next_(false) {} | 48 : output_(output), fail_next_(false) {} |
| 45 syncer::SyncError ProcessSyncChanges( | 49 syncer::SyncError ProcessSyncChanges( |
| 46 const tracked_objects::Location& from_here, | 50 const tracked_objects::Location& from_here, |
| 47 const syncer::SyncChangeList& change_list) override { | 51 const syncer::SyncChangeList& change_list) override { |
| 48 if (output_) | 52 if (output_) |
| 49 output_->insert(output_->end(), change_list.begin(), change_list.end()); | 53 output_->insert(output_->end(), change_list.begin(), change_list.end()); |
| 50 if (fail_next_) { | 54 if (fail_next_) { |
| 51 fail_next_ = false; | 55 fail_next_ = false; |
| 52 return syncer::SyncError( | 56 return syncer::SyncError( |
| 53 FROM_HERE, syncer::SyncError::DATATYPE_ERROR, "Error", | 57 FROM_HERE, syncer::SyncError::DATATYPE_ERROR, "Error", |
| 54 syncer::PREFERENCES); | 58 syncer::PREFERENCES); |
| 55 } | 59 } |
| 56 return syncer::SyncError(); | 60 return syncer::SyncError(); |
| 57 } | 61 } |
| 58 | 62 |
| 59 void FailNextProcessSyncChanges() { | 63 void FailNextProcessSyncChanges() { fail_next_ = true; } |
| 60 fail_next_ = true; | |
| 61 } | |
| 62 | 64 |
| 63 syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const override { | 65 syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const override { |
| 64 return syncer::SyncDataList(); | 66 return syncer::SyncDataList(); |
| 65 } | 67 } |
| 68 |
| 66 private: | 69 private: |
| 67 syncer::SyncChangeList* output_; | 70 syncer::SyncChangeList* output_; |
| 68 bool fail_next_; | 71 bool fail_next_; |
| 69 }; | 72 }; |
| 70 | 73 |
| 71 class PrefServiceSyncableTest : public testing::Test { | 74 class PrefServiceSyncableTest : public testing::Test { |
| 72 public: | 75 public: |
| 73 PrefServiceSyncableTest() | 76 PrefServiceSyncableTest() |
| 74 : pref_sync_service_(NULL), | 77 : pref_sync_service_(NULL), |
| 75 test_processor_(NULL), | 78 test_processor_(NULL), |
| 76 next_pref_remote_sync_node_id_(0) {} | 79 next_pref_remote_sync_node_id_(0) {} |
| 77 | 80 |
| 78 void SetUp() override { | 81 void SetUp() override { |
| 82 pref_model_associator_client_.RegisterPreference( |
| 83 kURLsToRestoreOnStartup, PREF_MODEL_PREFERENCE_TYPE_LIST); |
| 84 prefs_.SetPrefModelAssociatorClient(&pref_model_associator_client_); |
| 85 |
| 79 prefs_.registry()->RegisterStringPref(kUnsyncedPreferenceName, | 86 prefs_.registry()->RegisterStringPref(kUnsyncedPreferenceName, |
| 80 kUnsyncedPreferenceDefaultValue); | 87 kUnsyncedPreferenceDefaultValue); |
| 81 prefs_.registry()->RegisterStringPref( | 88 prefs_.registry()->RegisterStringPref( |
| 82 prefs::kHomePage, | 89 kHomePage, |
| 83 std::string(), | 90 std::string(), |
| 84 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 91 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 85 prefs_.registry()->RegisterListPref( | 92 prefs_.registry()->RegisterListPref( |
| 86 prefs::kURLsToRestoreOnStartup, | 93 kURLsToRestoreOnStartup, |
| 87 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 94 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 88 prefs_.registry()->RegisterStringPref( | 95 prefs_.registry()->RegisterStringPref( |
| 89 prefs::kDefaultCharset, | 96 kDefaultCharset, |
| 90 l10n_util::GetStringUTF8(IDS_DEFAULT_ENCODING), | 97 kDefaultCharsetValue, |
| 91 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); | 98 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
| 92 | 99 |
| 93 pref_sync_service_ = reinterpret_cast<PrefModelAssociator*>( | 100 pref_sync_service_ = reinterpret_cast<PrefModelAssociator*>( |
| 94 prefs_.GetSyncableService(syncer::PREFERENCES)); | 101 prefs_.GetSyncableService(syncer::PREFERENCES)); |
| 95 ASSERT_TRUE(pref_sync_service_); | 102 ASSERT_TRUE(pref_sync_service_); |
| 96 next_pref_remote_sync_node_id_ = 0; | 103 next_pref_remote_sync_node_id_ = 0; |
| 97 } | 104 } |
| 98 | 105 |
| 99 syncer::SyncChange MakeRemoteChange( | 106 syncer::SyncChange MakeRemoteChange(int64 id, |
| 100 int64 id, | 107 const std::string& name, |
| 101 const std::string& name, | 108 const base::Value& value, |
| 102 const base::Value& value, | 109 SyncChange::SyncChangeType type) { |
| 103 SyncChange::SyncChangeType type) { | |
| 104 std::string serialized; | 110 std::string serialized; |
| 105 JSONStringValueSerializer json(&serialized); | 111 JSONStringValueSerializer json(&serialized); |
| 106 if (!json.Serialize(value)) | 112 if (!json.Serialize(value)) |
| 107 return syncer::SyncChange(); | 113 return syncer::SyncChange(); |
| 108 sync_pb::EntitySpecifics entity; | 114 sync_pb::EntitySpecifics entity; |
| 109 sync_pb::PreferenceSpecifics* pref_one = entity.mutable_preference(); | 115 sync_pb::PreferenceSpecifics* pref_one = entity.mutable_preference(); |
| 110 pref_one->set_name(name); | 116 pref_one->set_name(name); |
| 111 pref_one->set_value(serialized); | 117 pref_one->set_value(serialized); |
| 112 return syncer::SyncChange( | 118 return syncer::SyncChange( |
| 113 FROM_HERE, | 119 FROM_HERE, |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 InitWithSyncDataTakeOutput(syncer::SyncDataList(), NULL); | 159 InitWithSyncDataTakeOutput(syncer::SyncDataList(), NULL); |
| 154 } | 160 } |
| 155 | 161 |
| 156 const base::Value& GetPreferenceValue(const std::string& name) { | 162 const base::Value& GetPreferenceValue(const std::string& name) { |
| 157 const PrefService::Preference* preference = | 163 const PrefService::Preference* preference = |
| 158 prefs_.FindPreference(name.c_str()); | 164 prefs_.FindPreference(name.c_str()); |
| 159 return *preference->GetValue(); | 165 return *preference->GetValue(); |
| 160 } | 166 } |
| 161 | 167 |
| 162 scoped_ptr<base::Value> FindValue(const std::string& name, | 168 scoped_ptr<base::Value> FindValue(const std::string& name, |
| 163 const syncer::SyncChangeList& list) { | 169 const syncer::SyncChangeList& list) { |
| 164 syncer::SyncChangeList::const_iterator it = list.begin(); | 170 syncer::SyncChangeList::const_iterator it = list.begin(); |
| 165 for (; it != list.end(); ++it) { | 171 for (; it != list.end(); ++it) { |
| 166 if (syncer::SyncDataLocal(it->sync_data()).GetTag() == name) { | 172 if (syncer::SyncDataLocal(it->sync_data()).GetTag() == name) { |
| 167 return make_scoped_ptr(base::JSONReader::DeprecatedRead( | 173 return make_scoped_ptr(base::JSONReader::DeprecatedRead( |
| 168 it->sync_data().GetSpecifics().preference().value())); | 174 it->sync_data().GetSpecifics().preference().value())); |
| 169 } | 175 } |
| 170 } | 176 } |
| 171 return scoped_ptr<base::Value>(); | 177 return scoped_ptr<base::Value>(); |
| 172 } | 178 } |
| 173 | 179 |
| 174 bool IsSynced(const std::string& pref_name) { | 180 bool IsSynced(const std::string& pref_name) { |
| 175 return pref_sync_service_->registered_preferences().count(pref_name) > 0; | 181 return pref_sync_service_->registered_preferences().count(pref_name) > 0; |
| 176 } | 182 } |
| 177 | 183 |
| 178 bool HasSyncData(const std::string& pref_name) { | 184 bool HasSyncData(const std::string& pref_name) { |
| 179 return pref_sync_service_->IsPrefSynced(pref_name); | 185 return pref_sync_service_->IsPrefSynced(pref_name); |
| 180 } | 186 } |
| 181 | 187 |
| 182 PrefService* GetPrefs() { return &prefs_; } | 188 PrefService* GetPrefs() { return &prefs_; } |
| 183 TestingPrefServiceSyncable* GetTestingPrefService() { return &prefs_; } | 189 TestingPrefServiceSyncable* GetTestingPrefService() { return &prefs_; } |
| 184 | 190 |
| 185 protected: | 191 protected: |
| 192 PrefModelAssociatorClient pref_model_associator_client_; |
| 186 TestingPrefServiceSyncable prefs_; | 193 TestingPrefServiceSyncable prefs_; |
| 187 | 194 |
| 188 PrefModelAssociator* pref_sync_service_; | 195 PrefModelAssociator* pref_sync_service_; |
| 189 TestSyncProcessorStub* test_processor_; | 196 TestSyncProcessorStub* test_processor_; |
| 190 | 197 |
| 191 // TODO(tim): Remove this by fixing AttachmentServiceProxyForTest. | 198 // TODO(tim): Remove this by fixing AttachmentServiceProxyForTest. |
| 192 base::MessageLoop loop_; | 199 base::MessageLoop loop_; |
| 193 | 200 |
| 194 int next_pref_remote_sync_node_id_; | 201 int next_pref_remote_sync_node_id_; |
| 195 }; | 202 }; |
| 196 | 203 |
| 197 TEST_F(PrefServiceSyncableTest, CreatePrefSyncData) { | 204 TEST_F(PrefServiceSyncableTest, CreatePrefSyncData) { |
| 198 prefs_.SetString(prefs::kHomePage, kExampleUrl0); | 205 prefs_.SetString(kHomePage, kExampleUrl0); |
| 199 | 206 |
| 200 const PrefService::Preference* pref = | 207 const PrefService::Preference* pref = prefs_.FindPreference(kHomePage); |
| 201 prefs_.FindPreference(prefs::kHomePage); | |
| 202 syncer::SyncData sync_data; | 208 syncer::SyncData sync_data; |
| 203 EXPECT_TRUE(pref_sync_service_->CreatePrefSyncData(pref->name(), | 209 EXPECT_TRUE(pref_sync_service_->CreatePrefSyncData( |
| 204 *pref->GetValue(), &sync_data)); | 210 pref->name(), *pref->GetValue(), &sync_data)); |
| 205 EXPECT_EQ(std::string(prefs::kHomePage), | 211 EXPECT_EQ(std::string(kHomePage), syncer::SyncDataLocal(sync_data).GetTag()); |
| 206 syncer::SyncDataLocal(sync_data).GetTag()); | 212 const sync_pb::PreferenceSpecifics& specifics( |
| 207 const sync_pb::PreferenceSpecifics& specifics(sync_data.GetSpecifics(). | 213 sync_data.GetSpecifics().preference()); |
| 208 preference()); | 214 EXPECT_EQ(std::string(kHomePage), specifics.name()); |
| 209 EXPECT_EQ(std::string(prefs::kHomePage), specifics.name()); | |
| 210 | 215 |
| 211 scoped_ptr<base::Value> value = base::JSONReader::Read(specifics.value()); | 216 scoped_ptr<base::Value> value = base::JSONReader::Read(specifics.value()); |
| 212 EXPECT_TRUE(pref->GetValue()->Equals(value.get())); | 217 EXPECT_TRUE(pref->GetValue()->Equals(value.get())); |
| 213 } | 218 } |
| 214 | 219 |
| 215 TEST_F(PrefServiceSyncableTest, ModelAssociationDoNotSyncDefaults) { | 220 TEST_F(PrefServiceSyncableTest, ModelAssociationDoNotSyncDefaults) { |
| 216 const PrefService::Preference* pref = | 221 const PrefService::Preference* pref = prefs_.FindPreference(kHomePage); |
| 217 prefs_.FindPreference(prefs::kHomePage); | |
| 218 EXPECT_TRUE(pref->IsDefaultValue()); | 222 EXPECT_TRUE(pref->IsDefaultValue()); |
| 219 syncer::SyncChangeList out; | 223 syncer::SyncChangeList out; |
| 220 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 224 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
| 221 | 225 |
| 222 EXPECT_TRUE(IsSynced(prefs::kHomePage)); | 226 EXPECT_TRUE(IsSynced(kHomePage)); |
| 223 EXPECT_TRUE(pref->IsDefaultValue()); | 227 EXPECT_TRUE(pref->IsDefaultValue()); |
| 224 EXPECT_FALSE(FindValue(prefs::kHomePage, out).get()); | 228 EXPECT_FALSE(FindValue(kHomePage, out).get()); |
| 225 } | 229 } |
| 226 | 230 |
| 227 TEST_F(PrefServiceSyncableTest, ModelAssociationEmptyCloud) { | 231 TEST_F(PrefServiceSyncableTest, ModelAssociationEmptyCloud) { |
| 228 prefs_.SetString(prefs::kHomePage, kExampleUrl0); | 232 prefs_.SetString(kHomePage, kExampleUrl0); |
| 229 { | 233 { |
| 230 ListPrefUpdate update(GetPrefs(), prefs::kURLsToRestoreOnStartup); | 234 ListPrefUpdate update(GetPrefs(), kURLsToRestoreOnStartup); |
| 231 base::ListValue* url_list = update.Get(); | 235 base::ListValue* url_list = update.Get(); |
| 232 url_list->Append(new base::StringValue(kExampleUrl0)); | 236 url_list->Append(new base::StringValue(kExampleUrl0)); |
| 233 url_list->Append(new base::StringValue(kExampleUrl1)); | 237 url_list->Append(new base::StringValue(kExampleUrl1)); |
| 234 } | 238 } |
| 235 syncer::SyncChangeList out; | 239 syncer::SyncChangeList out; |
| 236 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 240 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
| 237 | 241 |
| 238 scoped_ptr<base::Value> value(FindValue(prefs::kHomePage, out)); | 242 scoped_ptr<base::Value> value(FindValue(kHomePage, out)); |
| 239 ASSERT_TRUE(value.get()); | 243 ASSERT_TRUE(value.get()); |
| 240 EXPECT_TRUE(GetPreferenceValue(prefs::kHomePage).Equals(value.get())); | 244 EXPECT_TRUE(GetPreferenceValue(kHomePage).Equals(value.get())); |
| 241 value = FindValue(prefs::kURLsToRestoreOnStartup, out).Pass(); | 245 value = FindValue(kURLsToRestoreOnStartup, out).Pass(); |
| 242 ASSERT_TRUE(value.get()); | 246 ASSERT_TRUE(value.get()); |
| 243 EXPECT_TRUE( | 247 EXPECT_TRUE(GetPreferenceValue(kURLsToRestoreOnStartup).Equals(value.get())); |
| 244 GetPreferenceValue(prefs::kURLsToRestoreOnStartup).Equals(value.get())); | |
| 245 } | 248 } |
| 246 | 249 |
| 247 TEST_F(PrefServiceSyncableTest, ModelAssociationCloudHasData) { | 250 TEST_F(PrefServiceSyncableTest, ModelAssociationCloudHasData) { |
| 248 prefs_.SetString(prefs::kHomePage, kExampleUrl0); | 251 prefs_.SetString(kHomePage, kExampleUrl0); |
| 249 { | 252 { |
| 250 ListPrefUpdate update(GetPrefs(), prefs::kURLsToRestoreOnStartup); | 253 ListPrefUpdate update(GetPrefs(), kURLsToRestoreOnStartup); |
| 251 base::ListValue* url_list = update.Get(); | 254 base::ListValue* url_list = update.Get(); |
| 252 url_list->Append(new base::StringValue(kExampleUrl0)); | 255 url_list->Append(new base::StringValue(kExampleUrl0)); |
| 253 url_list->Append(new base::StringValue(kExampleUrl1)); | 256 url_list->Append(new base::StringValue(kExampleUrl1)); |
| 254 } | 257 } |
| 255 | 258 |
| 256 syncer::SyncDataList in; | 259 syncer::SyncDataList in; |
| 257 syncer::SyncChangeList out; | 260 syncer::SyncChangeList out; |
| 258 AddToRemoteDataList(prefs::kHomePage, base::StringValue(kExampleUrl1), &in); | 261 AddToRemoteDataList(kHomePage, base::StringValue(kExampleUrl1), &in); |
| 259 base::ListValue urls_to_restore; | 262 base::ListValue urls_to_restore; |
| 260 urls_to_restore.Append(new base::StringValue(kExampleUrl1)); | 263 urls_to_restore.Append(new base::StringValue(kExampleUrl1)); |
| 261 urls_to_restore.Append(new base::StringValue(kExampleUrl2)); | 264 urls_to_restore.Append(new base::StringValue(kExampleUrl2)); |
| 262 AddToRemoteDataList(prefs::kURLsToRestoreOnStartup, urls_to_restore, &in); | 265 AddToRemoteDataList(kURLsToRestoreOnStartup, urls_to_restore, &in); |
| 263 AddToRemoteDataList(prefs::kDefaultCharset, | 266 AddToRemoteDataList(kDefaultCharset, |
| 264 base::StringValue(kNonDefaultCharsetValue), | 267 base::StringValue(kNonDefaultCharsetValue), &in); |
| 265 &in); | |
| 266 InitWithSyncDataTakeOutput(in, &out); | 268 InitWithSyncDataTakeOutput(in, &out); |
| 267 | 269 |
| 268 ASSERT_FALSE(FindValue(prefs::kHomePage, out).get()); | 270 ASSERT_FALSE(FindValue(kHomePage, out).get()); |
| 269 ASSERT_FALSE(FindValue(prefs::kDefaultCharset, out).get()); | 271 ASSERT_FALSE(FindValue(kDefaultCharset, out).get()); |
| 270 | 272 |
| 271 EXPECT_EQ(kExampleUrl1, prefs_.GetString(prefs::kHomePage)); | 273 EXPECT_EQ(kExampleUrl1, prefs_.GetString(kHomePage)); |
| 272 | 274 |
| 273 scoped_ptr<base::ListValue> expected_urls(new base::ListValue); | 275 scoped_ptr<base::ListValue> expected_urls(new base::ListValue); |
| 274 expected_urls->Append(new base::StringValue(kExampleUrl1)); | 276 expected_urls->Append(new base::StringValue(kExampleUrl1)); |
| 275 expected_urls->Append(new base::StringValue(kExampleUrl2)); | 277 expected_urls->Append(new base::StringValue(kExampleUrl2)); |
| 276 expected_urls->Append(new base::StringValue(kExampleUrl0)); | 278 expected_urls->Append(new base::StringValue(kExampleUrl0)); |
| 277 scoped_ptr<base::Value> value( | 279 scoped_ptr<base::Value> value(FindValue(kURLsToRestoreOnStartup, out)); |
| 278 FindValue(prefs::kURLsToRestoreOnStartup, out)); | |
| 279 ASSERT_TRUE(value.get()); | 280 ASSERT_TRUE(value.get()); |
| 280 EXPECT_TRUE(value->Equals(expected_urls.get())); | 281 EXPECT_TRUE(value->Equals(expected_urls.get())); |
| 281 EXPECT_TRUE(GetPreferenceValue(prefs::kURLsToRestoreOnStartup). | 282 EXPECT_TRUE( |
| 282 Equals(expected_urls.get())); | 283 GetPreferenceValue(kURLsToRestoreOnStartup).Equals(expected_urls.get())); |
| 283 EXPECT_EQ(kNonDefaultCharsetValue, | 284 EXPECT_EQ(kNonDefaultCharsetValue, prefs_.GetString(kDefaultCharset)); |
| 284 prefs_.GetString(prefs::kDefaultCharset)); | |
| 285 } | 285 } |
| 286 | 286 |
| 287 TEST_F(PrefServiceSyncableTest, FailModelAssociation) { | 287 TEST_F(PrefServiceSyncableTest, FailModelAssociation) { |
| 288 syncer::SyncChangeList output; | 288 syncer::SyncChangeList output; |
| 289 TestSyncProcessorStub* stub = new TestSyncProcessorStub(&output); | 289 TestSyncProcessorStub* stub = new TestSyncProcessorStub(&output); |
| 290 stub->FailNextProcessSyncChanges(); | 290 stub->FailNextProcessSyncChanges(); |
| 291 syncer::SyncMergeResult r = pref_sync_service_->MergeDataAndStartSyncing( | 291 syncer::SyncMergeResult r = pref_sync_service_->MergeDataAndStartSyncing( |
| 292 syncer::PREFERENCES, syncer::SyncDataList(), | 292 syncer::PREFERENCES, syncer::SyncDataList(), |
| 293 scoped_ptr<syncer::SyncChangeProcessor>(stub), | 293 scoped_ptr<syncer::SyncChangeProcessor>(stub), |
| 294 scoped_ptr<syncer::SyncErrorFactory>( | 294 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); |
| 295 new syncer::SyncErrorFactoryMock())); | |
| 296 EXPECT_TRUE(r.error().IsSet()); | 295 EXPECT_TRUE(r.error().IsSet()); |
| 297 } | 296 } |
| 298 | 297 |
| 299 TEST_F(PrefServiceSyncableTest, UpdatedPreferenceWithDefaultValue) { | 298 TEST_F(PrefServiceSyncableTest, UpdatedPreferenceWithDefaultValue) { |
| 300 const PrefService::Preference* pref = | 299 const PrefService::Preference* pref = prefs_.FindPreference(kHomePage); |
| 301 prefs_.FindPreference(prefs::kHomePage); | |
| 302 EXPECT_TRUE(pref->IsDefaultValue()); | 300 EXPECT_TRUE(pref->IsDefaultValue()); |
| 303 | 301 |
| 304 syncer::SyncChangeList out; | 302 syncer::SyncChangeList out; |
| 305 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 303 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
| 306 out.clear(); | 304 out.clear(); |
| 307 | 305 |
| 308 base::StringValue expected(kExampleUrl0); | 306 base::StringValue expected(kExampleUrl0); |
| 309 GetPrefs()->Set(prefs::kHomePage, expected); | 307 GetPrefs()->Set(kHomePage, expected); |
| 310 | 308 |
| 311 scoped_ptr<base::Value> actual(FindValue(prefs::kHomePage, out)); | 309 scoped_ptr<base::Value> actual(FindValue(kHomePage, out)); |
| 312 ASSERT_TRUE(actual.get()); | 310 ASSERT_TRUE(actual.get()); |
| 313 EXPECT_TRUE(expected.Equals(actual.get())); | 311 EXPECT_TRUE(expected.Equals(actual.get())); |
| 314 } | 312 } |
| 315 | 313 |
| 316 TEST_F(PrefServiceSyncableTest, UpdatedPreferenceWithValue) { | 314 TEST_F(PrefServiceSyncableTest, UpdatedPreferenceWithValue) { |
| 317 GetPrefs()->SetString(prefs::kHomePage, kExampleUrl0); | 315 GetPrefs()->SetString(kHomePage, kExampleUrl0); |
| 318 syncer::SyncChangeList out; | 316 syncer::SyncChangeList out; |
| 319 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 317 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
| 320 out.clear(); | 318 out.clear(); |
| 321 | 319 |
| 322 base::StringValue expected(kExampleUrl1); | 320 base::StringValue expected(kExampleUrl1); |
| 323 GetPrefs()->Set(prefs::kHomePage, expected); | 321 GetPrefs()->Set(kHomePage, expected); |
| 324 | 322 |
| 325 scoped_ptr<base::Value> actual(FindValue(prefs::kHomePage, out)); | 323 scoped_ptr<base::Value> actual(FindValue(kHomePage, out)); |
| 326 ASSERT_TRUE(actual.get()); | 324 ASSERT_TRUE(actual.get()); |
| 327 EXPECT_TRUE(expected.Equals(actual.get())); | 325 EXPECT_TRUE(expected.Equals(actual.get())); |
| 328 } | 326 } |
| 329 | 327 |
| 330 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeActionUpdate) { | 328 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeActionUpdate) { |
| 331 GetPrefs()->SetString(prefs::kHomePage, kExampleUrl0); | 329 GetPrefs()->SetString(kHomePage, kExampleUrl0); |
| 332 InitWithNoSyncData(); | 330 InitWithNoSyncData(); |
| 333 | 331 |
| 334 base::StringValue expected(kExampleUrl1); | 332 base::StringValue expected(kExampleUrl1); |
| 335 syncer::SyncChangeList list; | 333 syncer::SyncChangeList list; |
| 336 list.push_back(MakeRemoteChange( | 334 list.push_back( |
| 337 1, prefs::kHomePage, expected, SyncChange::ACTION_UPDATE)); | 335 MakeRemoteChange(1, kHomePage, expected, SyncChange::ACTION_UPDATE)); |
| 338 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 336 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
| 339 | 337 |
| 340 const base::Value& actual = GetPreferenceValue(prefs::kHomePage); | 338 const base::Value& actual = GetPreferenceValue(kHomePage); |
| 341 EXPECT_TRUE(expected.Equals(&actual)); | 339 EXPECT_TRUE(expected.Equals(&actual)); |
| 342 } | 340 } |
| 343 | 341 |
| 344 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeActionAdd) { | 342 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeActionAdd) { |
| 345 InitWithNoSyncData(); | 343 InitWithNoSyncData(); |
| 346 | 344 |
| 347 base::StringValue expected(kExampleUrl0); | 345 base::StringValue expected(kExampleUrl0); |
| 348 syncer::SyncChangeList list; | 346 syncer::SyncChangeList list; |
| 349 list.push_back(MakeRemoteChange( | 347 list.push_back( |
| 350 1, prefs::kHomePage, expected, SyncChange::ACTION_ADD)); | 348 MakeRemoteChange(1, kHomePage, expected, SyncChange::ACTION_ADD)); |
| 351 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 349 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
| 352 | 350 |
| 353 const base::Value& actual = GetPreferenceValue(prefs::kHomePage); | 351 const base::Value& actual = GetPreferenceValue(kHomePage); |
| 354 EXPECT_TRUE(expected.Equals(&actual)); | 352 EXPECT_TRUE(expected.Equals(&actual)); |
| 355 EXPECT_EQ(1U, | 353 EXPECT_EQ(1U, pref_sync_service_->registered_preferences().count(kHomePage)); |
| 356 pref_sync_service_->registered_preferences().count(prefs::kHomePage)); | |
| 357 } | 354 } |
| 358 | 355 |
| 359 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeUnknownPreference) { | 356 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeUnknownPreference) { |
| 360 InitWithNoSyncData(); | 357 InitWithNoSyncData(); |
| 361 syncer::SyncChangeList list; | 358 syncer::SyncChangeList list; |
| 362 base::StringValue expected(kExampleUrl0); | 359 base::StringValue expected(kExampleUrl0); |
| 363 list.push_back(MakeRemoteChange( | 360 list.push_back(MakeRemoteChange( |
| 364 1, "unknown preference", expected, SyncChange::ACTION_UPDATE)); | 361 1, "unknown preference", expected, SyncChange::ACTION_UPDATE)); |
| 365 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 362 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
| 366 // Nothing interesting happens on the client when it gets an update | 363 // Nothing interesting happens on the client when it gets an update |
| 367 // of an unknown preference. We just should not crash. | 364 // of an unknown preference. We just should not crash. |
| 368 } | 365 } |
| 369 | 366 |
| 370 TEST_F(PrefServiceSyncableTest, ManagedPreferences) { | 367 TEST_F(PrefServiceSyncableTest, ManagedPreferences) { |
| 371 // Make the homepage preference managed. | 368 // Make the homepage preference managed. |
| 372 base::StringValue managed_value("http://example.com"); | 369 base::StringValue managed_value("http://example.com"); |
| 373 prefs_.SetManagedPref(prefs::kHomePage, managed_value.DeepCopy()); | 370 prefs_.SetManagedPref(kHomePage, managed_value.DeepCopy()); |
| 374 | 371 |
| 375 syncer::SyncChangeList out; | 372 syncer::SyncChangeList out; |
| 376 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 373 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
| 377 out.clear(); | 374 out.clear(); |
| 378 | 375 |
| 379 // Changing the homepage preference should not sync anything. | 376 // Changing the homepage preference should not sync anything. |
| 380 base::StringValue user_value("http://chromium..com"); | 377 base::StringValue user_value("http://chromium..com"); |
| 381 prefs_.SetUserPref(prefs::kHomePage, user_value.DeepCopy()); | 378 prefs_.SetUserPref(kHomePage, user_value.DeepCopy()); |
| 382 EXPECT_TRUE(out.empty()); | 379 EXPECT_TRUE(out.empty()); |
| 383 | 380 |
| 384 // An incoming sync transaction should change the user value, not the managed | 381 // An incoming sync transaction should change the user value, not the managed |
| 385 // value. | 382 // value. |
| 386 base::StringValue sync_value("http://crbug.com"); | 383 base::StringValue sync_value("http://crbug.com"); |
| 387 syncer::SyncChangeList list; | 384 syncer::SyncChangeList list; |
| 388 list.push_back(MakeRemoteChange( | 385 list.push_back( |
| 389 1, prefs::kHomePage, sync_value, SyncChange::ACTION_UPDATE)); | 386 MakeRemoteChange(1, kHomePage, sync_value, SyncChange::ACTION_UPDATE)); |
| 390 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 387 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
| 391 | 388 |
| 392 EXPECT_TRUE(managed_value.Equals(prefs_.GetManagedPref(prefs::kHomePage))); | 389 EXPECT_TRUE(managed_value.Equals(prefs_.GetManagedPref(kHomePage))); |
| 393 EXPECT_TRUE(sync_value.Equals(prefs_.GetUserPref(prefs::kHomePage))); | 390 EXPECT_TRUE(sync_value.Equals(prefs_.GetUserPref(kHomePage))); |
| 394 } | 391 } |
| 395 | 392 |
| 396 // List preferences have special handling at association time due to our ability | 393 // List preferences have special handling at association time due to our ability |
| 397 // to merge the local and sync value. Make sure the merge logic doesn't merge | 394 // to merge the local and sync value. Make sure the merge logic doesn't merge |
| 398 // managed preferences. | 395 // managed preferences. |
| 399 TEST_F(PrefServiceSyncableTest, ManagedListPreferences) { | 396 TEST_F(PrefServiceSyncableTest, ManagedListPreferences) { |
| 400 // Make the list of urls to restore on startup managed. | 397 // Make the list of urls to restore on startup managed. |
| 401 base::ListValue managed_value; | 398 base::ListValue managed_value; |
| 402 managed_value.Append(new base::StringValue(kExampleUrl0)); | 399 managed_value.Append(new base::StringValue(kExampleUrl0)); |
| 403 managed_value.Append(new base::StringValue(kExampleUrl1)); | 400 managed_value.Append(new base::StringValue(kExampleUrl1)); |
| 404 prefs_.SetManagedPref(prefs::kURLsToRestoreOnStartup, | 401 prefs_.SetManagedPref(kURLsToRestoreOnStartup, managed_value.DeepCopy()); |
| 405 managed_value.DeepCopy()); | |
| 406 | 402 |
| 407 // Set a cloud version. | 403 // Set a cloud version. |
| 408 syncer::SyncDataList in; | 404 syncer::SyncDataList in; |
| 409 syncer::SyncChangeList out; | 405 syncer::SyncChangeList out; |
| 410 base::ListValue urls_to_restore; | 406 base::ListValue urls_to_restore; |
| 411 urls_to_restore.Append(new base::StringValue(kExampleUrl1)); | 407 urls_to_restore.Append(new base::StringValue(kExampleUrl1)); |
| 412 urls_to_restore.Append(new base::StringValue(kExampleUrl2)); | 408 urls_to_restore.Append(new base::StringValue(kExampleUrl2)); |
| 413 AddToRemoteDataList(prefs::kURLsToRestoreOnStartup, urls_to_restore, &in); | 409 AddToRemoteDataList(kURLsToRestoreOnStartup, urls_to_restore, &in); |
| 414 | 410 |
| 415 // Start sync and verify the synced value didn't get merged. | 411 // Start sync and verify the synced value didn't get merged. |
| 416 InitWithSyncDataTakeOutput(in, &out); | 412 InitWithSyncDataTakeOutput(in, &out); |
| 417 EXPECT_FALSE(FindValue(prefs::kURLsToRestoreOnStartup, out).get()); | 413 EXPECT_FALSE(FindValue(kURLsToRestoreOnStartup, out).get()); |
| 418 out.clear(); | 414 out.clear(); |
| 419 | 415 |
| 420 // Changing the user's urls to restore on startup pref should not sync | 416 // Changing the user's urls to restore on startup pref should not sync |
| 421 // anything. | 417 // anything. |
| 422 base::ListValue user_value; | 418 base::ListValue user_value; |
| 423 user_value.Append(new base::StringValue("http://chromium.org")); | 419 user_value.Append(new base::StringValue("http://chromium.org")); |
| 424 prefs_.SetUserPref(prefs::kURLsToRestoreOnStartup, user_value.DeepCopy()); | 420 prefs_.SetUserPref(kURLsToRestoreOnStartup, user_value.DeepCopy()); |
| 425 EXPECT_FALSE(FindValue(prefs::kURLsToRestoreOnStartup, out).get()); | 421 EXPECT_FALSE(FindValue(kURLsToRestoreOnStartup, out).get()); |
| 426 | 422 |
| 427 // An incoming sync transaction should change the user value, not the managed | 423 // An incoming sync transaction should change the user value, not the managed |
| 428 // value. | 424 // value. |
| 429 base::ListValue sync_value; | 425 base::ListValue sync_value; |
| 430 sync_value.Append(new base::StringValue("http://crbug.com")); | 426 sync_value.Append(new base::StringValue("http://crbug.com")); |
| 431 syncer::SyncChangeList list; | 427 syncer::SyncChangeList list; |
| 432 list.push_back(MakeRemoteChange( | 428 list.push_back(MakeRemoteChange(1, kURLsToRestoreOnStartup, sync_value, |
| 433 1, prefs::kURLsToRestoreOnStartup, sync_value, | 429 SyncChange::ACTION_UPDATE)); |
| 434 SyncChange::ACTION_UPDATE)); | |
| 435 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 430 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
| 436 | 431 |
| 437 EXPECT_TRUE(managed_value.Equals( | 432 EXPECT_TRUE( |
| 438 prefs_.GetManagedPref(prefs::kURLsToRestoreOnStartup))); | 433 managed_value.Equals(prefs_.GetManagedPref(kURLsToRestoreOnStartup))); |
| 439 EXPECT_TRUE(sync_value.Equals( | 434 EXPECT_TRUE(sync_value.Equals(prefs_.GetUserPref(kURLsToRestoreOnStartup))); |
| 440 prefs_.GetUserPref(prefs::kURLsToRestoreOnStartup))); | |
| 441 } | 435 } |
| 442 | 436 |
| 443 TEST_F(PrefServiceSyncableTest, DynamicManagedPreferences) { | 437 TEST_F(PrefServiceSyncableTest, DynamicManagedPreferences) { |
| 444 syncer::SyncChangeList out; | 438 syncer::SyncChangeList out; |
| 445 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 439 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
| 446 out.clear(); | 440 out.clear(); |
| 447 base::StringValue initial_value("http://example.com/initial"); | 441 base::StringValue initial_value("http://example.com/initial"); |
| 448 GetPrefs()->Set(prefs::kHomePage, initial_value); | 442 GetPrefs()->Set(kHomePage, initial_value); |
| 449 scoped_ptr<base::Value> actual(FindValue(prefs::kHomePage, out)); | 443 scoped_ptr<base::Value> actual(FindValue(kHomePage, out)); |
| 450 ASSERT_TRUE(actual.get()); | 444 ASSERT_TRUE(actual.get()); |
| 451 EXPECT_TRUE(initial_value.Equals(actual.get())); | 445 EXPECT_TRUE(initial_value.Equals(actual.get())); |
| 452 | 446 |
| 453 // Switch kHomePage to managed and set a different value. | 447 // Switch kHomePage to managed and set a different value. |
| 454 base::StringValue managed_value("http://example.com/managed"); | 448 base::StringValue managed_value("http://example.com/managed"); |
| 455 GetTestingPrefService()->SetManagedPref(prefs::kHomePage, | 449 GetTestingPrefService()->SetManagedPref(kHomePage, managed_value.DeepCopy()); |
| 456 managed_value.DeepCopy()); | |
| 457 | 450 |
| 458 // The pref value should be the one dictated by policy. | 451 // The pref value should be the one dictated by policy. |
| 459 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(prefs::kHomePage))); | 452 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kHomePage))); |
| 460 | 453 |
| 461 // Switch kHomePage back to unmanaged. | 454 // Switch kHomePage back to unmanaged. |
| 462 GetTestingPrefService()->RemoveManagedPref(prefs::kHomePage); | 455 GetTestingPrefService()->RemoveManagedPref(kHomePage); |
| 463 | 456 |
| 464 // The original value should be picked up. | 457 // The original value should be picked up. |
| 465 EXPECT_TRUE(initial_value.Equals(&GetPreferenceValue(prefs::kHomePage))); | 458 EXPECT_TRUE(initial_value.Equals(&GetPreferenceValue(kHomePage))); |
| 466 } | 459 } |
| 467 | 460 |
| 468 TEST_F(PrefServiceSyncableTest, DynamicManagedPreferencesWithSyncChange) { | 461 TEST_F(PrefServiceSyncableTest, DynamicManagedPreferencesWithSyncChange) { |
| 469 syncer::SyncChangeList out; | 462 syncer::SyncChangeList out; |
| 470 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 463 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
| 471 out.clear(); | 464 out.clear(); |
| 472 | 465 |
| 473 base::StringValue initial_value("http://example.com/initial"); | 466 base::StringValue initial_value("http://example.com/initial"); |
| 474 GetPrefs()->Set(prefs::kHomePage, initial_value); | 467 GetPrefs()->Set(kHomePage, initial_value); |
| 475 scoped_ptr<base::Value> actual(FindValue(prefs::kHomePage, out)); | 468 scoped_ptr<base::Value> actual(FindValue(kHomePage, out)); |
| 476 EXPECT_TRUE(initial_value.Equals(actual.get())); | 469 EXPECT_TRUE(initial_value.Equals(actual.get())); |
| 477 | 470 |
| 478 // Switch kHomePage to managed and set a different value. | 471 // Switch kHomePage to managed and set a different value. |
| 479 base::StringValue managed_value("http://example.com/managed"); | 472 base::StringValue managed_value("http://example.com/managed"); |
| 480 GetTestingPrefService()->SetManagedPref(prefs::kHomePage, | 473 GetTestingPrefService()->SetManagedPref(kHomePage, managed_value.DeepCopy()); |
| 481 managed_value.DeepCopy()); | |
| 482 | 474 |
| 483 // Change the sync value. | 475 // Change the sync value. |
| 484 base::StringValue sync_value("http://example.com/sync"); | 476 base::StringValue sync_value("http://example.com/sync"); |
| 485 syncer::SyncChangeList list; | 477 syncer::SyncChangeList list; |
| 486 list.push_back(MakeRemoteChange( | 478 list.push_back( |
| 487 1, prefs::kHomePage, sync_value, SyncChange::ACTION_UPDATE)); | 479 MakeRemoteChange(1, kHomePage, sync_value, SyncChange::ACTION_UPDATE)); |
| 488 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 480 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
| 489 | 481 |
| 490 // The pref value should still be the one dictated by policy. | 482 // The pref value should still be the one dictated by policy. |
| 491 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(prefs::kHomePage))); | 483 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kHomePage))); |
| 492 | 484 |
| 493 // Switch kHomePage back to unmanaged. | 485 // Switch kHomePage back to unmanaged. |
| 494 GetTestingPrefService()->RemoveManagedPref(prefs::kHomePage); | 486 GetTestingPrefService()->RemoveManagedPref(kHomePage); |
| 495 | 487 |
| 496 // Sync value should be picked up. | 488 // Sync value should be picked up. |
| 497 EXPECT_TRUE(sync_value.Equals(&GetPreferenceValue(prefs::kHomePage))); | 489 EXPECT_TRUE(sync_value.Equals(&GetPreferenceValue(kHomePage))); |
| 498 } | 490 } |
| 499 | 491 |
| 500 TEST_F(PrefServiceSyncableTest, DynamicManagedDefaultPreferences) { | 492 TEST_F(PrefServiceSyncableTest, DynamicManagedDefaultPreferences) { |
| 501 const PrefService::Preference* pref = | 493 const PrefService::Preference* pref = prefs_.FindPreference(kHomePage); |
| 502 prefs_.FindPreference(prefs::kHomePage); | |
| 503 EXPECT_TRUE(pref->IsDefaultValue()); | 494 EXPECT_TRUE(pref->IsDefaultValue()); |
| 504 syncer::SyncChangeList out; | 495 syncer::SyncChangeList out; |
| 505 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 496 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
| 506 | 497 |
| 507 EXPECT_TRUE(IsSynced(prefs::kHomePage)); | 498 EXPECT_TRUE(IsSynced(kHomePage)); |
| 508 EXPECT_TRUE(pref->IsDefaultValue()); | 499 EXPECT_TRUE(pref->IsDefaultValue()); |
| 509 EXPECT_FALSE(FindValue(prefs::kHomePage, out).get()); | 500 EXPECT_FALSE(FindValue(kHomePage, out).get()); |
| 510 out.clear(); | 501 out.clear(); |
| 511 | 502 |
| 512 // Switch kHomePage to managed and set a different value. | 503 // Switch kHomePage to managed and set a different value. |
| 513 base::StringValue managed_value("http://example.com/managed"); | 504 base::StringValue managed_value("http://example.com/managed"); |
| 514 GetTestingPrefService()->SetManagedPref(prefs::kHomePage, | 505 GetTestingPrefService()->SetManagedPref(kHomePage, managed_value.DeepCopy()); |
| 515 managed_value.DeepCopy()); | |
| 516 // The pref value should be the one dictated by policy. | 506 // The pref value should be the one dictated by policy. |
| 517 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(prefs::kHomePage))); | 507 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kHomePage))); |
| 518 EXPECT_FALSE(pref->IsDefaultValue()); | 508 EXPECT_FALSE(pref->IsDefaultValue()); |
| 519 // There should be no synced value. | 509 // There should be no synced value. |
| 520 EXPECT_FALSE(FindValue(prefs::kHomePage, out).get()); | 510 EXPECT_FALSE(FindValue(kHomePage, out).get()); |
| 521 // Switch kHomePage back to unmanaged. | 511 // Switch kHomePage back to unmanaged. |
| 522 GetTestingPrefService()->RemoveManagedPref(prefs::kHomePage); | 512 GetTestingPrefService()->RemoveManagedPref(kHomePage); |
| 523 // The original value should be picked up. | 513 // The original value should be picked up. |
| 524 EXPECT_TRUE(pref->IsDefaultValue()); | 514 EXPECT_TRUE(pref->IsDefaultValue()); |
| 525 // There should still be no synced value. | 515 // There should still be no synced value. |
| 526 EXPECT_FALSE(FindValue(prefs::kHomePage, out).get()); | 516 EXPECT_FALSE(FindValue(kHomePage, out).get()); |
| 527 } | 517 } |
| 528 | 518 |
| 529 TEST_F(PrefServiceSyncableTest, DeletePreference) { | 519 TEST_F(PrefServiceSyncableTest, DeletePreference) { |
| 530 prefs_.SetString(prefs::kHomePage, kExampleUrl0); | 520 prefs_.SetString(kHomePage, kExampleUrl0); |
| 531 const PrefService::Preference* pref = | 521 const PrefService::Preference* pref = prefs_.FindPreference(kHomePage); |
| 532 prefs_.FindPreference(prefs::kHomePage); | |
| 533 EXPECT_FALSE(pref->IsDefaultValue()); | 522 EXPECT_FALSE(pref->IsDefaultValue()); |
| 534 | 523 |
| 535 InitWithNoSyncData(); | 524 InitWithNoSyncData(); |
| 536 | 525 |
| 537 scoped_ptr<base::Value> null_value = base::Value::CreateNullValue(); | 526 scoped_ptr<base::Value> null_value = base::Value::CreateNullValue(); |
| 538 syncer::SyncChangeList list; | 527 syncer::SyncChangeList list; |
| 539 list.push_back(MakeRemoteChange( | 528 list.push_back( |
| 540 1, prefs::kHomePage, *null_value, SyncChange::ACTION_DELETE)); | 529 MakeRemoteChange(1, kHomePage, *null_value, SyncChange::ACTION_DELETE)); |
| 541 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 530 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
| 542 EXPECT_TRUE(pref->IsDefaultValue()); | 531 EXPECT_TRUE(pref->IsDefaultValue()); |
| 543 } | 532 } |
| OLD | NEW |