| Index: components/sync_driver/generic_change_processor.cc
|
| diff --git a/components/sync_driver/generic_change_processor.cc b/components/sync_driver/generic_change_processor.cc
|
| index 49889a69c1b2234b94d27826d40e9fa9cbc76ca3..adc4c90ed42d96897330b9168588cea05beb58b3 100644
|
| --- a/components/sync_driver/generic_change_processor.cc
|
| +++ b/components/sync_driver/generic_change_processor.cc
|
| @@ -34,27 +34,6 @@
|
| } else {
|
| write_node->SetEntitySpecifics(entity_specifics);
|
| }
|
| -}
|
| -
|
| -// Helper function to convert AttachmentId to AttachmentMetadataRecord.
|
| -sync_pb::AttachmentMetadataRecord AttachmentIdToRecord(
|
| - const syncer::AttachmentId& attachment_id) {
|
| - sync_pb::AttachmentMetadataRecord record;
|
| - *record.mutable_id() = attachment_id.GetProto();
|
| - return record;
|
| -}
|
| -
|
| -// Replace |write_nodes|'s attachment ids with |attachment_ids|.
|
| -void SetAttachmentMetadata(const syncer::AttachmentIdList& attachment_ids,
|
| - syncer::WriteNode* write_node) {
|
| - DCHECK(write_node);
|
| - sync_pb::AttachmentMetadata attachment_metadata;
|
| - std::transform(
|
| - attachment_ids.begin(),
|
| - attachment_ids.end(),
|
| - RepeatedFieldBackInserter(attachment_metadata.mutable_record()),
|
| - AttachmentIdToRecord);
|
| - write_node->SetAttachmentMetadata(attachment_metadata);
|
| }
|
|
|
| syncer::SyncData BuildRemoteSyncData(
|
| @@ -340,11 +319,12 @@
|
| }
|
| }
|
|
|
| -syncer::SyncError AttemptDelete(const syncer::SyncChange& change,
|
| - syncer::ModelType type,
|
| - const std::string& type_str,
|
| - syncer::WriteNode* node,
|
| - DataTypeErrorHandler* error_handler) {
|
| +syncer::SyncError AttemptDelete(
|
| + const syncer::SyncChange& change,
|
| + syncer::ModelType type,
|
| + const std::string& type_str,
|
| + syncer::WriteNode* node,
|
| + DataTypeErrorHandler* error_handler) {
|
| DCHECK_EQ(change.change_type(), syncer::SyncChange::ACTION_DELETE);
|
| if (change.sync_data().IsLocal()) {
|
| const std::string& tag = syncer::SyncDataLocal(change.sync_data()).GetTag();
|
| @@ -388,36 +368,12 @@
|
| return syncer::SyncError();
|
| }
|
|
|
| -// A callback invoked on completion of AttachmentService::StoreAttachment.
|
| -void IgnoreStoreResult(const syncer::AttachmentService::StoreResult&) {
|
| - // TODO(maniscalco): Here is where we're going to update the in-directory
|
| - // entry to indicate that the attachments have been successfully stored on
|
| - // disk. Why do we care? Because we might crash after persisting the
|
| - // directory to disk, but before we have persisted its attachments, leaving us
|
| - // with danging attachment ids. Having a flag that indicates we've stored the
|
| - // entry will allow us to detect and filter entries with dangling attachment
|
| - // ids (bug 368353).
|
| -}
|
| -
|
| -void StoreAttachments(syncer::AttachmentService* attachment_service,
|
| - const syncer::AttachmentList& attachments) {
|
| - DCHECK(attachment_service);
|
| - syncer::AttachmentService::StoreCallback ignore_store_result =
|
| - base::Bind(&IgnoreStoreResult);
|
| - attachment_service->StoreAttachments(attachments, ignore_store_result);
|
| -}
|
| -
|
| } // namespace
|
|
|
| syncer::SyncError GenericChangeProcessor::ProcessSyncChanges(
|
| const tracked_objects::Location& from_here,
|
| const syncer::SyncChangeList& list_of_changes) {
|
| DCHECK(CalledOnValidThread());
|
| -
|
| - // Keep track of brand new attachments so we can persist them on this device
|
| - // and upload them to the server.
|
| - syncer::AttachmentList new_attachments;
|
| -
|
| syncer::WriteTransaction trans(from_here, share_handle());
|
|
|
| for (syncer::SyncChangeList::const_iterator iter = list_of_changes.begin();
|
| @@ -435,19 +391,20 @@
|
| NOTREACHED();
|
| return error;
|
| }
|
| + attachment_service_->OnSyncDataDelete(change.sync_data());
|
| if (merge_result_.get()) {
|
| merge_result_->set_num_items_deleted(
|
| merge_result_->num_items_deleted() + 1);
|
| }
|
| } else if (change.change_type() == syncer::SyncChange::ACTION_ADD) {
|
| - syncer::SyncError error = HandleActionAdd(
|
| - change, type_str, type, trans, &sync_node, &new_attachments);
|
| + syncer::SyncError error =
|
| + HandleActionAdd(change, type_str, type, trans, &sync_node);
|
| if (error.IsSet()) {
|
| return error;
|
| }
|
| } else if (change.change_type() == syncer::SyncChange::ACTION_UPDATE) {
|
| - syncer::SyncError error = HandleActionUpdate(
|
| - change, type_str, type, trans, &sync_node, &new_attachments);
|
| + syncer::SyncError error =
|
| + HandleActionUpdate(change, type_str, type, trans, &sync_node);
|
| if (error.IsSet()) {
|
| return error;
|
| }
|
| @@ -465,11 +422,6 @@
|
| return error;
|
| }
|
| }
|
| -
|
| - if (!new_attachments.empty()) {
|
| - StoreAttachments(attachment_service_.get(), new_attachments);
|
| - }
|
| -
|
| return syncer::SyncError();
|
| }
|
|
|
| @@ -482,14 +434,12 @@
|
| const std::string& type_str,
|
| const syncer::ModelType& type,
|
| const syncer::WriteTransaction& trans,
|
| - syncer::WriteNode* sync_node,
|
| - syncer::AttachmentList* new_attachments) {
|
| + syncer::WriteNode* sync_node) {
|
| // TODO(sync): Handle other types of creation (custom parents, folders,
|
| // etc.).
|
| syncer::ReadNode root_node(&trans);
|
| - const syncer::SyncDataLocal sync_data_local(change.sync_data());
|
| if (root_node.InitByTagLookup(syncer::ModelTypeToRootTag(
|
| - sync_data_local.GetDataType())) != syncer::BaseNode::INIT_OK) {
|
| + change.sync_data().GetDataType())) != syncer::BaseNode::INIT_OK) {
|
| syncer::SyncError error(FROM_HERE,
|
| syncer::SyncError::DATATYPE_ERROR,
|
| "Failed to look up root node for type " + type_str,
|
| @@ -502,7 +452,9 @@
|
| }
|
| syncer::WriteNode::InitUniqueByCreationResult result =
|
| sync_node->InitUniqueByCreation(
|
| - sync_data_local.GetDataType(), root_node, sync_data_local.GetTag());
|
| + change.sync_data().GetDataType(),
|
| + root_node,
|
| + syncer::SyncDataLocal(change.sync_data()).GetTag());
|
| if (result != syncer::WriteNode::INIT_SUCCESS) {
|
| std::string error_prefix = "Failed to create " + type_str + " node: " +
|
| change.location().ToString() + ", ";
|
| @@ -551,18 +503,8 @@
|
| }
|
| }
|
| sync_node->SetTitle(change.sync_data().GetTitle());
|
| - SetNodeSpecifics(sync_data_local.GetSpecifics(), sync_node);
|
| -
|
| - syncer::AttachmentIdList attachment_ids = sync_data_local.GetAttachmentIds();
|
| - SetAttachmentMetadata(attachment_ids, sync_node);
|
| -
|
| - // Return any newly added attachments.
|
| - const syncer::AttachmentList& local_attachments_for_upload =
|
| - sync_data_local.GetLocalAttachmentsForUpload();
|
| - new_attachments->insert(new_attachments->end(),
|
| - local_attachments_for_upload.begin(),
|
| - local_attachments_for_upload.end());
|
| -
|
| + SetNodeSpecifics(change.sync_data().GetSpecifics(), sync_node);
|
| + attachment_service_->OnSyncDataAdd(change.sync_data());
|
| if (merge_result_.get()) {
|
| merge_result_->set_num_items_added(merge_result_->num_items_added() + 1);
|
| }
|
| @@ -577,14 +519,12 @@
|
| const std::string& type_str,
|
| const syncer::ModelType& type,
|
| const syncer::WriteTransaction& trans,
|
| - syncer::WriteNode* sync_node,
|
| - syncer::AttachmentList* new_attachments) {
|
| + syncer::WriteNode* sync_node) {
|
| // TODO(zea): consider having this logic for all possible changes?
|
| -
|
| - const syncer::SyncDataLocal sync_data_local(change.sync_data());
|
| syncer::BaseNode::InitByLookupResult result =
|
| - sync_node->InitByClientTagLookup(sync_data_local.GetDataType(),
|
| - sync_data_local.GetTag());
|
| + sync_node->InitByClientTagLookup(
|
| + change.sync_data().GetDataType(),
|
| + syncer::SyncDataLocal(change.sync_data()).GetTag());
|
| if (result != syncer::BaseNode::INIT_OK) {
|
| std::string error_prefix = "Failed to load " + type_str + " node. " +
|
| change.location().ToString() + ", ";
|
| @@ -666,16 +606,9 @@
|
| }
|
|
|
| sync_node->SetTitle(change.sync_data().GetTitle());
|
| - SetNodeSpecifics(sync_data_local.GetSpecifics(), sync_node);
|
| - SetAttachmentMetadata(sync_data_local.GetAttachmentIds(), sync_node);
|
| -
|
| - // Return any newly added attachments.
|
| - const syncer::AttachmentList& local_attachments_for_upload =
|
| - sync_data_local.GetLocalAttachmentsForUpload();
|
| - new_attachments->insert(new_attachments->end(),
|
| - local_attachments_for_upload.begin(),
|
| - local_attachments_for_upload.end());
|
| -
|
| + SetNodeSpecifics(change.sync_data().GetSpecifics(), sync_node);
|
| + attachment_service_->OnSyncDataUpdate(sync_node->GetAttachmentIds(),
|
| + change.sync_data());
|
| if (merge_result_.get()) {
|
| merge_result_->set_num_items_modified(merge_result_->num_items_modified() +
|
| 1);
|
|
|