1 // Copyright 2013 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/glue/sync_start_util.h" 6 7 #include "base/bind.h" 8 #include "base/files/file_path.h" 9 #include "chrome/browser/browser_process.h" 10 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile_manager.h" 12 #include "chrome/browser/sync/profile_sync_service.h" 13 #include "chrome/browser/sync/profile_sync_service_factory.h" 14 #include "content/public/browser/browser_thread.h" 15 16 namespace { 17 18 void StartSyncOnUIThread(const base::FilePath& profile, 19 syncer::ModelType type) { 20 ProfileManager* profile_manager = g_browser_process->profile_manager(); 21 if (!profile_manager) { 22 // Can happen in tests. 23 DVLOG(2) << "No ProfileManager, can't start sync."; 24 return; 25 } 26 27 Profile* p = profile_manager->GetProfileByPath(profile); 28 if (!p) { 29 DVLOG(2) << "Profile not found, can't start sync."; 30 return; 31 } 32 33 ProfileSyncService* service = ProfileSyncServiceFactory::GetForProfile(p); 34 if (!service) { 35 DVLOG(2) << "No ProfileSyncService for profile, can't start sync."; 36 return; 37 } 38 service->OnDataTypeRequestsSyncStartup(type); 39 } 40 41 void StartSyncProxy(const base::FilePath& profile, 42 syncer::ModelType type) { 43 content::BrowserThread::PostTask( 44 content::BrowserThread::UI, FROM_HERE, 45 base::Bind(&StartSyncOnUIThread, profile, type)); 46 } 47 48 } // namespace 49 50 namespace sync_start_util { 51 52 syncer::SyncableService::StartSyncFlare GetFlareForSyncableService( 53 const base::FilePath& profile_path) { 54 return base::Bind(&StartSyncProxy, profile_path); 55 } 56 57 } // namespace sync_start_util 58