| Index: sync/api/attachments/attachment_service_proxy.h
|
| diff --git a/sync/api/attachments/attachment_service_proxy.h b/sync/api/attachments/attachment_service_proxy.h
|
| index 5bec1b3206ab8007e3937d5df00c364a6473b83b..471d848949c77e32fc52378b5a4e0489c0b6cb07 100644
|
| --- a/sync/api/attachments/attachment_service_proxy.h
|
| +++ b/sync/api/attachments/attachment_service_proxy.h
|
| @@ -20,7 +20,8 @@ namespace syncer {
|
| class SyncData;
|
|
|
| // AttachmentServiceProxy wraps an AttachmentService allowing multiple threads
|
| -// to share the wrapped AttachmentService.
|
| +// to share the wrapped AttachmentService and invoked its methods in the
|
| +// appropriate thread.
|
| //
|
| // Callbacks passed to methods on this class will be invoked in the same thread
|
| // from which the method was called.
|
| @@ -29,8 +30,8 @@ class SyncData;
|
| // holds a WeakPtr to the wrapped object. Once the the wrapped object is
|
| // destroyed, method calls on this object will be no-ops.
|
| //
|
| -// Users of this class should take care to destroy the wrapped object on the
|
| -// correct thread (wrapped_task_runner).
|
| +// Users of this class should take care to destroy the wrapped object on the
|
| +// correct thread (wrapped_task_runner).
|
| //
|
| // This class is thread-safe.
|
| class SYNC_EXPORT AttachmentServiceProxy : public AttachmentService {
|
| @@ -42,6 +43,9 @@ class SYNC_EXPORT AttachmentServiceProxy : public AttachmentService {
|
|
|
| // Construct an AttachmentServiceProxy that forwards calls to |wrapped| on the
|
| // |wrapped_task_runner| thread.
|
| + //
|
| + // Note, this object does not own |wrapped|. When |wrapped| is destroyed,
|
| + // calls to this object become no-ops.
|
| AttachmentServiceProxy(
|
| const scoped_refptr<base::SequencedTaskRunner>& wrapped_task_runner,
|
| base::WeakPtr<syncer::AttachmentService> wrapped);
|
| @@ -59,10 +63,52 @@ class SYNC_EXPORT AttachmentServiceProxy : public AttachmentService {
|
| virtual void OnSyncDataUpdate(const AttachmentIdList& old_attachment_ids,
|
| const SyncData& updated_sync_data) OVERRIDE;
|
|
|
| + protected:
|
| + // A ref-counted AttachmentService that forwards to a wrapped
|
| + // AttachmentService.
|
| + //
|
| + // This class is ref-counted because we want to allow AttachmentServiceProxy
|
| + // to be copy-constructable while allowing for different implementations of
|
| + // ForwardingCore (e.g. one type of core might own the wrapped
|
| + // AttachmentService).
|
| + //
|
| + // Calls to objects of this class become no-ops once its wrapped object is
|
| + // destroyed.
|
| + class SYNC_EXPORT ForwardingCore
|
| + : public AttachmentService,
|
| + public base::RefCountedThreadSafe<ForwardingCore> {
|
| + public:
|
| + // Construct an AttachmentServiceProxyCore that forwards calls to |wrapped|.
|
| + ForwardingCore(const base::WeakPtr<syncer::AttachmentService>& wrapped);
|
| +
|
| + // AttachmentService implementation.
|
| + virtual void GetOrDownloadAttachments(
|
| + const AttachmentIdList& attachment_ids,
|
| + const GetOrDownloadCallback& callback) OVERRIDE;
|
| + virtual void DropAttachments(const AttachmentIdList& attachment_ids,
|
| + const DropCallback& callback) OVERRIDE;
|
| + virtual void OnSyncDataAdd(const SyncData& sync_data) OVERRIDE;
|
| + virtual void OnSyncDataDelete(const SyncData& sync_data) OVERRIDE;
|
| + virtual void OnSyncDataUpdate(const AttachmentIdList& old_attachment_ids,
|
| + const SyncData& updated_sync_data) OVERRIDE;
|
| +
|
| + protected:
|
| + friend class base::RefCountedThreadSafe<ForwardingCore>;
|
| + virtual ~ForwardingCore();
|
| +
|
| + private:
|
| + base::WeakPtr<AttachmentService> wrapped_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ForwardingCore);
|
| + };
|
| +
|
| + AttachmentServiceProxy(
|
| + const scoped_refptr<base::SequencedTaskRunner>& wrapped_task_runner,
|
| + const scoped_refptr<ForwardingCore>& core);
|
| +
|
| private:
|
| scoped_refptr<base::SequencedTaskRunner> wrapped_task_runner_;
|
| - // wrapped_ must only be dereferenced on the wrapped_task_runner_ thread.
|
| - base::WeakPtr<AttachmentService> wrapped_;
|
| + scoped_refptr<ForwardingCore> core_;
|
| };
|
|
|
| } // namespace syncer
|
|
|