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

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: Pull in upstream changes. 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..66a2c1e6ca09e439b11a2922d3dc9a4eb6aa05c5 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.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,26 @@ 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 4-arg version.
tim (not reviewing) 2014/03/10 22:55:58 For stuff like this, a recommended chromium conven
maniscalco 2014/03/18 20:49:18 Thanks for the reminder. Done.
+ //
tim (not reviewing) 2014/03/10 22:55:58 Remove the trailing // line.
maniscalco 2014/03/18 20:49:18 Done.
static SyncData CreateRemoteData(
int64 id,
const sync_pb::EntitySpecifics& specifics,
- const base::Time& last_modified_time);
+ const base::Time& last_modified_time,
+ const WeakHandle<syncer::AttachmentService>& attachment_service,
+ const AttachmentIdList& attachment_ids);
+ 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 +108,36 @@ 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.
+ AttachmentIdList GetAttachmentIds() 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 GetAttachments(const AttachmentIdList& attachment_ids,
tim (not reviewing) 2014/03/10 22:55:58 As in the other file, I'm wondering if we should e
maniscalco 2014/03/18 20:49:18 Good point. I agree. I would like the verb to mo
tim (not reviewing) 2014/03/19 22:32:48 How about 'Get' as you say and 'GetOrDownload', th
maniscalco 2014/03/25 21:40:30 Done.
+ const AttachmentService::GetCallback& callback);
+
+ // Drop (delete locally) 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,
tim (not reviewing) 2014/03/10 22:55:58 We talked about this but pointing out for posterit
maniscalco 2014/03/18 20:49:18 Agreed.
+ const AttachmentService::DropCallback& callback);
+
// TODO(zea): Query methods for other sync properties: parent, successor, etc.
private:
@@ -112,7 +163,8 @@ class SYNC_EXPORT SyncData {
// Clears |entity|.
SyncData(int64 id,
sync_pb::SyncEntity* entity,
- const base::Time& remote_modification_time);
+ const base::Time& remote_modification_time,
+ const WeakHandle<syncer::AttachmentService>& attachment_service);
// Whether this SyncData holds valid data.
bool is_valid_;
@@ -126,6 +178,8 @@ class SYNC_EXPORT SyncData {
// The actual shared sync entity being held.
ImmutableSyncEntity immutable_entity_;
+
+ WeakHandle<AttachmentService> attachment_service_;
};
// gmock printer helper.

Powered by Google App Engine
This is Rietveld 408576698