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..6fe0b6e82f2f4da9d6cf875118bc08f61ba2baeb 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 invoke 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,9 +43,12 @@ 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); |
+ const base::WeakPtr<syncer::AttachmentService>& wrapped); |
virtual ~AttachmentServiceProxy(); |
@@ -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 |
tim (not reviewing)
2014/04/10 18:21:41
nit - I'd rather just call this Core.
Also, I thi
maniscalco
2014/04/10 20:00:44
Rename ForwardingCore to Core: Done.
Opening comm
|
+ : 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); |
+ }; |
+ |
tim (not reviewing)
2014/04/10 18:21:41
comment this is for tests.
maniscalco
2014/04/10 20:00:44
Done.
|
+ 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 |