// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_SYNC_DRIVER_SYNC_API_COMPONENT_FACTORY_H_ #define COMPONENTS_SYNC_DRIVER_SYNC_API_COMPONENT_FACTORY_H_ #include "base/memory/scoped_ptr.h" #include "base/memory/weak_ptr.h" #include "sync/api/syncable_service.h" #include "sync/internal_api/public/attachments/attachment_service.h" #include "sync/internal_api/public/base/model_type.h" namespace syncer { struct UserShare; } // namespace syncer namespace sync_driver { // This factory provides sync driver code with the model type specific sync/api // service (like SyncableService) implementations. class SyncApiComponentFactory { public: virtual ~SyncApiComponentFactory() {} // Returns a weak pointer to the syncable service specified by |type|. // Weak pointer may be unset if service is already destroyed. // Note: Should only be called from the model type thread. virtual base::WeakPtr GetSyncableServiceForType( syncer::ModelType type) = 0; // Creates attachment service. // Note: Should only be called from the model type thread. // // |store_birthday| is the store birthday. Must not be empty. // // |model_type| is the model type this AttachmentService will be used with. // // |delegate| is optional delegate for AttachmentService to notify about // asynchronous events (AttachmentUploaded). Pass NULL if delegate is not // provided. AttachmentService doesn't take ownership of delegate, the pointer // must be valid throughout AttachmentService lifetime. virtual scoped_ptr CreateAttachmentService( scoped_ptr attachment_store, const syncer::UserShare& user_share, const std::string& store_birthday, syncer::ModelType model_type, syncer::AttachmentService::Delegate* delegate) = 0; }; } // namespace sync_driver #endif // COMPONENTS_SYNC_DRIVER_SYNC_API_COMPONENT_FACTORY_H_