| 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 d599b7bb5f411c9704ddc594047592fd5c32b732..4ff131aee38c8641517582084e09d7c9ebe5f43c 100644
|
| --- a/components/sync/driver/generic_change_processor.cc
|
| +++ b/components/sync/driver/generic_change_processor.cc
|
| @@ -28,16 +28,15 @@
|
| #include "components/sync/driver/sync_client.h"
|
| #include "components/sync/syncable/entry.h" // TODO(tim): Bug 123674.
|
|
|
| -namespace sync_driver {
|
| +namespace syncer {
|
|
|
| namespace {
|
|
|
| const int kContextSizeLimit = 1024; // Datatype context size limit.
|
|
|
| void SetNodeSpecifics(const sync_pb::EntitySpecifics& entity_specifics,
|
| - syncer::WriteNode* write_node) {
|
| - if (syncer::GetModelTypeFromSpecifics(entity_specifics) ==
|
| - syncer::PASSWORDS) {
|
| + WriteNode* write_node) {
|
| + if (GetModelTypeFromSpecifics(entity_specifics) == PASSWORDS) {
|
| write_node->SetPasswordSpecifics(
|
| entity_specifics.password().client_only_encrypted_data());
|
| } else {
|
| @@ -47,15 +46,15 @@ void SetNodeSpecifics(const sync_pb::EntitySpecifics& entity_specifics,
|
|
|
| // Helper function to convert AttachmentId to AttachmentMetadataRecord.
|
| sync_pb::AttachmentMetadataRecord AttachmentIdToRecord(
|
| - const syncer::AttachmentId& attachment_id) {
|
| + const 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) {
|
| +void SetAttachmentMetadata(const AttachmentIdList& attachment_ids,
|
| + WriteNode* write_node) {
|
| DCHECK(write_node);
|
| sync_pb::AttachmentMetadata attachment_metadata;
|
| std::transform(
|
| @@ -65,24 +64,24 @@ void SetAttachmentMetadata(const syncer::AttachmentIdList& attachment_ids,
|
| write_node->SetAttachmentMetadata(attachment_metadata);
|
| }
|
|
|
| -syncer::SyncData BuildRemoteSyncData(
|
| +SyncData BuildRemoteSyncData(
|
| int64_t sync_id,
|
| - const syncer::ReadNode& read_node,
|
| - const syncer::AttachmentServiceProxy& attachment_service_proxy) {
|
| - const syncer::AttachmentIdList& attachment_ids = read_node.GetAttachmentIds();
|
| + const ReadNode& read_node,
|
| + const AttachmentServiceProxy& attachment_service_proxy) {
|
| + const AttachmentIdList& attachment_ids = read_node.GetAttachmentIds();
|
| switch (read_node.GetModelType()) {
|
| - case syncer::PASSWORDS: {
|
| + case PASSWORDS: {
|
| // Passwords must be accessed differently, to account for their
|
| // encryption, and stored into a temporary EntitySpecifics.
|
| sync_pb::EntitySpecifics password_holder;
|
| password_holder.mutable_password()
|
| ->mutable_client_only_encrypted_data()
|
| ->CopyFrom(read_node.GetPasswordSpecifics());
|
| - return syncer::SyncData::CreateRemoteData(
|
| + return SyncData::CreateRemoteData(
|
| sync_id, password_holder, read_node.GetModificationTime(),
|
| attachment_ids, attachment_service_proxy);
|
| }
|
| - case syncer::SESSIONS:
|
| + case SESSIONS:
|
| // Include tag hashes for sessions data type to allow discarding during
|
| // merge if re-hashing by the service gives a different value. This is to
|
| // allow removal of incorrectly hashed values, see crbug.com/604657. This
|
| @@ -90,29 +89,29 @@ syncer::SyncData BuildRemoteSyncData(
|
| // generate a tag from the specifics. We don't set this value for other
|
| // data types because they shouldn't need it and it costs memory to hold
|
| // another copy of this string around.
|
| - return syncer::SyncData::CreateRemoteData(
|
| + return SyncData::CreateRemoteData(
|
| sync_id, read_node.GetEntitySpecifics(),
|
| read_node.GetModificationTime(), attachment_ids,
|
| attachment_service_proxy, read_node.GetEntry()->GetUniqueClientTag());
|
| default:
|
| // Use the specifics directly, encryption has already been handled.
|
| - return syncer::SyncData::CreateRemoteData(
|
| - sync_id, read_node.GetEntitySpecifics(),
|
| - read_node.GetModificationTime(), attachment_ids,
|
| - attachment_service_proxy);
|
| + return SyncData::CreateRemoteData(sync_id, read_node.GetEntitySpecifics(),
|
| + read_node.GetModificationTime(),
|
| + attachment_ids,
|
| + attachment_service_proxy);
|
| }
|
| }
|
|
|
| } // namespace
|
|
|
| GenericChangeProcessor::GenericChangeProcessor(
|
| - syncer::ModelType type,
|
| - std::unique_ptr<syncer::DataTypeErrorHandler> error_handler,
|
| - const base::WeakPtr<syncer::SyncableService>& local_service,
|
| - const base::WeakPtr<syncer::SyncMergeResult>& merge_result,
|
| - syncer::UserShare* user_share,
|
| + ModelType type,
|
| + std::unique_ptr<DataTypeErrorHandler> error_handler,
|
| + const base::WeakPtr<SyncableService>& local_service,
|
| + const base::WeakPtr<SyncMergeResult>& merge_result,
|
| + UserShare* user_share,
|
| SyncClient* sync_client,
|
| - std::unique_ptr<syncer::AttachmentStoreForSync> attachment_store)
|
| + std::unique_ptr<AttachmentStoreForSync> attachment_store)
|
| : ChangeProcessor(std::move(error_handler)),
|
| type_(type),
|
| local_service_(local_service),
|
| @@ -120,11 +119,11 @@ GenericChangeProcessor::GenericChangeProcessor(
|
| share_handle_(user_share),
|
| weak_ptr_factory_(this) {
|
| DCHECK(CalledOnValidThread());
|
| - DCHECK_NE(type_, syncer::UNSPECIFIED);
|
| + DCHECK_NE(type_, UNSPECIFIED);
|
| if (attachment_store) {
|
| std::string store_birthday;
|
| {
|
| - syncer::ReadTransaction trans(FROM_HERE, share_handle());
|
| + ReadTransaction trans(FROM_HERE, share_handle());
|
| store_birthday = trans.GetStoreBirthday();
|
| }
|
| attachment_service_ =
|
| @@ -132,16 +131,15 @@ GenericChangeProcessor::GenericChangeProcessor(
|
| std::move(attachment_store), *user_share, store_birthday, type,
|
| this);
|
| attachment_service_weak_ptr_factory_.reset(
|
| - new base::WeakPtrFactory<syncer::AttachmentService>(
|
| - attachment_service_.get()));
|
| - attachment_service_proxy_ = syncer::AttachmentServiceProxy(
|
| + new base::WeakPtrFactory<AttachmentService>(attachment_service_.get()));
|
| + attachment_service_proxy_ = AttachmentServiceProxy(
|
| base::ThreadTaskRunnerHandle::Get(),
|
| attachment_service_weak_ptr_factory_->GetWeakPtr());
|
| UploadAllAttachmentsNotOnServer();
|
| } else {
|
| - attachment_service_proxy_ = syncer::AttachmentServiceProxy(
|
| - base::ThreadTaskRunnerHandle::Get(),
|
| - base::WeakPtr<syncer::AttachmentService>());
|
| + attachment_service_proxy_ =
|
| + AttachmentServiceProxy(base::ThreadTaskRunnerHandle::Get(),
|
| + base::WeakPtr<AttachmentService>());
|
| }
|
| }
|
|
|
| @@ -150,14 +148,14 @@ GenericChangeProcessor::~GenericChangeProcessor() {
|
| }
|
|
|
| void GenericChangeProcessor::ApplyChangesFromSyncModel(
|
| - const syncer::BaseTransaction* trans,
|
| + const BaseTransaction* trans,
|
| int64_t model_version,
|
| - const syncer::ImmutableChangeRecordList& changes) {
|
| + const ImmutableChangeRecordList& changes) {
|
| DCHECK(CalledOnValidThread());
|
| DCHECK(syncer_changes_.empty());
|
| - for (syncer::ChangeRecordList::const_iterator it = changes.Get().begin();
|
| + for (ChangeRecordList::const_iterator it = changes.Get().begin();
|
| it != changes.Get().end(); ++it) {
|
| - if (it->action == syncer::ChangeRecord::ACTION_DELETE) {
|
| + if (it->action == ChangeRecord::ACTION_DELETE) {
|
| std::unique_ptr<sync_pb::EntitySpecifics> specifics;
|
| if (it->specifics.has_password()) {
|
| DCHECK(it->extra.get());
|
| @@ -166,29 +164,27 @@ void GenericChangeProcessor::ApplyChangesFromSyncModel(
|
| ->mutable_client_only_encrypted_data()
|
| ->CopyFrom(it->extra->unencrypted());
|
| }
|
| - const syncer::AttachmentIdList empty_list_of_attachment_ids;
|
| - syncer_changes_.push_back(syncer::SyncChange(
|
| - FROM_HERE, syncer::SyncChange::ACTION_DELETE,
|
| - syncer::SyncData::CreateRemoteData(
|
| + const AttachmentIdList empty_list_of_attachment_ids;
|
| + syncer_changes_.push_back(SyncChange(
|
| + FROM_HERE, SyncChange::ACTION_DELETE,
|
| + SyncData::CreateRemoteData(
|
| it->id, specifics ? *specifics : it->specifics, base::Time(),
|
| empty_list_of_attachment_ids, attachment_service_proxy_)));
|
| } else {
|
| - syncer::SyncChange::SyncChangeType action =
|
| - (it->action == syncer::ChangeRecord::ACTION_ADD)
|
| - ? syncer::SyncChange::ACTION_ADD
|
| - : syncer::SyncChange::ACTION_UPDATE;
|
| + SyncChange::SyncChangeType action =
|
| + (it->action == ChangeRecord::ACTION_ADD) ? SyncChange::ACTION_ADD
|
| + : SyncChange::ACTION_UPDATE;
|
| // Need to load specifics from node.
|
| - syncer::ReadNode read_node(trans);
|
| - if (read_node.InitByIdLookup(it->id) != syncer::BaseNode::INIT_OK) {
|
| - syncer::SyncError error(
|
| - FROM_HERE, syncer::SyncError::DATATYPE_ERROR,
|
| - "Failed to look up data for received change with id " +
|
| - base::Int64ToString(it->id),
|
| - syncer::GetModelTypeFromSpecifics(it->specifics));
|
| + ReadNode read_node(trans);
|
| + if (read_node.InitByIdLookup(it->id) != BaseNode::INIT_OK) {
|
| + SyncError error(FROM_HERE, SyncError::DATATYPE_ERROR,
|
| + "Failed to look up data for received change with id " +
|
| + base::Int64ToString(it->id),
|
| + GetModelTypeFromSpecifics(it->specifics));
|
| error_handler()->OnUnrecoverableError(error);
|
| return;
|
| }
|
| - syncer_changes_.push_back(syncer::SyncChange(
|
| + syncer_changes_.push_back(SyncChange(
|
| FROM_HERE, action,
|
| BuildRemoteSyncData(it->id, read_node, attachment_service_proxy_)));
|
| }
|
| @@ -200,118 +196,117 @@ void GenericChangeProcessor::CommitChangesFromSyncModel() {
|
| if (syncer_changes_.empty())
|
| return;
|
| if (!local_service_.get()) {
|
| - syncer::ModelType type = syncer_changes_[0].sync_data().GetDataType();
|
| - syncer::SyncError error(FROM_HERE, syncer::SyncError::DATATYPE_ERROR,
|
| - "Local service destroyed.", type);
|
| + ModelType type = syncer_changes_[0].sync_data().GetDataType();
|
| + SyncError error(FROM_HERE, SyncError::DATATYPE_ERROR,
|
| + "Local service destroyed.", type);
|
| error_handler()->OnUnrecoverableError(error);
|
| return;
|
| }
|
| - syncer::SyncError error =
|
| + SyncError error =
|
| local_service_->ProcessSyncChanges(FROM_HERE, syncer_changes_);
|
| syncer_changes_.clear();
|
| if (error.IsSet())
|
| error_handler()->OnUnrecoverableError(error);
|
| }
|
|
|
| -syncer::SyncDataList GenericChangeProcessor::GetAllSyncData(
|
| - syncer::ModelType type) const {
|
| +SyncDataList GenericChangeProcessor::GetAllSyncData(ModelType type) const {
|
| DCHECK_EQ(type_, type);
|
| // This is slow / memory intensive. Should be used sparingly by datatypes.
|
| - syncer::SyncDataList data;
|
| + SyncDataList data;
|
| GetAllSyncDataReturnError(&data);
|
| return data;
|
| }
|
|
|
| -syncer::SyncError GenericChangeProcessor::UpdateDataTypeContext(
|
| - syncer::ModelType type,
|
| - syncer::SyncChangeProcessor::ContextRefreshStatus refresh_status,
|
| +SyncError GenericChangeProcessor::UpdateDataTypeContext(
|
| + ModelType type,
|
| + SyncChangeProcessor::ContextRefreshStatus refresh_status,
|
| const std::string& context) {
|
| - DCHECK(syncer::ProtocolTypes().Has(type));
|
| + DCHECK(ProtocolTypes().Has(type));
|
| DCHECK_EQ(type_, type);
|
|
|
| if (context.size() > static_cast<size_t>(kContextSizeLimit)) {
|
| - return syncer::SyncError(FROM_HERE, syncer::SyncError::DATATYPE_ERROR,
|
| - "Context size limit exceeded.", type);
|
| + return SyncError(FROM_HERE, SyncError::DATATYPE_ERROR,
|
| + "Context size limit exceeded.", type);
|
| }
|
|
|
| - syncer::WriteTransaction trans(FROM_HERE, share_handle());
|
| + WriteTransaction trans(FROM_HERE, share_handle());
|
| trans.SetDataTypeContext(type, refresh_status, context);
|
|
|
| // TODO(zea): plumb a pointer to the PSS or SyncManagerImpl here so we can
|
| // trigger a datatype nudge if |refresh_status == REFRESH_NEEDED|.
|
|
|
| - return syncer::SyncError();
|
| + return SyncError();
|
| }
|
|
|
| void GenericChangeProcessor::AddLocalChangeObserver(
|
| - syncer::LocalChangeObserver* observer) {
|
| + LocalChangeObserver* observer) {
|
| local_change_observers_.AddObserver(observer);
|
| }
|
|
|
| void GenericChangeProcessor::RemoveLocalChangeObserver(
|
| - syncer::LocalChangeObserver* observer) {
|
| + LocalChangeObserver* observer) {
|
| local_change_observers_.RemoveObserver(observer);
|
| }
|
|
|
| void GenericChangeProcessor::OnAttachmentUploaded(
|
| - const syncer::AttachmentId& attachment_id) {
|
| - syncer::WriteTransaction trans(FROM_HERE, share_handle());
|
| + const AttachmentId& attachment_id) {
|
| + WriteTransaction trans(FROM_HERE, share_handle());
|
| trans.UpdateEntriesMarkAttachmentAsOnServer(attachment_id);
|
| }
|
|
|
| -syncer::SyncError GenericChangeProcessor::GetAllSyncDataReturnError(
|
| - syncer::SyncDataList* current_sync_data) const {
|
| +SyncError GenericChangeProcessor::GetAllSyncDataReturnError(
|
| + SyncDataList* current_sync_data) const {
|
| DCHECK(CalledOnValidThread());
|
| - std::string type_name = syncer::ModelTypeToString(type_);
|
| - syncer::ReadTransaction trans(FROM_HERE, share_handle());
|
| - syncer::ReadNode root(&trans);
|
| - if (root.InitTypeRoot(type_) != syncer::BaseNode::INIT_OK) {
|
| - syncer::SyncError error(FROM_HERE, syncer::SyncError::DATATYPE_ERROR,
|
| - "Server did not create the top-level " + type_name +
|
| - " node. We might be running against an out-of-"
|
| - "date server.",
|
| - type_);
|
| + std::string type_name = ModelTypeToString(type_);
|
| + ReadTransaction trans(FROM_HERE, share_handle());
|
| + ReadNode root(&trans);
|
| + if (root.InitTypeRoot(type_) != BaseNode::INIT_OK) {
|
| + SyncError error(FROM_HERE, SyncError::DATATYPE_ERROR,
|
| + "Server did not create the top-level " + type_name +
|
| + " node. We might be running against an out-of-"
|
| + "date server.",
|
| + type_);
|
| return error;
|
| }
|
|
|
| // TODO(akalin): We'll have to do a tree traversal for bookmarks.
|
| - DCHECK_NE(type_, syncer::BOOKMARKS);
|
| + DCHECK_NE(type_, BOOKMARKS);
|
|
|
| std::vector<int64_t> child_ids;
|
| root.GetChildIds(&child_ids);
|
|
|
| for (std::vector<int64_t>::iterator it = child_ids.begin();
|
| it != child_ids.end(); ++it) {
|
| - syncer::ReadNode sync_child_node(&trans);
|
| - if (sync_child_node.InitByIdLookup(*it) != syncer::BaseNode::INIT_OK) {
|
| - syncer::SyncError error(
|
| - FROM_HERE, syncer::SyncError::DATATYPE_ERROR,
|
| - "Failed to fetch child node for type " + type_name + ".", type_);
|
| + ReadNode sync_child_node(&trans);
|
| + if (sync_child_node.InitByIdLookup(*it) != BaseNode::INIT_OK) {
|
| + SyncError error(FROM_HERE, SyncError::DATATYPE_ERROR,
|
| + "Failed to fetch child node for type " + type_name + ".",
|
| + type_);
|
| return error;
|
| }
|
| current_sync_data->push_back(BuildRemoteSyncData(
|
| sync_child_node.GetId(), sync_child_node, attachment_service_proxy_));
|
| }
|
| - return syncer::SyncError();
|
| + return SyncError();
|
| }
|
|
|
| bool GenericChangeProcessor::GetDataTypeContext(std::string* context) const {
|
| - syncer::ReadTransaction trans(FROM_HERE, share_handle());
|
| + ReadTransaction trans(FROM_HERE, share_handle());
|
| sync_pb::DataTypeContext context_proto;
|
| trans.GetDataTypeContext(type_, &context_proto);
|
| if (!context_proto.has_context())
|
| return false;
|
|
|
| - DCHECK_EQ(type_, syncer::GetModelTypeFromSpecificsFieldNumber(
|
| - context_proto.data_type_id()));
|
| + DCHECK_EQ(type_,
|
| + GetModelTypeFromSpecificsFieldNumber(context_proto.data_type_id()));
|
| *context = context_proto.context();
|
| return true;
|
| }
|
|
|
| int GenericChangeProcessor::GetSyncCount() {
|
| - syncer::ReadTransaction trans(FROM_HERE, share_handle());
|
| - syncer::ReadNode root(&trans);
|
| - if (root.InitTypeRoot(type_) != syncer::BaseNode::INIT_OK)
|
| + ReadTransaction trans(FROM_HERE, share_handle());
|
| + ReadNode root(&trans);
|
| + if (root.InitTypeRoot(type_) != BaseNode::INIT_OK)
|
| return 0;
|
|
|
| // Subtract one to account for type's root node.
|
| @@ -324,15 +319,14 @@ namespace {
|
| // modifying any code around an OnUnrecoverableError call, else the compiler
|
| // attempts to merge it with other calls, losing useful information in
|
| // breakpad uploads.
|
| -syncer::SyncError LogLookupFailure(
|
| - syncer::BaseNode::InitByLookupResult lookup_result,
|
| - const tracked_objects::Location& from_here,
|
| - const std::string& error_prefix,
|
| - syncer::ModelType type,
|
| - syncer::DataTypeErrorHandler* error_handler) {
|
| +SyncError LogLookupFailure(BaseNode::InitByLookupResult lookup_result,
|
| + const tracked_objects::Location& from_here,
|
| + const std::string& error_prefix,
|
| + ModelType type,
|
| + DataTypeErrorHandler* error_handler) {
|
| switch (lookup_result) {
|
| - case syncer::BaseNode::INIT_FAILED_ENTRY_NOT_GOOD: {
|
| - syncer::SyncError error;
|
| + case BaseNode::INIT_FAILED_ENTRY_NOT_GOOD: {
|
| + SyncError error;
|
| error.Reset(
|
| from_here,
|
| error_prefix + "could not find entry matching the lookup criteria.",
|
| @@ -341,22 +335,22 @@ syncer::SyncError LogLookupFailure(
|
| LOG(ERROR) << "Delete: Bad entry.";
|
| return error;
|
| }
|
| - case syncer::BaseNode::INIT_FAILED_ENTRY_IS_DEL: {
|
| - syncer::SyncError error;
|
| + case BaseNode::INIT_FAILED_ENTRY_IS_DEL: {
|
| + SyncError error;
|
| error.Reset(from_here, error_prefix + "entry is already deleted.", type);
|
| error_handler->OnUnrecoverableError(error);
|
| LOG(ERROR) << "Delete: Deleted entry.";
|
| return error;
|
| }
|
| - case syncer::BaseNode::INIT_FAILED_DECRYPT_IF_NECESSARY: {
|
| - syncer::SyncError error;
|
| + case BaseNode::INIT_FAILED_DECRYPT_IF_NECESSARY: {
|
| + SyncError error;
|
| error.Reset(from_here, error_prefix + "unable to decrypt", type);
|
| error_handler->OnUnrecoverableError(error);
|
| LOG(ERROR) << "Delete: Undecryptable entry.";
|
| return error;
|
| }
|
| - case syncer::BaseNode::INIT_FAILED_PRECONDITION: {
|
| - syncer::SyncError error;
|
| + case BaseNode::INIT_FAILED_PRECONDITION: {
|
| + SyncError error;
|
| error.Reset(from_here,
|
| error_prefix + "a precondition was not met for calling init.",
|
| type);
|
| @@ -365,7 +359,7 @@ syncer::SyncError LogLookupFailure(
|
| return error;
|
| }
|
| default: {
|
| - syncer::SyncError error;
|
| + SyncError error;
|
| // Should have listed all the possible error cases above.
|
| error.Reset(from_here, error_prefix + "unknown error", type);
|
| error_handler->OnUnrecoverableError(error);
|
| @@ -377,29 +371,29 @@ syncer::SyncError LogLookupFailure(
|
|
|
| } // namespace
|
|
|
| -syncer::SyncError GenericChangeProcessor::AttemptDelete(
|
| - const syncer::SyncChange& change,
|
| - syncer::ModelType type,
|
| +SyncError GenericChangeProcessor::AttemptDelete(
|
| + const SyncChange& change,
|
| + ModelType type,
|
| const std::string& type_str,
|
| - syncer::WriteNode* node,
|
| - syncer::DataTypeErrorHandler* error_handler) {
|
| - DCHECK_EQ(change.change_type(), syncer::SyncChange::ACTION_DELETE);
|
| + WriteNode* node,
|
| + DataTypeErrorHandler* error_handler) {
|
| + DCHECK_EQ(change.change_type(), SyncChange::ACTION_DELETE);
|
| if (change.sync_data().IsLocal()) {
|
| - const std::string& tag = syncer::SyncDataLocal(change.sync_data()).GetTag();
|
| + const std::string& tag = SyncDataLocal(change.sync_data()).GetTag();
|
| if (tag.empty()) {
|
| - syncer::SyncError error(FROM_HERE, syncer::SyncError::DATATYPE_ERROR,
|
| - "Failed to delete " + type_str +
|
| - " node. Local data, empty tag. " +
|
| - change.location().ToString(),
|
| - type);
|
| + SyncError error(FROM_HERE, SyncError::DATATYPE_ERROR,
|
| + "Failed to delete " + type_str +
|
| + " node. Local data, empty tag. " +
|
| + change.location().ToString(),
|
| + type);
|
| error_handler->OnUnrecoverableError(error);
|
| NOTREACHED();
|
| return error;
|
| }
|
|
|
| - syncer::BaseNode::InitByLookupResult result =
|
| + BaseNode::InitByLookupResult result =
|
| node->InitByClientTagLookup(change.sync_data().GetDataType(), tag);
|
| - if (result != syncer::BaseNode::INIT_OK) {
|
| + if (result != BaseNode::INIT_OK) {
|
| return LogLookupFailure(result, FROM_HERE,
|
| "Failed to delete " + type_str +
|
| " node. Local data. " +
|
| @@ -407,9 +401,9 @@ syncer::SyncError GenericChangeProcessor::AttemptDelete(
|
| type, error_handler);
|
| }
|
| } else {
|
| - syncer::BaseNode::InitByLookupResult result = node->InitByIdLookup(
|
| - syncer::SyncDataRemote(change.sync_data()).GetId());
|
| - if (result != syncer::BaseNode::INIT_OK) {
|
| + BaseNode::InitByLookupResult result =
|
| + node->InitByIdLookup(SyncDataRemote(change.sync_data()).GetId());
|
| + if (result != BaseNode::INIT_OK) {
|
| return LogLookupFailure(result, FROM_HERE,
|
| "Failed to delete " + type_str +
|
| " node. Non-local data. " +
|
| @@ -422,33 +416,33 @@ syncer::SyncError GenericChangeProcessor::AttemptDelete(
|
| node->Drop();
|
| else
|
| node->Tombstone();
|
| - return syncer::SyncError();
|
| + return SyncError();
|
| }
|
|
|
| -syncer::SyncError GenericChangeProcessor::ProcessSyncChanges(
|
| +SyncError GenericChangeProcessor::ProcessSyncChanges(
|
| const tracked_objects::Location& from_here,
|
| - const syncer::SyncChangeList& list_of_changes) {
|
| + const SyncChangeList& list_of_changes) {
|
| DCHECK(CalledOnValidThread());
|
|
|
| if (list_of_changes.empty()) {
|
| // No work. Exit without entering WriteTransaction.
|
| - return syncer::SyncError();
|
| + return SyncError();
|
| }
|
|
|
| // Keep track of brand new attachments so we can persist them on this device
|
| // and upload them to the server.
|
| - syncer::AttachmentIdSet new_attachments;
|
| + AttachmentIdSet new_attachments;
|
|
|
| - syncer::WriteTransaction trans(from_here, share_handle());
|
| + WriteTransaction trans(from_here, share_handle());
|
|
|
| - for (syncer::SyncChangeList::const_iterator iter = list_of_changes.begin();
|
| + for (SyncChangeList::const_iterator iter = list_of_changes.begin();
|
| iter != list_of_changes.end(); ++iter) {
|
| - const syncer::SyncChange& change = *iter;
|
| + const SyncChange& change = *iter;
|
| DCHECK_EQ(change.sync_data().GetDataType(), type_);
|
| - std::string type_str = syncer::ModelTypeToString(type_);
|
| - syncer::WriteNode sync_node(&trans);
|
| - if (change.change_type() == syncer::SyncChange::ACTION_DELETE) {
|
| - syncer::SyncError error =
|
| + std::string type_str = ModelTypeToString(type_);
|
| + WriteNode sync_node(&trans);
|
| + if (change.change_type() == SyncChange::ACTION_DELETE) {
|
| + SyncError error =
|
| AttemptDelete(change, type_, type_str, &sync_node, error_handler());
|
| if (error.IsSet()) {
|
| NOTREACHED();
|
| @@ -458,24 +452,23 @@ syncer::SyncError GenericChangeProcessor::ProcessSyncChanges(
|
| 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, trans,
|
| - &sync_node, &new_attachments);
|
| + } else if (change.change_type() == SyncChange::ACTION_ADD) {
|
| + SyncError error = HandleActionAdd(change, type_str, trans, &sync_node,
|
| + &new_attachments);
|
| if (error.IsSet()) {
|
| return error;
|
| }
|
| - } else if (change.change_type() == syncer::SyncChange::ACTION_UPDATE) {
|
| - syncer::SyncError error = HandleActionUpdate(
|
| - change, type_str, trans, &sync_node, &new_attachments);
|
| + } else if (change.change_type() == SyncChange::ACTION_UPDATE) {
|
| + SyncError error = HandleActionUpdate(change, type_str, trans, &sync_node,
|
| + &new_attachments);
|
| if (error.IsSet()) {
|
| return error;
|
| }
|
| } else {
|
| - syncer::SyncError error(
|
| - FROM_HERE, syncer::SyncError::DATATYPE_ERROR,
|
| - "Received unset SyncChange in the change processor, " +
|
| - change.location().ToString(),
|
| - type_);
|
| + SyncError error(FROM_HERE, SyncError::DATATYPE_ERROR,
|
| + "Received unset SyncChange in the change processor, " +
|
| + change.location().ToString(),
|
| + type_);
|
| error_handler()->OnUnrecoverableError(error);
|
| NOTREACHED();
|
| LOG(ERROR) << "Unset sync change.";
|
| @@ -487,8 +480,8 @@ syncer::SyncError GenericChangeProcessor::ProcessSyncChanges(
|
| // If datatype uses attachments it should have supplied attachment store
|
| // which would initialize attachment_service_. Fail if it isn't so.
|
| if (!attachment_service_.get()) {
|
| - syncer::SyncError error(
|
| - FROM_HERE, syncer::SyncError::DATATYPE_ERROR,
|
| + SyncError error(
|
| + FROM_HERE, SyncError::DATATYPE_ERROR,
|
| "Datatype performs attachment operation without initializing "
|
| "attachment store",
|
| type_);
|
| @@ -496,67 +489,67 @@ syncer::SyncError GenericChangeProcessor::ProcessSyncChanges(
|
| NOTREACHED();
|
| return error;
|
| }
|
| - syncer::AttachmentIdList ids_to_upload;
|
| + AttachmentIdList ids_to_upload;
|
| ids_to_upload.reserve(new_attachments.size());
|
| std::copy(new_attachments.begin(), new_attachments.end(),
|
| std::back_inserter(ids_to_upload));
|
| attachment_service_->UploadAttachments(ids_to_upload);
|
| }
|
|
|
| - return syncer::SyncError();
|
| + return SyncError();
|
| }
|
|
|
| // WARNING: this code is sensitive to compiler optimizations. Be careful
|
| // modifying any code around an OnUnrecoverableError call, else the compiler
|
| // attempts to merge it with other calls, losing useful information in
|
| // breakpad uploads.
|
| -syncer::SyncError GenericChangeProcessor::HandleActionAdd(
|
| - const syncer::SyncChange& change,
|
| +SyncError GenericChangeProcessor::HandleActionAdd(
|
| + const SyncChange& change,
|
| const std::string& type_str,
|
| - const syncer::WriteTransaction& trans,
|
| - syncer::WriteNode* sync_node,
|
| - syncer::AttachmentIdSet* new_attachments) {
|
| + const WriteTransaction& trans,
|
| + WriteNode* sync_node,
|
| + AttachmentIdSet* new_attachments) {
|
| // TODO(sync): Handle other types of creation (custom parents, folders,
|
| // etc.).
|
| - const syncer::SyncDataLocal sync_data_local(change.sync_data());
|
| - syncer::WriteNode::InitUniqueByCreationResult result =
|
| + const SyncDataLocal sync_data_local(change.sync_data());
|
| + WriteNode::InitUniqueByCreationResult result =
|
| sync_node->InitUniqueByCreation(sync_data_local.GetDataType(),
|
| sync_data_local.GetTag());
|
| - if (result != syncer::WriteNode::INIT_SUCCESS) {
|
| + if (result != WriteNode::INIT_SUCCESS) {
|
| std::string error_prefix = "Failed to create " + type_str + " node: " +
|
| change.location().ToString() + ", ";
|
| switch (result) {
|
| - case syncer::WriteNode::INIT_FAILED_EMPTY_TAG: {
|
| - syncer::SyncError error;
|
| + case WriteNode::INIT_FAILED_EMPTY_TAG: {
|
| + SyncError error;
|
| error.Reset(FROM_HERE, error_prefix + "empty tag", type_);
|
| error_handler()->OnUnrecoverableError(error);
|
| LOG(ERROR) << "Create: Empty tag.";
|
| return error;
|
| }
|
| - case syncer::WriteNode::INIT_FAILED_COULD_NOT_CREATE_ENTRY: {
|
| - syncer::SyncError error;
|
| + case WriteNode::INIT_FAILED_COULD_NOT_CREATE_ENTRY: {
|
| + SyncError error;
|
| error.Reset(FROM_HERE, error_prefix + "failed to create entry", type_);
|
| error_handler()->OnUnrecoverableError(error);
|
| LOG(ERROR) << "Create: Could not create entry.";
|
| return error;
|
| }
|
| - case syncer::WriteNode::INIT_FAILED_SET_PREDECESSOR: {
|
| - syncer::SyncError error;
|
| + case WriteNode::INIT_FAILED_SET_PREDECESSOR: {
|
| + SyncError error;
|
| error.Reset(FROM_HERE, error_prefix + "failed to set predecessor",
|
| type_);
|
| error_handler()->OnUnrecoverableError(error);
|
| LOG(ERROR) << "Create: Bad predecessor.";
|
| return error;
|
| }
|
| - case syncer::WriteNode::INIT_FAILED_DECRYPT_EXISTING_ENTRY: {
|
| - syncer::SyncError error;
|
| + case WriteNode::INIT_FAILED_DECRYPT_EXISTING_ENTRY: {
|
| + SyncError error;
|
| error.Reset(FROM_HERE, error_prefix + "failed to decrypt", type_);
|
| error_handler()->OnUnrecoverableError(error);
|
| LOG(ERROR) << "Create: Failed to decrypt.";
|
| return error;
|
| }
|
| default: {
|
| - syncer::SyncError error;
|
| + SyncError error;
|
| error.Reset(FROM_HERE, error_prefix + "unknown error", type_);
|
| error_handler()->OnUnrecoverableError(error);
|
| LOG(ERROR) << "Create: Unknown error.";
|
| @@ -569,7 +562,7 @@ syncer::SyncError GenericChangeProcessor::HandleActionAdd(
|
| sync_node->SetTitle(change.sync_data().GetTitle());
|
| SetNodeSpecifics(sync_data_local.GetSpecifics(), sync_node);
|
|
|
| - syncer::AttachmentIdList attachment_ids = sync_data_local.GetAttachmentIds();
|
| + AttachmentIdList attachment_ids = sync_data_local.GetAttachmentIds();
|
| SetAttachmentMetadata(attachment_ids, sync_node);
|
|
|
| // Return any newly added attachments.
|
| @@ -577,52 +570,51 @@ syncer::SyncError GenericChangeProcessor::HandleActionAdd(
|
| if (merge_result_.get()) {
|
| merge_result_->set_num_items_added(merge_result_->num_items_added() + 1);
|
| }
|
| - return syncer::SyncError();
|
| + return SyncError();
|
| }
|
| // WARNING: this code is sensitive to compiler optimizations. Be careful
|
| // modifying any code around an OnUnrecoverableError call, else the compiler
|
| // attempts to merge it with other calls, losing useful information in
|
| // breakpad uploads.
|
| -syncer::SyncError GenericChangeProcessor::HandleActionUpdate(
|
| - const syncer::SyncChange& change,
|
| +SyncError GenericChangeProcessor::HandleActionUpdate(
|
| + const SyncChange& change,
|
| const std::string& type_str,
|
| - const syncer::WriteTransaction& trans,
|
| - syncer::WriteNode* sync_node,
|
| - syncer::AttachmentIdSet* new_attachments) {
|
| - const syncer::SyncDataLocal sync_data_local(change.sync_data());
|
| - syncer::BaseNode::InitByLookupResult result =
|
| - sync_node->InitByClientTagLookup(sync_data_local.GetDataType(),
|
| - sync_data_local.GetTag());
|
| - if (result != syncer::BaseNode::INIT_OK) {
|
| + const WriteTransaction& trans,
|
| + WriteNode* sync_node,
|
| + AttachmentIdSet* new_attachments) {
|
| + const SyncDataLocal sync_data_local(change.sync_data());
|
| + BaseNode::InitByLookupResult result = sync_node->InitByClientTagLookup(
|
| + sync_data_local.GetDataType(), sync_data_local.GetTag());
|
| + if (result != BaseNode::INIT_OK) {
|
| std::string error_prefix = "Failed to load " + type_str + " node. " +
|
| change.location().ToString() + ", ";
|
| - if (result == syncer::BaseNode::INIT_FAILED_PRECONDITION) {
|
| - syncer::SyncError error;
|
| + if (result == BaseNode::INIT_FAILED_PRECONDITION) {
|
| + SyncError error;
|
| error.Reset(FROM_HERE, error_prefix + "empty tag", type_);
|
| error_handler()->OnUnrecoverableError(error);
|
| LOG(ERROR) << "Update: Empty tag.";
|
| return error;
|
| - } else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_NOT_GOOD) {
|
| - syncer::SyncError error;
|
| + } else if (result == BaseNode::INIT_FAILED_ENTRY_NOT_GOOD) {
|
| + SyncError error;
|
| error.Reset(FROM_HERE, error_prefix + "bad entry", type_);
|
| error_handler()->OnUnrecoverableError(error);
|
| LOG(ERROR) << "Update: bad entry.";
|
| return error;
|
| - } else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_IS_DEL) {
|
| - syncer::SyncError error;
|
| + } else if (result == BaseNode::INIT_FAILED_ENTRY_IS_DEL) {
|
| + SyncError error;
|
| error.Reset(FROM_HERE, error_prefix + "deleted entry", type_);
|
| error_handler()->OnUnrecoverableError(error);
|
| LOG(ERROR) << "Update: deleted entry.";
|
| return error;
|
| - } else if (result == syncer::BaseNode::INIT_FAILED_DECRYPT_IF_NECESSARY) {
|
| - syncer::SyncError error;
|
| + } else if (result == BaseNode::INIT_FAILED_DECRYPT_IF_NECESSARY) {
|
| + SyncError error;
|
| error.Reset(FROM_HERE, error_prefix + "failed to decrypt", type_);
|
| error_handler()->OnUnrecoverableError(error);
|
| LOG(ERROR) << "Update: Failed to decrypt.";
|
| return error;
|
| } else {
|
| NOTREACHED();
|
| - syncer::SyncError error;
|
| + SyncError error;
|
| error.Reset(FROM_HERE, error_prefix + "unknown error", type_);
|
| error_handler()->OnUnrecoverableError(error);
|
| LOG(ERROR) << "Update: Unknown error.";
|
| @@ -634,7 +626,7 @@ syncer::SyncError GenericChangeProcessor::HandleActionUpdate(
|
|
|
| sync_node->SetTitle(change.sync_data().GetTitle());
|
| SetNodeSpecifics(sync_data_local.GetSpecifics(), sync_node);
|
| - syncer::AttachmentIdList attachment_ids = sync_data_local.GetAttachmentIds();
|
| + AttachmentIdList attachment_ids = sync_data_local.GetAttachmentIds();
|
| SetAttachmentMetadata(attachment_ids, sync_node);
|
|
|
| // Return any newly added attachments.
|
| @@ -646,20 +638,20 @@ syncer::SyncError GenericChangeProcessor::HandleActionUpdate(
|
| }
|
| // TODO(sync): Support updating other parts of the sync node (title,
|
| // successor, parent, etc.).
|
| - return syncer::SyncError();
|
| + return SyncError();
|
| }
|
|
|
| bool GenericChangeProcessor::SyncModelHasUserCreatedNodes(bool* has_nodes) {
|
| DCHECK(CalledOnValidThread());
|
| DCHECK(has_nodes);
|
| - std::string type_name = syncer::ModelTypeToString(type_);
|
| + std::string type_name = ModelTypeToString(type_);
|
| std::string err_str =
|
| "Server did not create the top-level " + type_name +
|
| " node. We might be running against an out-of-date server.";
|
| *has_nodes = false;
|
| - syncer::ReadTransaction trans(FROM_HERE, share_handle());
|
| - syncer::ReadNode type_root_node(&trans);
|
| - if (type_root_node.InitTypeRoot(type_) != syncer::BaseNode::INIT_OK) {
|
| + ReadTransaction trans(FROM_HERE, share_handle());
|
| + ReadNode type_root_node(&trans);
|
| + if (type_root_node.InitTypeRoot(type_) != BaseNode::INIT_OK) {
|
| LOG(ERROR) << err_str;
|
| return false;
|
| }
|
| @@ -673,14 +665,14 @@ bool GenericChangeProcessor::SyncModelHasUserCreatedNodes(bool* has_nodes) {
|
| bool GenericChangeProcessor::CryptoReadyIfNecessary() {
|
| DCHECK(CalledOnValidThread());
|
| // We only access the cryptographer while holding a transaction.
|
| - syncer::ReadTransaction trans(FROM_HERE, share_handle());
|
| - const syncer::ModelTypeSet encrypted_types = trans.GetEncryptedTypes();
|
| + ReadTransaction trans(FROM_HERE, share_handle());
|
| + const ModelTypeSet encrypted_types = trans.GetEncryptedTypes();
|
| return !encrypted_types.Has(type_) || trans.GetCryptographer()->is_ready();
|
| }
|
|
|
| void GenericChangeProcessor::StartImpl() {}
|
|
|
| -syncer::UserShare* GenericChangeProcessor::share_handle() const {
|
| +UserShare* GenericChangeProcessor::share_handle() const {
|
| DCHECK(CalledOnValidThread());
|
| return share_handle_;
|
| }
|
| @@ -688,9 +680,9 @@ syncer::UserShare* GenericChangeProcessor::share_handle() const {
|
| void GenericChangeProcessor::UploadAllAttachmentsNotOnServer() {
|
| DCHECK(CalledOnValidThread());
|
| DCHECK(attachment_service_.get());
|
| - syncer::AttachmentIdList ids;
|
| + AttachmentIdList ids;
|
| {
|
| - syncer::ReadTransaction trans(FROM_HERE, share_handle());
|
| + ReadTransaction trans(FROM_HERE, share_handle());
|
| trans.GetAttachmentIdsToUpload(type_, &ids);
|
| }
|
| if (!ids.empty()) {
|
| @@ -699,16 +691,16 @@ void GenericChangeProcessor::UploadAllAttachmentsNotOnServer() {
|
| }
|
|
|
| void GenericChangeProcessor::NotifyLocalChangeObservers(
|
| - const syncer::syncable::Entry* current_entry,
|
| - const syncer::SyncChange& change) {
|
| - FOR_EACH_OBSERVER(syncer::LocalChangeObserver, local_change_observers_,
|
| + const syncable::Entry* current_entry,
|
| + const SyncChange& change) {
|
| + FOR_EACH_OBSERVER(LocalChangeObserver, local_change_observers_,
|
| OnLocalChange(current_entry, change));
|
| }
|
|
|
| -std::unique_ptr<syncer::AttachmentService>
|
| +std::unique_ptr<AttachmentService>
|
| GenericChangeProcessor::GetAttachmentService() const {
|
| - return std::unique_ptr<syncer::AttachmentService>(
|
| - new syncer::AttachmentServiceProxy(attachment_service_proxy_));
|
| + return std::unique_ptr<AttachmentService>(
|
| + new AttachmentServiceProxy(attachment_service_proxy_));
|
| }
|
|
|
| -} // namespace sync_driver
|
| +} // namespace syncer
|
|
|