// 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. 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_