summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sync/glue/model_associator.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/sync/glue/model_associator.h')
-rw-r--r--chrome/browser/sync/glue/model_associator.h130
1 files changed, 15 insertions, 115 deletions
diff --git a/chrome/browser/sync/glue/model_associator.h b/chrome/browser/sync/glue/model_associator.h
index e7d5c32..7e09be2 100644
--- a/chrome/browser/sync/glue/model_associator.h
+++ b/chrome/browser/sync/glue/model_associator.h
@@ -5,131 +5,31 @@
#ifndef CHROME_BROWSER_SYNC_GLUE_MODEL_ASSOCIATOR_H_
#define CHROME_BROWSER_SYNC_GLUE_MODEL_ASSOCIATOR_H_
-#include <map>
-#include <set>
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/ref_counted.h"
-#include "base/scoped_ptr.h"
-
-class BookmarkNode;
-
-namespace sync_api {
-class BaseNode;
-class BaseTransaction;
-class ReadNode;
-}
-
-class ProfileSyncService;
+#include "chrome/browser/sync/engine/syncapi.h"
namespace browser_sync {
-class ChangeProcessor;
-
-// Contains all model association 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 associations and loading them back.
-class ModelAssociator
- : public base::RefCountedThreadSafe<ModelAssociator> {
+// Contains all model association related logic to associate the chrome model
+// with the sync model.
+class ModelAssociator {
public:
- explicit ModelAssociator(ProfileSyncService* sync_service);
-
- // Clears all associations.
- void ClearAll();
+ virtual ~ModelAssociator() {}
- // 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;
-
- // 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);
-
- // 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);
-
- // Associates the given bookmark node with the given sync id.
- void Associate(const BookmarkNode* node, int64 sync_id);
- // Remove the association that corresponds to the given sync id.
- void Disassociate(int64 sync_id);
+ // Iterates through both the sync and the chrome model looking for matched
+ // pairs of items. 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.
+ virtual bool AssociateModels() = 0;
- // 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;
+ // Clears all the associations between the chrome and sync models.
+ virtual bool DisassociateModels() = 0;
// 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:
- friend class base::RefCountedThreadSafe<ModelAssociator>;
- virtual ~ModelAssociator() { }
-
- // 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 std::string& 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, const BookmarkNode*> SyncIdToBookmarkNodeMap;
- typedef std::set<int64> DirtyAssociationsSyncIds;
-
- // Posts a task to persist dirty associations.
- void PostPersistAssociationsTask();
- // Persists all dirty associations.
- void PersistAssociations();
-
- // Loads the persisted associations into in-memory maps.
- // If the persisted associations are out-of-date due to some reason, returns
- // false; otherwise returns true.
- bool LoadAssociations();
-
- // Matches up the bookmark model and the sync model to build model
- // associations.
- bool BuildAssociations();
-
- // 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 std::string& 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_;
- SyncIdToBookmarkNodeMap id_map_inverse_;
- // Stores sync ids for dirty associations.
- DirtyAssociationsSyncIds dirty_associations_sync_ids_;
-
- // Indicates whether there is already a pending task to persist dirty model
- // associations.
- bool task_pending_;
+ virtual bool SyncModelHasUserCreatedNodes() = 0;
- DISALLOW_COPY_AND_ASSIGN(ModelAssociator);
+ // Returns whether the chrome model has user-created nodes or not.
+ virtual bool ChromeModelHasUserCreatedNodes() = 0;
};
} // namespace browser_sync