Index: chrome/browser/sync/glue/model_associator.h |
=================================================================== |
--- chrome/browser/sync/glue/model_associator.h (revision 0) |
+++ chrome/browser/sync/glue/model_associator.h (revision 0) |
@@ -0,0 +1,141 @@ |
+// Copyright (c) 2006-2009 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. |
+ |
+#ifdef CHROME_PERSONALIZATION |
+ |
+#ifndef CHROME_BROWSER_SYNC_GLUE_MODEL_ASSOCATOR_H_ |
+#define CHROME_BROWSER_SYNC_GLUE_MODEL_ASSOCATOR_H_ |
+ |
+#include <map> |
+#include <set> |
+#include <string> |
+ |
+#include "base/basictypes.h" |
+#include "base/ref_counted.h" |
+#include "base/scoped_ptr.h" |
+#include "base/string16.h" |
+ |
+class BookmarkNode; |
+ |
+namespace sync_api { |
+class BaseNode; |
+class BaseTransaction; |
+class ReadNode; |
+} |
+ |
+class ProfileSyncService; |
+ |
+namespace browser_sync { |
+ |
+// Contains all model assocation related logic: |
+// * Algorithm to associate bookmark model and sync model. |
+// * Methods to get a bookmark node for a given sync node and vice versa. |
+// * Persisting model assocations and loading them back. |
+class ModelAssociator |
+ : public base::RefCountedThreadSafe<ModelAssociator> { |
+ public: |
+ explicit ModelAssociator(ProfileSyncService* sync_service); |
+ virtual ~ModelAssociator() { } |
+ |
+ // Clears all assocations. |
+ void ClearAll(); |
+ |
+ // Returns sync id for the given bookmark node id. |
+ // Returns sync_api::kInvalidId if the sync node is not found for the given |
+ // bookmark node id. |
+ int64 GetSyncIdFromBookmarkId(int64 node_id) const; |
+ |
+ // Stores bookmark node id for the given sync id in bookmark_id. Returns true |
+ // if the bookmark id was successfully found; false otherwise. |
+ bool GetBookmarkIdFromSyncId(int64 sync_id, int64* bookmark_id) const; |
+ |
+ // Initializes the given sync node from the given bookmark node id. |
+ // Returns false if no sync node was found for the given bookmark node id or |
+ // if the initialization of sync node fails. |
+ bool InitSyncNodeFromBookmarkId(int64 node_id, sync_api::BaseNode* sync_node); |
+ |
+ // Returns the bookmark node for the given sync id. |
+ // Returns NULL if no bookmark node is found for the given sync id. |
+ const BookmarkNode* GetBookmarkNodeFromSyncId(int64 sync_id); |
+ |
+ // Associates the given bookmark node id with the given sync id. |
+ void AssociateIds(int64 node_id, int64 sync_id); |
+ // Disassociate the ids that correspond to the given sync id. |
+ void DisassociateIds(int64 sync_id); |
+ |
+ // Returns whether the bookmark model has user created nodes or not. That is, |
+ // whether there are nodes in the bookmark model except the bookmark bar and |
+ // other bookmarks. |
+ bool BookmarkModelHasUserCreatedNodes() const; |
+ |
+ // Returns whether the sync model has nodes other than the permanent tagged |
+ // nodes. |
+ bool SyncModelHasUserCreatedNodes(); |
+ |
+ // AssociateModels iterates through both the sync and the browser |
+ // bookmark model, looking for matched pairs of items. For any pairs it |
+ // finds, it will call AssociateSyncID. For any unmatched items, |
+ // MergeAndAssociateModels will try to repair the match, e.g. by adding a new |
+ // node. After successful completion, the models should be identical and |
+ // corresponding. Returns true on success. On failure of this step, we |
+ // should abort the sync operation and report an error to the user. |
+ bool AssociateModels(); |
+ |
+ protected: |
+ // Stores the id of the node with the given tag in |sync_id|. |
+ // Returns of that node was found successfully. |
+ // Tests override this. |
+ virtual bool GetSyncIdForTaggedNode(const string16& tag, int64* sync_id); |
+ |
+ // Returns sync service instance. |
+ ProfileSyncService* sync_service() { return sync_service_; } |
+ |
+ private: |
+ typedef std::map<int64, int64> BookmarkIdToSyncIdMap; |
+ typedef std::map<int64, int64> SyncIdToBookmarkIdMap; |
+ typedef std::set<int64> DirtyAssocationsSyncIds; |
+ |
+ // Posts a task to persist dirty assocations. |
+ void PostPersistAssociationsTask(); |
+ // Persists all dirty assocations. |
+ void PersistAssociations(); |
+ |
+ // Loads the persisted assocations into in-memory maps. |
+ // If the persisted associations are out-of-date due to some reason, returns |
+ // false; otehrwise returns true. |
+ bool LoadAssociations(); |
+ |
+ // Matches up the bookmark model and the sync model to build model |
+ // assocations. |
+ bool BuildAssocations(); |
+ |
+ // Associate a top-level node of the bookmark model with a permanent node in |
+ // the sync domain. Such permanent nodes are identified by a tag that is |
+ // well known to the server and the client, and is unique within a particular |
+ // user's share. For example, "other_bookmarks" is the tag for the Other |
+ // Bookmarks folder. The sync nodes are server-created. |
+ bool AssociateTaggedPermanentNode(const BookmarkNode* permanent_node, |
+ const string16& tag); |
+ |
+ // Compare the properties of a pair of nodes from either domain. |
+ bool NodesMatch(const BookmarkNode* bookmark, |
+ const sync_api::BaseNode* sync_node) const; |
+ |
+ ProfileSyncService* sync_service_; |
+ BookmarkIdToSyncIdMap id_map_; |
+ SyncIdToBookmarkIdMap id_map_inverse_; |
+ // Stores sync ids for dirty associations. |
+ DirtyAssocationsSyncIds dirty_assocations_sync_ids_; |
+ |
+ // Indicates whether there is already a pending task to persist dirty model |
+ // associations. |
+ bool task_pending_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ModelAssociator); |
+}; |
+ |
+} // namespace browser_sync |
+ |
+#endif // CHROME_BROWSER_SYNC_GLUE_MODEL_ASSOCATOR_H_ |
+#endif // CHROME_PERSONALIZATION |
Property changes on: chrome\browser\sync\glue\model_associator.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |