Chromium Code Reviews| Index: chrome/browser/sync/engine/syncer_util.h |
| =================================================================== |
| --- chrome/browser/sync/engine/syncer_util.h (revision 0) |
| +++ chrome/browser/sync/engine/syncer_util.h (revision 0) |
| @@ -0,0 +1,206 @@ |
| +// Copyright (c) 2006-2008 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 CHROME_BROWSER_SYNC_ENGINE_SYNCER_UTIL_H_ |
| +#define CHROME_BROWSER_SYNC_ENGINE_SYNCER_UTIL_H_ |
| + |
| +#include <set> |
| +#include <string> |
| +#include <vector> |
| + |
| +#include "chrome/browser/sync/engine/syncer.h" |
| +#include "chrome/browser/sync/engine/syncer_types.h" |
| +#include "chrome/browser/sync/syncable/syncable_id.h" |
| +#include "chrome/browser/sync/syncable/syncable.h" |
| +#include "chrome/browser/sync/util/path_helpers.h" |
| +#include "chrome/browser/sync/util/sync_types.h" |
| + |
| +namespace browser_sync { |
| + |
| +class SyncerSession; |
| +class SyncEntity; |
| + |
|
idana
2009/09/10 05:44:37
Extra blank line.
|
| + |
| +class SyncerUtil { |
| + public: |
| + // TODO(ncarter): Remove unique-in-parent title support and name conflicts. |
| + static syncable::Id GetNameConflictingItemId( |
| + syncable::BaseTransaction* trans, |
| + const syncable::Id& parent_id, |
| + const PathString& server_name); |
| + |
| + static void ChangeEntryIDAndUpdateChildren( |
| + syncable::WriteTransaction* trans, |
| + syncable::MutableEntry* entry, |
| + const syncable::Id& new_id, |
| + syncable::Directory::ChildHandles* children); |
| + |
| + // Returns the number of unsynced entries. |
| + static int GetUnsyncedEntries(syncable::BaseTransaction* trans, |
| + std::vector<int64> *handles); |
| + |
| + static void ChangeEntryIDAndUpdateChildren(syncable::WriteTransaction* trans, |
| + syncable::MutableEntry* entry, |
| + const syncable::Id& new_id); |
| + |
| + static void AttemptReuniteLostCommitResponses( |
| + syncable::WriteTransaction* trans, |
| + const SyncEntity& server_entry, |
| + const std::string& client_id); |
| + |
| + static UpdateAttemptResponse AttemptToUpdateEntry( |
| + syncable::WriteTransaction* const trans, |
| + syncable::MutableEntry* const entry, |
| + SyncerSession* const session); |
| + |
| + static UpdateAttemptResponse AttemptToUpdateEntryWithoutMerge( |
| + syncable::WriteTransaction* const trans, |
| + syncable::MutableEntry* const entry, |
| + SyncerSession* const session, syncable::Id* const conflicting_id); |
| + |
| + // Pass in name to avoid redundant UTF8 conversion. |
| + static void UpdateServerFieldsFromUpdate( |
| + syncable::MutableEntry* local_entry, |
| + const SyncEntity& server_entry, |
| + const syncable::SyncName& name); |
| + |
| + static void ApplyExtendedAttributes( |
| + syncable::MutableEntry* local_entry, |
| + const SyncEntity& server_entry); |
| + |
| + // Creates a new Entry iff no Entry exists with the given id. |
| + static void CreateNewEntry(syncable::WriteTransaction *trans, |
| + const syncable::Id& id); |
| + |
| + static bool ServerAndLocalEntriesMatch(syncable::Entry* entry); |
| + |
| + static void SplitServerInformationIntoNewEntry( |
| + syncable::WriteTransaction* trans, |
| + syncable::MutableEntry* entry); |
| + |
| + // This function is called on an entry when we can update the user-facing data |
| + // from the server data. |
| + static void UpdateLocalDataFromServerData(syncable::WriteTransaction* trans, |
| + syncable::MutableEntry* entry); |
| + |
| + static VerifyCommitResult ValidateCommitEntry(syncable::MutableEntry* entry); |
| + |
| + static VerifyResult VerifyNewEntry(const SyncEntity& entry, |
| + syncable::MutableEntry* same_id, |
| + const bool deleted); |
| + |
| + // Assumes we have an existing entry; check here for updates that break |
| + // consistency rules. |
| + static VerifyResult VerifyUpdateConsistency(syncable::WriteTransaction* trans, |
| + const SyncEntity& entry, |
| + syncable::MutableEntry* same_id, |
| + const bool deleted, |
| + const bool is_directory, |
| + const bool is_bookmark); |
| + |
| + // Assumes we have an existing entry; verify an update that seems to be |
| + // expressing an 'undelete' |
| + static VerifyResult VerifyUndelete(syncable::WriteTransaction* trans, |
| + const SyncEntity& entry, |
| + syncable::MutableEntry* same_id); |
| + |
| + // Compute a local predecessor position for |update_item|. The position |
| + // is determined by the SERVER_POSITION_IN_PARENT value of |update_item|, |
| + // as well as the SERVER_POSITION_IN_PARENT values of any up-to-date |
| + // children of |parent_id|. |
| + static syncable::Id ComputePrevIdFromServerPosition( |
| + syncable::BaseTransaction* trans, |
| + syncable::Entry* update_item, |
| + const syncable::Id& parent_id); |
| + |
| + // Append |item|, followed by a chain of its predecessors selected by |
| + // |inclusion_filter|, to the |commit_ids| vector and tag them as included by |
| + // storing in the set |inserted_items|. |inclusion_filter| (typically one of |
| + // IS_UNAPPLIED_UPDATE or IS_UNSYNCED) selects which type of predecessors to |
| + // include. Returns true if |item| was added, and false if it was already in |
| + // the list. |
| + // |
| + // Use AddPredecessorsThenItem instead of this method if you want the |
| + // item to be the last, rather than first, item appended. |
| + static bool AddItemThenPredecessors( |
| + syncable::BaseTransaction* trans, |
| + syncable::Entry* item, |
| + syncable::IndexedBitField inclusion_filter, |
| + syncable::MetahandleSet* inserted_items, |
| + std::vector<syncable::Id>* commit_ids); |
| + |
| + // Exactly like AddItemThenPredecessors, except items are appended in the |
| + // reverse (and generally more useful) order: a chain of predecessors from |
| + // far to near, and finally the item. |
| + static void AddPredecessorsThenItem( |
| + syncable::BaseTransaction* trans, |
| + syncable::Entry* item, |
| + syncable::IndexedBitField inclusion_filter, |
| + syncable::MetahandleSet* inserted_items, |
| + std::vector<syncable::Id>* commit_ids); |
| + |
| + static void AddUncommittedParentsAndTheirPredecessors( |
| + syncable::BaseTransaction* trans, |
| + syncable::MetahandleSet* inserted_items, |
| + std::vector<syncable::Id>* commit_ids, |
| + syncable::Id parent_id); |
| + |
| + static void MarkDeletedChildrenSynced( |
| + const syncable::ScopedDirLookup &dir, |
| + std::set<syncable::Id>* deleted_folders); |
| + |
| + // Examine the up-to-date predecessors of this item according to the server |
| + // position, and then again according to the local position. Return true |
| + // if they match. For an up-to-date item, this should be the case. |
| + static bool ServerAndLocalOrdersMatch(syncable::Entry* entry); |
| + |
| + private: |
| + // Private ctor/dtor since this class shouldn't be instantiated. |
| + SyncerUtil() {} |
| + virtual ~SyncerUtil() {} |
| + DISALLOW_COPY_AND_ASSIGN(SyncerUtil); |
| +}; |
| + |
| +#ifndef OS_WINDOWS |
| + |
| +// time.h on Linux and Mac both return seconds since the epoch, this should |
| +// be converted to milliseconds. |
| +inline int64 ServerTimeToClientTime(int64 server_time) { |
| + return server_time / GG_LONGLONG(1000); |
| +} |
| + |
| +inline int64 ClientTimeToServerTime(int64 client_time) { |
| + return client_time * GG_LONGLONG(1000); |
| +} |
| + |
| +// As we truncate server times on the client for posix and on the server for |
| +// windows we need two ClientAndServerTimeMatch fucntions. |
| +inline bool ClientAndServerTimeMatch(int64 client_time, int64 server_time) { |
| + // Compare at the coarser timescale (client) |
| + return client_time == ServerTimeToClientTime(server_time); |
| +} |
| +#else |
| +// The sync server uses Java Times (ms since 1970) |
| +// and the client uses FILETIMEs (ns since 1601) so we need to convert |
| +// between the timescales. |
| +inline int64 ServerTimeToClientTime(int64 server_time) { |
| + return server_time * GG_LONGLONG(10000) + GG_LONGLONG(116444736000000000); |
| +} |
| + |
| +inline int64 ClientTimeToServerTime(int64 client_time) { |
| + return (client_time - GG_LONGLONG(116444736000000000)) / GG_LONGLONG(10000); |
| +} |
| + |
| +inline bool ClientAndServerTimeMatch(int64 client_time, int64 server_time) { |
| + // Compare at the coarser timescale (server) |
| + return ClientTimeToServerTime(client_time) == server_time; |
| +} |
| +#endif |
| + |
| +} // namespace browser_sync |
| + |
| +#endif // CHROME_BROWSER_SYNC_ENGINE_SYNCER_UTIL_H_ |
| Property changes on: chrome\browser\sync\engine\syncer_util.h |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |