15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_SYNC_PROFILE_SYNC_COMPONENTS_FACTORY_IMPL_H__ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_SYNC_PROFILE_SYNC_COMPONENTS_FACTORY_IMPL_H__ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/memory/weak_ptr.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_components_factory.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_webdata_service.h" 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "google_apis/gaia/oauth2_token_service.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class Profile; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace base { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CommandLine; 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionSystem; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProfileSyncComponentsFactoryImpl : public ProfileSyncComponentsFactory { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Constructs a ProfileSyncComponentsFactoryImpl. 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // |sync_service_url| is the base URL of the sync server. 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // |token_service| must outlive the ProfileSyncComponentsFactoryImpl. 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // |url_request_context_getter| must outlive the 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // ProfileSyncComponentsFactoryImpl. 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ProfileSyncComponentsFactoryImpl( 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Profile* profile, 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::CommandLine* command_line, 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const GURL& sync_service_url, 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) OAuth2TokenService* token_service, 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::URLRequestContextGetter* url_request_context_getter); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ProfileSyncComponentsFactoryImpl(); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RegisterDataTypes(ProfileSyncService* pss) OVERRIDE; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual sync_driver::DataTypeManager* CreateDataTypeManager( 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) debug_info_listener, 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const sync_driver::DataTypeController::TypeMap* controllers, 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const sync_driver::DataTypeEncryptionHandler* encryption_handler, 52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) browser_sync::SyncBackendHost* backend, 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sync_driver::DataTypeManagerObserver* observer) 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) OVERRIDE; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual browser_sync::SyncBackendHost* CreateSyncBackendHost( 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& name, 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Profile* profile, 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) invalidation::InvalidationService* invalidator, 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::WeakPtr<sync_driver::SyncPrefs>& sync_prefs, 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::FilePath& sync_folder) OVERRIDE; 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual scoped_ptr<sync_driver::LocalDeviceInfoProvider> 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CreateLocalDeviceInfoProvider() OVERRIDE; 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual base::WeakPtr<syncer::SyncableService> GetSyncableServiceForType( 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::ModelType type) OVERRIDE; 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual scoped_ptr<syncer::AttachmentService> CreateAttachmentService( 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_refptr<syncer::AttachmentStore>& attachment_store, 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const syncer::UserShare& user_share, 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) syncer::AttachmentService::Delegate* delegate) OVERRIDE; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Legacy datatypes that need to be converted to the SyncableService API. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual SyncComponents CreateBookmarkSyncComponents( 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileSyncService* profile_sync_service, 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sync_driver::DataTypeErrorHandler* error_handler) OVERRIDE; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual SyncComponents CreateTypedUrlSyncComponents( 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileSyncService* profile_sync_service, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history::HistoryBackend* history_backend, 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sync_driver::DataTypeErrorHandler* error_handler) OVERRIDE; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Register data types which are enabled on desktop platforms only. 84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // |disabled_types| and |enabled_types| correspond only to those types 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // being explicitly enabled/disabled by the command line. 8623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) void RegisterDesktopDataTypes(syncer::ModelTypeSet disabled_types, 87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) syncer::ModelTypeSet enabled_types, 8823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ProfileSyncService* pss); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Register data types which are enabled on both desktop and mobile. 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // |disabled_types| and |enabled_types| correspond only to those types 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // being explicitly enabled/disabled by the command line. 9223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) void RegisterCommonDataTypes(syncer::ModelTypeSet disabled_types, 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) syncer::ModelTypeSet enabled_types, 9423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ProfileSyncService* pss); 95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Used to bind a callback to give to DataTypeControllers to disable 96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // data types. 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sync_driver::DataTypeController::DisableTypeCallback 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) MakeDisableCallbackFor(syncer::ModelType type); 99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void DisableBrokenType(syncer::ModelType type, 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const tracked_objects::Location& from_here, 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& message); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_; 104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::CommandLine* command_line_; 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<autofill::AutofillWebDataService> web_data_service_; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const GURL sync_service_url_; 108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) OAuth2TokenService* const token_service_; 109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::URLRequestContextGetter* const url_request_context_getter_; 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 111f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::WeakPtrFactory<ProfileSyncComponentsFactoryImpl> weak_factory_; 112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ProfileSyncComponentsFactoryImpl); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_SYNC_PROFILE_SYNC_COMPONENTS_FACTORY_IMPL_H__ 117