1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 // 5 // Utility functions manipulating syncable::Entries, intended for use by the 6 // syncer. 7 8 #ifndef SYNC_ENGINE_SYNCER_UTIL_H_ 9 #define SYNC_ENGINE_SYNCER_UTIL_H_ 10 11 #include <set> 12 #include <string> 13 #include <vector> 14 15 #include "sync/base/sync_export.h" 16 #include "sync/engine/syncer.h" 17 #include "sync/engine/syncer_types.h" 18 #include "sync/syncable/entry_kernel.h" 19 #include "sync/syncable/metahandle_set.h" 20 #include "sync/syncable/mutable_entry.h" 21 #include "sync/syncable/syncable_id.h" 22 23 namespace sync_pb { 24 class SyncEntity; 25 } // namespace sync_pb 26 27 namespace syncer { 28 29 namespace syncable { 30 class BaseTransaction; 31 class ModelNeutralWriteTransaction; 32 } // namespace syncable 33 34 class Cryptographer; 35 36 // If the server sent down a client-tagged entry, or an entry whose 37 // commit response was lost, it is necessary to update a local entry 38 // with an ID that doesn't match the ID of the update. Here, we 39 // find the ID of such an entry, if it exists. This function may 40 // determine that |server_entry| should be dropped; if so, it returns 41 // the null ID -- callers must handle this case. When update application 42 // should proceed normally with a new local entry, this function will 43 // return server_entry.id(); the caller must create an entry with that 44 // ID. This function does not alter the database. 45 syncable::Id FindLocalIdToUpdate( 46 syncable::BaseTransaction* trans, 47 const sync_pb::SyncEntity& server_entry); 48 49 UpdateAttemptResponse AttemptToUpdateEntry( 50 syncable::WriteTransaction* const trans, 51 syncable::MutableEntry* const entry, 52 Cryptographer* cryptographer); 53 54 // Returns the most accurate position information available in this update. It 55 // prefers to use the unique_position() field, but will fall back to using the 56 // int64-based position_in_parent if necessary. 57 // 58 // The suffix parameter is the unique bookmark tag for the item being updated. 59 // 60 // Will return an invalid position if no valid position can be constructed, or 61 // if this type does not support positioning. 62 SYNC_EXPORT_PRIVATE UniquePosition GetUpdatePosition( 63 const sync_pb::SyncEntity& update, 64 const std::string& suffix); 65 66 // Fetch the cache_guid and item_id-based unique bookmark tag from an update. 67 // Will return an empty string if someting unexpected happens. 68 SYNC_EXPORT_PRIVATE std::string GetUniqueBookmarkTagFromUpdate( 69 const sync_pb::SyncEntity& update); 70 71 // Pass in name to avoid redundant UTF8 conversion. 72 void UpdateServerFieldsFromUpdate( 73 syncable::ModelNeutralMutableEntry* local_entry, 74 const sync_pb::SyncEntity& server_entry, 75 const std::string& name); 76 77 // Creates a new Entry iff no Entry exists with the given id. 78 void CreateNewEntry(syncable::ModelNeutralWriteTransaction *trans, 79 const syncable::Id& id); 80 81 // This function is called on an entry when we can update the user-facing data 82 // from the server data. 83 void UpdateLocalDataFromServerData(syncable::WriteTransaction* trans, 84 syncable::MutableEntry* entry); 85 86 VerifyCommitResult ValidateCommitEntry(syncable::Entry* entry); 87 88 VerifyResult VerifyNewEntry(const sync_pb::SyncEntity& update, 89 syncable::Entry* target, 90 const bool deleted); 91 92 // Assumes we have an existing entry; check here for updates that break 93 // consistency rules. 94 VerifyResult VerifyUpdateConsistency( 95 syncable::ModelNeutralWriteTransaction* trans, 96 const sync_pb::SyncEntity& update, 97 const bool deleted, 98 const bool is_directory, 99 ModelType model_type, 100 syncable::ModelNeutralMutableEntry* target); 101 102 // Assumes we have an existing entry; verify an update that seems to be 103 // expressing an 'undelete' 104 VerifyResult VerifyUndelete(syncable::ModelNeutralWriteTransaction* trans, 105 const sync_pb::SyncEntity& update, 106 syncable::ModelNeutralMutableEntry* target); 107 108 void MarkDeletedChildrenSynced( 109 syncable::Directory* dir, 110 syncable::BaseWriteTransaction* trans, 111 std::set<syncable::Id>* deleted_folders); 112 113 } // namespace syncer 114 115 #endif // SYNC_ENGINE_SYNCER_UTIL_H_ 116