|  | // Copyright (c) 2012 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. | 
|  | // | 
|  | // Utility functions manipulating syncable::Entries, intended for use by the | 
|  | // syncer. | 
|  |  | 
|  | #ifndef SYNC_ENGINE_SYNCER_UTIL_H_ | 
|  | #define SYNC_ENGINE_SYNCER_UTIL_H_ | 
|  |  | 
|  | #include <set> | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | #include "sync/base/sync_export.h" | 
|  | #include "sync/engine/syncer.h" | 
|  | #include "sync/engine/syncer_types.h" | 
|  | #include "sync/syncable/entry_kernel.h" | 
|  | #include "sync/syncable/metahandle_set.h" | 
|  | #include "sync/syncable/mutable_entry.h" | 
|  | #include "sync/syncable/syncable_id.h" | 
|  |  | 
|  | namespace sync_pb { | 
|  | class SyncEntity; | 
|  | }  // namespace sync_pb | 
|  |  | 
|  | namespace syncer { | 
|  |  | 
|  | namespace syncable { | 
|  | class BaseTransaction; | 
|  | class ModelNeutralWriteTransaction; | 
|  | }  // namespace syncable | 
|  |  | 
|  | class Cryptographer; | 
|  |  | 
|  | // If the server sent down a client-tagged entry, or an entry whose | 
|  | // commit response was lost, it is necessary to update a local entry | 
|  | // with an ID that doesn't match the ID of the update.  Here, we | 
|  | // find the ID of such an entry, if it exists.  This function may | 
|  | // determine that |server_entry| should be dropped; if so, it returns | 
|  | // the null ID -- callers must handle this case.  When update application | 
|  | // should proceed normally with a new local entry, this function will | 
|  | // return server_entry.id(); the caller must create an entry with that | 
|  | // ID.  This function does not alter the database. | 
|  | syncable::Id FindLocalIdToUpdate( | 
|  | syncable::BaseTransaction* trans, | 
|  | const sync_pb::SyncEntity& server_entry); | 
|  |  | 
|  | UpdateAttemptResponse AttemptToUpdateEntry( | 
|  | syncable::WriteTransaction* const trans, | 
|  | syncable::MutableEntry* const entry, | 
|  | Cryptographer* cryptographer); | 
|  |  | 
|  | // Returns the most accurate position information available in this update.  It | 
|  | // prefers to use the unique_position() field, but will fall back to using the | 
|  | // int64-based position_in_parent if necessary. | 
|  | // | 
|  | // The suffix parameter is the unique bookmark tag for the item being updated. | 
|  | // | 
|  | // Will return an invalid position if no valid position can be constructed, or | 
|  | // if this type does not support positioning. | 
|  | SYNC_EXPORT_PRIVATE UniquePosition GetUpdatePosition( | 
|  | const sync_pb::SyncEntity& update, | 
|  | const std::string& suffix); | 
|  |  | 
|  | // Fetch the cache_guid and item_id-based unique bookmark tag from an update. | 
|  | // Will return an empty string if someting unexpected happens. | 
|  | SYNC_EXPORT_PRIVATE std::string GetUniqueBookmarkTagFromUpdate( | 
|  | const sync_pb::SyncEntity& update); | 
|  |  | 
|  | // Pass in name to avoid redundant UTF8 conversion. | 
|  | SYNC_EXPORT_PRIVATE void UpdateServerFieldsFromUpdate( | 
|  | syncable::ModelNeutralMutableEntry* local_entry, | 
|  | const sync_pb::SyncEntity& server_entry, | 
|  | const std::string& name); | 
|  |  | 
|  | // Creates a new Entry iff no Entry exists with the given id. | 
|  | void CreateNewEntry(syncable::ModelNeutralWriteTransaction *trans, | 
|  | const syncable::Id& id); | 
|  |  | 
|  | // This function is called on an entry when we can update the user-facing data | 
|  | // from the server data. | 
|  | void UpdateLocalDataFromServerData(syncable::WriteTransaction* trans, | 
|  | syncable::MutableEntry* entry); | 
|  |  | 
|  | VerifyCommitResult ValidateCommitEntry(syncable::Entry* entry); | 
|  |  | 
|  | VerifyResult VerifyNewEntry(const sync_pb::SyncEntity& update, | 
|  | syncable::Entry* target, | 
|  | const bool deleted); | 
|  |  | 
|  | // Assumes we have an existing entry; check here for updates that break | 
|  | // consistency rules. | 
|  | VerifyResult VerifyUpdateConsistency( | 
|  | syncable::ModelNeutralWriteTransaction* trans, | 
|  | const sync_pb::SyncEntity& update, | 
|  | const bool deleted, | 
|  | const bool is_directory, | 
|  | ModelType model_type, | 
|  | syncable::ModelNeutralMutableEntry* target); | 
|  |  | 
|  | // Assumes we have an existing entry; verify an update that seems to be | 
|  | // expressing an 'undelete' | 
|  | VerifyResult VerifyUndelete(syncable::ModelNeutralWriteTransaction* trans, | 
|  | const sync_pb::SyncEntity& update, | 
|  | syncable::ModelNeutralMutableEntry* target); | 
|  |  | 
|  | void MarkDeletedChildrenSynced( | 
|  | syncable::Directory* dir, | 
|  | syncable::BaseWriteTransaction* trans, | 
|  | std::set<syncable::Id>* deleted_folders); | 
|  |  | 
|  | }  // namespace syncer | 
|  |  | 
|  | #endif  // SYNC_ENGINE_SYNCER_UTIL_H_ |