1// Copyright (c) 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_file_system/sync_file_system_service_factory.h" 6 7#include "base/command_line.h" 8#include "chrome/browser/drive/drive_notification_manager_factory.h" 9#include "chrome/browser/profiles/profile.h" 10#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 11#include "chrome/browser/sync/profile_sync_service.h" 12#include "chrome/browser/sync_file_system/drive_backend/drive_file_sync_service.h" 13#include "chrome/browser/sync_file_system/sync_file_system_service.h" 14#include "chrome/browser/sync_file_system/syncable_file_system_util.h" 15#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" 16 17namespace sync_file_system { 18 19namespace { 20const char kDisableLastWriteWin[] = "disable-syncfs-last-write-win"; 21} 22 23// static 24SyncFileSystemService* SyncFileSystemServiceFactory::GetForProfile( 25 Profile* profile) { 26 return static_cast<SyncFileSystemService*>( 27 GetInstance()->GetServiceForBrowserContext(profile, true)); 28} 29 30// static 31SyncFileSystemServiceFactory* SyncFileSystemServiceFactory::GetInstance() { 32 return Singleton<SyncFileSystemServiceFactory>::get(); 33} 34 35void SyncFileSystemServiceFactory::set_mock_remote_file_service( 36 scoped_ptr<RemoteFileSyncService> mock_remote_service) { 37 mock_remote_file_service_ = mock_remote_service.Pass(); 38} 39 40SyncFileSystemServiceFactory::SyncFileSystemServiceFactory() 41 : BrowserContextKeyedServiceFactory( 42 "SyncFileSystemService", 43 BrowserContextDependencyManager::GetInstance()) { 44 DependsOn(drive::DriveNotificationManagerFactory::GetInstance()); 45 DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance()); 46} 47 48SyncFileSystemServiceFactory::~SyncFileSystemServiceFactory() {} 49 50BrowserContextKeyedService* 51SyncFileSystemServiceFactory::BuildServiceInstanceFor( 52 content::BrowserContext* context) const { 53 Profile* profile = static_cast<Profile*>(context); 54 55 SyncFileSystemService* service = new SyncFileSystemService(profile); 56 57 scoped_ptr<LocalFileSyncService> local_file_service( 58 new LocalFileSyncService(profile)); 59 60 scoped_ptr<RemoteFileSyncService> remote_file_service; 61 if (mock_remote_file_service_) { 62 remote_file_service = mock_remote_file_service_.Pass(); 63 } else { 64 // FileSystem needs to be registered before DriveFileSyncService runs 65 // its initialization code. 66 RegisterSyncableFileSystem(); 67 remote_file_service = 68 DriveFileSyncService::Create(profile).PassAs<RemoteFileSyncService>(); 69 } 70 71 if (CommandLine::ForCurrentProcess()->HasSwitch(kDisableLastWriteWin)) { 72 remote_file_service->SetConflictResolutionPolicy( 73 CONFLICT_RESOLUTION_POLICY_MANUAL); 74 } 75 76 service->Initialize(local_file_service.Pass(), 77 remote_file_service.Pass()); 78 return service; 79} 80 81} // namespace sync_file_system 82