OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 <map> | 5 #include <map> |
6 #include <string> | 6 #include <string> |
7 | 7 |
8 #include "base/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
9 #include "base/stl_util-inl.h" | 9 #include "base/stl_util-inl.h" |
10 #include "base/string_piece.h" | 10 #include "base/string_piece.h" |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 service_->RegisterDataTypeController( | 88 service_->RegisterDataTypeController( |
89 new PreferenceDataTypeController(&factory_, | 89 new PreferenceDataTypeController(&factory_, |
90 service_.get())); | 90 service_.get())); |
91 profile_->GetTokenService()->IssueAuthTokenForTest( | 91 profile_->GetTokenService()->IssueAuthTokenForTest( |
92 GaiaConstants::kSyncService, "token"); | 92 GaiaConstants::kSyncService, "token"); |
93 service_->Initialize(); | 93 service_->Initialize(); |
94 MessageLoop::current()->Run(); | 94 MessageLoop::current()->Run(); |
95 return true; | 95 return true; |
96 } | 96 } |
97 | 97 |
98 SyncBackendHost* backend() { return service_->backend_.get(); } | |
99 | |
100 const Value& GetPreferenceValue(const std::string& name) { | 98 const Value& GetPreferenceValue(const std::string& name) { |
101 const PrefService::Preference* preference = | 99 const PrefService::Preference* preference = |
102 prefs_->FindPreference(name.c_str()); | 100 prefs_->FindPreference(name.c_str()); |
103 return *preference->GetValue(); | 101 return *preference->GetValue(); |
104 } | 102 } |
105 | 103 |
106 // Caller gets ownership of the returned value. | 104 // Caller gets ownership of the returned value. |
107 const Value* GetSyncedValue(const std::string& name) { | 105 const Value* GetSyncedValue(const std::string& name) { |
108 sync_api::ReadTransaction trans(service_->backend()->GetUserShareHandle()); | 106 sync_api::ReadTransaction trans(service_->GetUserShare()); |
109 sync_api::ReadNode node(&trans); | 107 sync_api::ReadNode node(&trans); |
110 | 108 |
111 int64 node_id = model_associator_->GetSyncIdFromChromeId(name); | 109 int64 node_id = model_associator_->GetSyncIdFromChromeId(name); |
112 if (node_id == sync_api::kInvalidId) | 110 if (node_id == sync_api::kInvalidId) |
113 return NULL; | 111 return NULL; |
114 if (!node.InitByIdLookup(node_id)) | 112 if (!node.InitByIdLookup(node_id)) |
115 return NULL; | 113 return NULL; |
116 | 114 |
117 const sync_pb::PreferenceSpecifics& specifics( | 115 const sync_pb::PreferenceSpecifics& specifics( |
118 node.GetPreferenceSpecifics()); | 116 node.GetPreferenceSpecifics()); |
119 | 117 |
120 JSONReader reader; | 118 JSONReader reader; |
121 return reader.JsonToValue(specifics.value(), false, false); | 119 return reader.JsonToValue(specifics.value(), false, false); |
122 } | 120 } |
123 | 121 |
124 int64 WriteSyncedValue(sync_api::WriteNode& node, | 122 int64 WriteSyncedValue(sync_api::WriteNode& node, |
125 const std::string& name, | 123 const std::string& name, |
126 const Value& value) { | 124 const Value& value) { |
127 if (!PreferenceModelAssociator::WritePreferenceToNode(name, value, &node)) | 125 if (!PreferenceModelAssociator::WritePreferenceToNode(name, value, &node)) |
128 return sync_api::kInvalidId; | 126 return sync_api::kInvalidId; |
129 return node.GetId(); | 127 return node.GetId(); |
130 } | 128 } |
131 | 129 |
132 int64 SetSyncedValue(const std::string& name, const Value& value) { | 130 int64 SetSyncedValue(const std::string& name, const Value& value) { |
133 sync_api::WriteTransaction trans(backend()->GetUserShareHandle()); | 131 sync_api::WriteTransaction trans(service_->GetUserShare()); |
134 sync_api::ReadNode root(&trans); | 132 sync_api::ReadNode root(&trans); |
135 if (!root.InitByTagLookup(browser_sync::kPreferencesTag)) | 133 if (!root.InitByTagLookup(browser_sync::kPreferencesTag)) |
136 return sync_api::kInvalidId; | 134 return sync_api::kInvalidId; |
137 | 135 |
138 sync_api::WriteNode tag_node(&trans); | 136 sync_api::WriteNode tag_node(&trans); |
139 sync_api::WriteNode node(&trans); | 137 sync_api::WriteNode node(&trans); |
140 | 138 |
141 int64 node_id = model_associator_->GetSyncIdFromChromeId(name); | 139 int64 node_id = model_associator_->GetSyncIdFromChromeId(name); |
142 if (node_id == sync_api::kInvalidId) { | 140 if (node_id == sync_api::kInvalidId) { |
143 if (tag_node.InitByClientTagLookup(syncable::PREFERENCES, name)) | 141 if (tag_node.InitByClientTagLookup(syncable::PREFERENCES, name)) |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 }; | 210 }; |
213 | 211 |
214 TEST_F(ProfileSyncServicePreferenceTest, WritePreferenceToNode) { | 212 TEST_F(ProfileSyncServicePreferenceTest, WritePreferenceToNode) { |
215 prefs_->SetString(prefs::kHomePage, example_url0_); | 213 prefs_->SetString(prefs::kHomePage, example_url0_); |
216 CreateRootTask task(this, syncable::PREFERENCES); | 214 CreateRootTask task(this, syncable::PREFERENCES); |
217 ASSERT_TRUE(StartSyncService(&task, false)); | 215 ASSERT_TRUE(StartSyncService(&task, false)); |
218 ASSERT_TRUE(task.success()); | 216 ASSERT_TRUE(task.success()); |
219 | 217 |
220 const PrefService::Preference* pref = | 218 const PrefService::Preference* pref = |
221 prefs_->FindPreference(prefs::kHomePage); | 219 prefs_->FindPreference(prefs::kHomePage); |
222 sync_api::WriteTransaction trans(service_->backend()->GetUserShareHandle()); | 220 sync_api::WriteTransaction trans(service_->GetUserShare()); |
223 sync_api::WriteNode node(&trans); | 221 sync_api::WriteNode node(&trans); |
224 EXPECT_TRUE(node.InitByClientTagLookup(syncable::PREFERENCES, | 222 EXPECT_TRUE(node.InitByClientTagLookup(syncable::PREFERENCES, |
225 prefs::kHomePage)); | 223 prefs::kHomePage)); |
226 | 224 |
227 EXPECT_TRUE(PreferenceModelAssociator::WritePreferenceToNode( | 225 EXPECT_TRUE(PreferenceModelAssociator::WritePreferenceToNode( |
228 pref->name(), *pref->GetValue(), &node)); | 226 pref->name(), *pref->GetValue(), &node)); |
229 EXPECT_EQ(UTF8ToWide(prefs::kHomePage), node.GetTitle()); | 227 EXPECT_EQ(UTF8ToWide(prefs::kHomePage), node.GetTitle()); |
230 const sync_pb::PreferenceSpecifics& specifics(node.GetPreferenceSpecifics()); | 228 const sync_pb::PreferenceSpecifics& specifics(node.GetPreferenceSpecifics()); |
231 EXPECT_EQ(std::string(prefs::kHomePage), specifics.name()); | 229 EXPECT_EQ(std::string(prefs::kHomePage), specifics.name()); |
232 | 230 |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
355 ASSERT_TRUE(StartSyncService(&task, false)); | 353 ASSERT_TRUE(StartSyncService(&task, false)); |
356 ASSERT_TRUE(task.success()); | 354 ASSERT_TRUE(task.success()); |
357 | 355 |
358 scoped_ptr<Value> expected(Value::CreateStringValue(example_url1_)); | 356 scoped_ptr<Value> expected(Value::CreateStringValue(example_url1_)); |
359 ASSERT_NE(SetSyncedValue(prefs::kHomePage, *expected), sync_api::kInvalidId); | 357 ASSERT_NE(SetSyncedValue(prefs::kHomePage, *expected), sync_api::kInvalidId); |
360 int64 node_id = model_associator_->GetSyncIdFromChromeId(prefs::kHomePage); | 358 int64 node_id = model_associator_->GetSyncIdFromChromeId(prefs::kHomePage); |
361 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord); | 359 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord); |
362 record->action = SyncManager::ChangeRecord::ACTION_UPDATE; | 360 record->action = SyncManager::ChangeRecord::ACTION_UPDATE; |
363 record->id = node_id; | 361 record->id = node_id; |
364 { | 362 { |
365 sync_api::WriteTransaction trans(backend()->GetUserShareHandle()); | 363 sync_api::WriteTransaction trans(service_->GetUserShare()); |
366 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1); | 364 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1); |
367 } | 365 } |
368 | 366 |
369 const Value& actual = GetPreferenceValue(prefs::kHomePage); | 367 const Value& actual = GetPreferenceValue(prefs::kHomePage); |
370 EXPECT_TRUE(expected->Equals(&actual)); | 368 EXPECT_TRUE(expected->Equals(&actual)); |
371 } | 369 } |
372 | 370 |
373 TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeActionAdd) { | 371 TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeActionAdd) { |
374 CreateRootTask task(this, syncable::PREFERENCES); | 372 CreateRootTask task(this, syncable::PREFERENCES); |
375 ASSERT_TRUE(StartSyncService(&task, false)); | 373 ASSERT_TRUE(StartSyncService(&task, false)); |
376 ASSERT_TRUE(task.success()); | 374 ASSERT_TRUE(task.success()); |
377 | 375 |
378 scoped_ptr<Value> expected(Value::CreateStringValue(example_url0_)); | 376 scoped_ptr<Value> expected(Value::CreateStringValue(example_url0_)); |
379 int64 node_id = SetSyncedValue(prefs::kHomePage, *expected); | 377 int64 node_id = SetSyncedValue(prefs::kHomePage, *expected); |
380 ASSERT_NE(node_id, sync_api::kInvalidId); | 378 ASSERT_NE(node_id, sync_api::kInvalidId); |
381 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord); | 379 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord); |
382 record->action = SyncManager::ChangeRecord::ACTION_ADD; | 380 record->action = SyncManager::ChangeRecord::ACTION_ADD; |
383 record->id = node_id; | 381 record->id = node_id; |
384 { | 382 { |
385 sync_api::WriteTransaction trans(backend()->GetUserShareHandle()); | 383 sync_api::WriteTransaction trans(service_->GetUserShare()); |
386 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1); | 384 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1); |
387 } | 385 } |
388 | 386 |
389 const Value& actual = GetPreferenceValue(prefs::kHomePage); | 387 const Value& actual = GetPreferenceValue(prefs::kHomePage); |
390 EXPECT_TRUE(expected->Equals(&actual)); | 388 EXPECT_TRUE(expected->Equals(&actual)); |
391 EXPECT_EQ(node_id, | 389 EXPECT_EQ(node_id, |
392 model_associator_->GetSyncIdFromChromeId(prefs::kHomePage)); | 390 model_associator_->GetSyncIdFromChromeId(prefs::kHomePage)); |
393 } | 391 } |
394 | 392 |
395 TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeUnknownPreference) { | 393 TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeUnknownPreference) { |
396 CreateRootTask task(this, syncable::PREFERENCES); | 394 CreateRootTask task(this, syncable::PREFERENCES); |
397 ASSERT_TRUE(StartSyncService(&task, false)); | 395 ASSERT_TRUE(StartSyncService(&task, false)); |
398 ASSERT_TRUE(task.success()); | 396 ASSERT_TRUE(task.success()); |
399 | 397 |
400 scoped_ptr<Value> expected(Value::CreateStringValue(example_url0_)); | 398 scoped_ptr<Value> expected(Value::CreateStringValue(example_url0_)); |
401 int64 node_id = SetSyncedValue("unknown preference", *expected); | 399 int64 node_id = SetSyncedValue("unknown preference", *expected); |
402 ASSERT_NE(node_id, sync_api::kInvalidId); | 400 ASSERT_NE(node_id, sync_api::kInvalidId); |
403 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord); | 401 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord); |
404 record->action = SyncManager::ChangeRecord::ACTION_ADD; | 402 record->action = SyncManager::ChangeRecord::ACTION_ADD; |
405 record->id = node_id; | 403 record->id = node_id; |
406 { | 404 { |
407 sync_api::WriteTransaction trans(backend()->GetUserShareHandle()); | 405 sync_api::WriteTransaction trans(service_->GetUserShare()); |
408 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1); | 406 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1); |
409 } | 407 } |
410 | 408 |
411 // Nothing interesting happens on the client when it gets an update | 409 // Nothing interesting happens on the client when it gets an update |
412 // of an unknown preference. We just should not crash. | 410 // of an unknown preference. We just should not crash. |
413 } | 411 } |
414 | 412 |
415 TEST_F(ProfileSyncServicePreferenceTest, ManagedPreferences) { | 413 TEST_F(ProfileSyncServicePreferenceTest, ManagedPreferences) { |
416 // Make the homepage preference managed. | 414 // Make the homepage preference managed. |
417 scoped_ptr<Value> managed_value( | 415 scoped_ptr<Value> managed_value( |
(...skipping 12 matching lines...) Expand all Loading... |
430 | 428 |
431 // An incoming sync transaction shouldn't change the user value. | 429 // An incoming sync transaction shouldn't change the user value. |
432 scoped_ptr<Value> sync_value( | 430 scoped_ptr<Value> sync_value( |
433 Value::CreateStringValue("http://crbug.com")); | 431 Value::CreateStringValue("http://crbug.com")); |
434 int64 node_id = SetSyncedValue(prefs::kHomePage, *sync_value); | 432 int64 node_id = SetSyncedValue(prefs::kHomePage, *sync_value); |
435 ASSERT_NE(node_id, sync_api::kInvalidId); | 433 ASSERT_NE(node_id, sync_api::kInvalidId); |
436 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord); | 434 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord); |
437 record->action = SyncManager::ChangeRecord::ACTION_UPDATE; | 435 record->action = SyncManager::ChangeRecord::ACTION_UPDATE; |
438 record->id = node_id; | 436 record->id = node_id; |
439 { | 437 { |
440 sync_api::WriteTransaction trans(backend()->GetUserShareHandle()); | 438 sync_api::WriteTransaction trans(service_->GetUserShare()); |
441 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1); | 439 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1); |
442 } | 440 } |
443 EXPECT_TRUE(managed_value->Equals( | 441 EXPECT_TRUE(managed_value->Equals( |
444 prefs_->GetManagedPref(prefs::kHomePage))); | 442 prefs_->GetManagedPref(prefs::kHomePage))); |
445 EXPECT_TRUE(user_value->Equals( | 443 EXPECT_TRUE(user_value->Equals( |
446 prefs_->GetUserPref(prefs::kHomePage))); | 444 prefs_->GetUserPref(prefs::kHomePage))); |
447 } | 445 } |
448 | 446 |
449 TEST_F(ProfileSyncServicePreferenceTest, DynamicManagedPreferences) { | 447 TEST_F(ProfileSyncServicePreferenceTest, DynamicManagedPreferences) { |
450 CreateRootTask task(this, syncable::PREFERENCES); | 448 CreateRootTask task(this, syncable::PREFERENCES); |
(...skipping 18 matching lines...) Expand all Loading... |
469 | 467 |
470 // Change the sync value. | 468 // Change the sync value. |
471 scoped_ptr<Value> sync_value( | 469 scoped_ptr<Value> sync_value( |
472 Value::CreateStringValue("http://example.com/sync")); | 470 Value::CreateStringValue("http://example.com/sync")); |
473 int64 node_id = SetSyncedValue(prefs::kHomePage, *sync_value); | 471 int64 node_id = SetSyncedValue(prefs::kHomePage, *sync_value); |
474 ASSERT_NE(node_id, sync_api::kInvalidId); | 472 ASSERT_NE(node_id, sync_api::kInvalidId); |
475 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord); | 473 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord); |
476 record->action = SyncManager::ChangeRecord::ACTION_ADD; | 474 record->action = SyncManager::ChangeRecord::ACTION_ADD; |
477 record->id = node_id; | 475 record->id = node_id; |
478 { | 476 { |
479 sync_api::WriteTransaction trans(backend()->GetUserShareHandle()); | 477 sync_api::WriteTransaction trans(service_->GetUserShare()); |
480 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1); | 478 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1); |
481 } | 479 } |
482 | 480 |
483 // The pref value should still be the one dictated by policy. | 481 // The pref value should still be the one dictated by policy. |
484 EXPECT_TRUE(managed_value->Equals(&GetPreferenceValue(prefs::kHomePage))); | 482 EXPECT_TRUE(managed_value->Equals(&GetPreferenceValue(prefs::kHomePage))); |
485 | 483 |
486 // Switch kHomePage back to unmanaged. | 484 // Switch kHomePage back to unmanaged. |
487 profile_->GetTestingPrefService()->RemoveManagedPref(prefs::kHomePage); | 485 profile_->GetTestingPrefService()->RemoveManagedPref(prefs::kHomePage); |
488 | 486 |
489 // Sync value should be picked up. | 487 // Sync value should be picked up. |
490 EXPECT_TRUE(sync_value->Equals(&GetPreferenceValue(prefs::kHomePage))); | 488 EXPECT_TRUE(sync_value->Equals(&GetPreferenceValue(prefs::kHomePage))); |
491 } | 489 } |
OLD | NEW |