12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_file_system_service_factory.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <set> 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/sync_file_system/local/local_file_sync_service.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_file_system_service.h" 132385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "chrome/browser/sync_file_system/syncable_file_system_util.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/browser/extension_registry_factory.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace sync_file_system { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SyncFileSystemService* SyncFileSystemServiceFactory::GetForProfile( 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile) { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return static_cast<SyncFileSystemService*>( 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetInstance()->GetServiceForBrowserContext(profile, true)); 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SyncFileSystemServiceFactory* SyncFileSystemServiceFactory::GetInstance() { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return Singleton<SyncFileSystemServiceFactory>::get(); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void SyncFileSystemServiceFactory::set_mock_local_file_service( 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_ptr<LocalFileSyncService> mock_local_service) { 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mock_local_file_service_ = mock_local_service.Pass(); 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SyncFileSystemServiceFactory::set_mock_remote_file_service( 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<RemoteFileSyncService> mock_remote_service) { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mock_remote_file_service_ = mock_remote_service.Pass(); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SyncFileSystemServiceFactory::SyncFileSystemServiceFactory() 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : BrowserContextKeyedServiceFactory( 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "SyncFileSystemService", 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserContextDependencyManager::GetInstance()) { 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) typedef std::set<BrowserContextKeyedServiceFactory*> FactorySet; 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FactorySet factories; 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch factories.insert(extensions::ExtensionRegistryFactory::GetInstance()); 4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) RemoteFileSyncService::AppendDependsOnFactories(&factories); 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) for (FactorySet::iterator iter = factories.begin(); 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) iter != factories.end(); 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ++iter) { 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DependsOn(*iter); 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SyncFileSystemServiceFactory::~SyncFileSystemServiceFactory() {} 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)KeyedService* SyncFileSystemServiceFactory::BuildServiceInstanceFor( 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) const { 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(context); 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SyncFileSystemService* service = new SyncFileSystemService(profile); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_ptr<LocalFileSyncService> local_file_service; 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (mock_local_file_service_) 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) local_file_service = mock_local_file_service_.Pass(); 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) else 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) local_file_service = LocalFileSyncService::Create(profile); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<RemoteFileSyncService> remote_file_service; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (mock_remote_file_service_) { 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) remote_file_service = mock_remote_file_service_.Pass(); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) remote_file_service = RemoteFileSyncService::CreateForBrowserContext( 7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) context, service->task_logger()); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) service->Initialize(local_file_service.Pass(), 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) remote_file_service.Pass()); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return service; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace sync_file_system 84