Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(719)

Unified Diff: sync/api/sync_data.h

Issue 187303006: Update sync API to support attachments. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@attachmentapi
Patch Set: Remove AttachmentServiceBase for reals. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sync/api/sync_data.h
diff --git a/sync/api/sync_data.h b/sync/api/sync_data.h
index 43f64f9185b10f798abe3086aec60fd85310d11e..34cdf1c4d69423ec57a302ab149d2ea57867de1e 100644
--- a/sync/api/sync_data.h
+++ b/sync/api/sync_data.h
@@ -10,10 +10,15 @@
#include <vector>
#include "base/basictypes.h"
+#include "base/callback.h"
+#include "base/stl_util.h"
#include "base/time/time.h"
+#include "sync/api/attachments/attachment.h"
+#include "sync/api/attachments/attachment_service_proxy.h"
#include "sync/base/sync_export.h"
#include "sync/internal_api/public/base/model_type.h"
#include "sync/internal_api/public/util/immutable.h"
+#include "sync/internal_api/public/util/weak_handle.h"
namespace sync_pb {
class EntitySpecifics;
@@ -22,15 +27,17 @@ class SyncEntity;
namespace syncer {
+class AttachmentService;
+
// A light-weight container for immutable sync data. Pass-by-value and storage
// in STL containers are supported and encouraged if helpful.
class SYNC_EXPORT SyncData {
public:
// Creates an empty and invalid SyncData.
SyncData();
- ~SyncData();
+ ~SyncData();
- // Default copy and assign welcome.
+ // Default copy and assign welcome.
// Helper methods for creating SyncData objects for local data.
// The sync tag must be a string unique to this datatype and is used as a node
@@ -48,12 +55,25 @@ class SYNC_EXPORT SyncData {
const std::string& sync_tag,
const std::string& non_unique_title,
const sync_pb::EntitySpecifics& specifics);
+ static SyncData CreateLocalDataWithAttachments(
+ const std::string& sync_tag,
+ const std::string& non_unique_title,
+ const sync_pb::EntitySpecifics& specifics,
+ const AttachmentList& attachments);
// Helper method for creating SyncData objects originating from the syncer.
+ //
+ // TODO(maniscalco): Replace all calls to 3-arg CreateRemoteData with calls to
+ // the 5-arg version (bug 353296).
static SyncData CreateRemoteData(
int64 id,
const sync_pb::EntitySpecifics& specifics,
- const base::Time& last_modified_time);
+ const base::Time& last_modified_time,
+ const AttachmentIdList& attachment_ids,
+ const syncer::AttachmentServiceProxy& attachment_service);
+ static SyncData CreateRemoteData(int64 id,
+ const sync_pb::EntitySpecifics& specifics,
+ const base::Time& last_modified_time);
// Whether this SyncData holds valid data. The only way to have a SyncData
// without valid data is to use the default constructor.
@@ -87,6 +107,42 @@ class SYNC_EXPORT SyncData {
std::string ToString() const;
+ // Return a list of this SyncData's attachment ids.
+ //
+ // The attachments may or may not be present on this host.
tim (not reviewing) 2014/03/27 18:35:46 s/host/device to be more consistent with the termi
maniscalco 2014/03/27 21:17:31 Done.
+ AttachmentIdList GetAttachmentIds() const;
+
+ // Return a list of this SyncData's attachments.
tim (not reviewing) 2014/03/27 18:35:46 This is only ever the list of attachments intended
tim (not reviewing) 2014/03/27 19:16:44 Alternatively, there's the subclass + factory meth
maniscalco 2014/03/27 21:17:31 SGTM. Renamed to GetLocalAttachmentsForUpload. B
+ //
+ // May only be called when IsLocal() is true.
+ const AttachmentList& GetAttachments() const;
+
+ // Retrieve the attachments indentified by |attachment_ids|. Invoke |callback|
+ // with the requested attachments.
+ //
+ // May only be called when IsLocal() is false.
+ //
+ // |callback| will be invoked when the operation is complete (successfully or
+ // otherwise).
+ //
+ // Retrieving the requested attachments may require reading local storage or
+ // requesting the attachments from the network.
+ //
+ void GetOrDownloadAttachments(
+ const AttachmentIdList& attachment_ids,
+ const AttachmentService::GetOrDownloadCallback& callback);
+
+ // Drop (delete from local storage) the attachments associated with this
+ // SyncData specified in |attachment_ids|. This method will not delete
+ // attachments from the server.
+ //
+ // May only be called when IsLocal() is false.
+ //
+ // |callback| will be invoked when the operation is complete (successfully or
+ // otherwise).
+ void DropAttachments(const AttachmentIdList& attachment_ids,
+ const AttachmentService::DropCallback& callback);
+
// TODO(zea): Query methods for other sync properties: parent, successor, etc.
private:
@@ -109,10 +165,13 @@ class SYNC_EXPORT SyncData {
typedef Immutable<sync_pb::SyncEntity, ImmutableSyncEntityTraits>
ImmutableSyncEntity;
- // Clears |entity|.
- SyncData(int64 id,
- sync_pb::SyncEntity* entity,
- const base::Time& remote_modification_time);
+ // Clears |entity| and |attachments|.
+ SyncData(
+ int64 id,
+ sync_pb::SyncEntity* entity,
+ AttachmentList* attachments,
+ const base::Time& remote_modification_time,
+ const syncer::AttachmentServiceProxy& attachment_service);
// Whether this SyncData holds valid data.
bool is_valid_;
@@ -126,6 +185,10 @@ class SYNC_EXPORT SyncData {
// The actual shared sync entity being held.
ImmutableSyncEntity immutable_entity_;
+
+ Immutable<AttachmentList> attachments_;
+
+ AttachmentServiceProxy attachment_service_;
};
// gmock printer helper.

Powered by Google App Engine
This is Rietveld 408576698