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 |