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

Side by Side Diff: chrome/browser/prefs/pref_service_syncable_unittest.cc

Issue 1326353002: Remove dependency of PrefSyncableService on Profile. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pref_model_associator
Patch Set: Move files back to //chrome/browser/prefs & //chrome/test/base Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698