1 // Copyright 2014 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.
5 #ifndef COMPONENTS_SYNC_DRIVER_SYNC_API_COMPONENT_FACTORY_H_
6 #define COMPONENTS_SYNC_DRIVER_SYNC_API_COMPONENT_FACTORY_H_
8 #include "base/memory/scoped_ptr.h"
9 #include "base/memory/weak_ptr.h"
10 #include "sync/api/syncable_service.h"
11 #include "sync/internal_api/public/attachments/attachment_service.h"
12 #include "sync/internal_api/public/base/model_type.h"
14 namespace sync_driver
{
16 // This factory provides sync driver code with the model type specific sync/api
17 // service (like SyncableService) implementations.
18 class SyncApiComponentFactory
{
20 virtual ~SyncApiComponentFactory() {}
22 // Returns a weak pointer to the syncable service specified by |type|.
23 // Weak pointer may be unset if service is already destroyed.
24 // Note: Should only be called from the model type thread.
25 virtual base::WeakPtr
<syncer::SyncableService
> GetSyncableServiceForType(
26 syncer::ModelType type
) = 0;
28 // Creates attachment service.
29 // Note: Should only be called from the model type thread.
30 // |delegate| is optional delegate for AttachmentService to notify about
31 // asynchronous events (AttachmentUploaded). Pass NULL if delegate is not
32 // provided. AttachmentService doesn't take ownership of delegate, the pointer
33 // must be valid throughout AttachmentService lifetime.
34 virtual scoped_ptr
<syncer::AttachmentService
> CreateAttachmentService(
35 const syncer::UserShare
& user_share
,
36 syncer::AttachmentService::Delegate
* delegate
) = 0;
39 } // namespace sync_driver
41 #endif // COMPONENTS_SYNC_DRIVER_SYNC_API_COMPONENT_FACTORY_H_