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 16namespace { 17 18void 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 41void 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 50namespace sync_start_util { 51 52syncer::SyncableService::StartSyncFlare GetFlareForSyncableService( 53 const base::FilePath& profile_path) { 54 return base::Bind(&StartSyncProxy, profile_path); 55} 56 57} // namespace sync_start_util 58