summaryrefslogtreecommitdiffstats
path: root/sync/api/attachments/attachment_service_proxy.h
diff options
context:
space:
mode:
Diffstat (limited to 'sync/api/attachments/attachment_service_proxy.h')
-rw-r--r--sync/api/attachments/attachment_service_proxy.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/sync/api/attachments/attachment_service_proxy.h b/sync/api/attachments/attachment_service_proxy.h
new file mode 100644
index 0000000..5bec1b3
--- /dev/null
+++ b/sync/api/attachments/attachment_service_proxy.h
@@ -0,0 +1,70 @@
+// 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 SYNC_API_ATTACHMENTS_ATTACHMENT_SERVICE_PROXY_H_
+#define SYNC_API_ATTACHMENTS_ATTACHMENT_SERVICE_PROXY_H_
+
+#include "base/basictypes.h"
+#include "base/callback.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/sequenced_task_runner.h"
+#include "base/task_runner.h"
+#include "sync/api/attachments/attachment.h"
+#include "sync/api/attachments/attachment_service.h"
+#include "sync/base/sync_export.h"
+
+namespace syncer {
+
+class SyncData;
+
+// AttachmentServiceProxy wraps an AttachmentService allowing multiple threads
+// to share the wrapped AttachmentService.
+//
+// Callbacks passed to methods on this class will be invoked in the same thread
+// from which the method was called.
+//
+// This class does not own its wrapped AttachmentService object. This class
+// 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).
+//
+// This class is thread-safe.
+class SYNC_EXPORT AttachmentServiceProxy : public AttachmentService {
+ public:
+ // Default copy and assignment are welcome.
+
+ // Construct an invalid AttachmentServiceProxy.
+ AttachmentServiceProxy();
+
+ // Construct an AttachmentServiceProxy that forwards calls to |wrapped| on the
+ // |wrapped_task_runner| thread.
+ AttachmentServiceProxy(
+ const scoped_refptr<base::SequencedTaskRunner>& wrapped_task_runner,
+ base::WeakPtr<syncer::AttachmentService> wrapped);
+
+ virtual ~AttachmentServiceProxy();
+
+ // 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;
+
+ private:
+ scoped_refptr<base::SequencedTaskRunner> wrapped_task_runner_;
+ // wrapped_ must only be dereferenced on the wrapped_task_runner_ thread.
+ base::WeakPtr<AttachmentService> wrapped_;
+};
+
+} // namespace syncer
+
+#endif // SYNC_API_ATTACHMENTS_ATTACHMENT_SERVICE_PROXY_H_