1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/sync/abstract_profile_sync_service_test.h" 6 7 #include "chrome/browser/sync/engine/syncapi.h" 8 #include "chrome/browser/sync/glue/autofill_model_associator.h" 9 #include "chrome/browser/sync/glue/autofill_profile_model_associator.h" 10 #include "chrome/browser/sync/glue/password_model_associator.h" 11 #include "chrome/browser/sync/glue/preference_model_associator.h" 12 #include "chrome/browser/sync/glue/session_model_associator.h" 13 #include "chrome/browser/sync/glue/typed_url_model_associator.h" 14 #include "chrome/browser/sync/protocol/sync.pb.h" 15 #include "chrome/browser/sync/syncable/directory_manager.h" 16 #include "chrome/browser/sync/syncable/syncable.h" 17 #include "chrome/browser/sync/test_profile_sync_service.h" 18 #include "chrome/browser/sync/util/cryptographer.h" 19 #include "chrome/test/profile_mock.h" 20 #include "chrome/test/sync/engine/test_id_factory.h" 21 22 using browser_sync::TestIdFactory; 23 using sync_api::UserShare; 24 using syncable::BASE_VERSION; 25 using syncable::CREATE; 26 using syncable::DirectoryManager; 27 using syncable::IS_DEL; 28 using syncable::IS_DIR; 29 using syncable::IS_UNAPPLIED_UPDATE; 30 using syncable::IS_UNSYNCED; 31 using syncable::ModelType; 32 using syncable::MutableEntry; 33 using syncable::SERVER_IS_DIR; 34 using syncable::SERVER_VERSION; 35 using syncable::SPECIFICS; 36 using syncable::ScopedDirLookup; 37 using syncable::UNIQUE_SERVER_TAG; 38 using syncable::UNITTEST; 39 using syncable::WriteTransaction; 40 41 const std::string ProfileSyncServiceTestHelper::GetTagForType( 42 ModelType model_type) { 43 switch (model_type) { 44 case syncable::AUTOFILL: 45 return browser_sync::kAutofillTag; 46 case syncable::AUTOFILL_PROFILE: 47 return browser_sync::kAutofillProfileTag; 48 case syncable::PREFERENCES: 49 return browser_sync::kPreferencesTag; 50 case syncable::PASSWORDS: 51 return browser_sync::kPasswordTag; 52 case syncable::NIGORI: 53 return browser_sync::kNigoriTag; 54 case syncable::TYPED_URLS: 55 return browser_sync::kTypedUrlTag; 56 case syncable::SESSIONS: 57 return browser_sync::kSessionsTag; 58 case syncable::BOOKMARKS: 59 return "google_chrome_bookmarks"; 60 default: 61 NOTREACHED(); 62 } 63 return std::string(); 64 } 65 66 bool ProfileSyncServiceTestHelper::CreateRoot( 67 ModelType model_type, UserShare* user_share, 68 TestIdFactory* ids) { 69 DirectoryManager* dir_manager = user_share->dir_manager.get(); 70 71 ScopedDirLookup dir(dir_manager, user_share->name); 72 if (!dir.good()) 73 return false; 74 75 std::string tag_name = GetTagForType(model_type); 76 77 WriteTransaction wtrans(dir, UNITTEST, __FILE__, __LINE__); 78 MutableEntry node(&wtrans, 79 CREATE, 80 wtrans.root_id(), 81 tag_name); 82 node.Put(UNIQUE_SERVER_TAG, tag_name); 83 node.Put(IS_DIR, true); 84 node.Put(SERVER_IS_DIR, false); 85 node.Put(IS_UNSYNCED, false); 86 node.Put(IS_UNAPPLIED_UPDATE, false); 87 node.Put(SERVER_VERSION, 20); 88 node.Put(BASE_VERSION, 20); 89 node.Put(IS_DEL, false); 90 node.Put(syncable::ID, ids->MakeServer(tag_name)); 91 sync_pb::EntitySpecifics specifics; 92 syncable::AddDefaultExtensionValue(model_type, &specifics); 93 node.Put(SPECIFICS, specifics); 94 95 return true; 96 } 97 98 AbstractProfileSyncServiceTest::AbstractProfileSyncServiceTest() 99 : ui_thread_(BrowserThread::UI, &message_loop_) {} 100 101 AbstractProfileSyncServiceTest::~AbstractProfileSyncServiceTest() {} 102 103 bool AbstractProfileSyncServiceTest::CreateRoot(ModelType model_type) { 104 return ProfileSyncServiceTestHelper::CreateRoot( 105 model_type, 106 service_->GetUserShare(), 107 service_->id_factory()); 108 } 109 110 CreateRootTask::CreateRootTask( 111 AbstractProfileSyncServiceTest* test, ModelType model_type) 112 : test_(test), model_type_(model_type), success_(false) { 113 } 114 115 CreateRootTask::~CreateRootTask() {} 116 void CreateRootTask::Run() { 117 success_ = test_->CreateRoot(model_type_); 118 } 119 120 bool CreateRootTask::success() { 121 return success_; 122 } 123