Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(871)

Side by Side Diff: components/sync_bookmarks/bookmark_model_associator.h

Issue 1549993003: Switch to standard integer types in components/, part 4 of 4. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_MODEL_ASSOCIATOR_H_ 5 #ifndef COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_MODEL_ASSOCIATOR_H_
6 #define COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_MODEL_ASSOCIATOR_H_ 6 #define COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_MODEL_ASSOCIATOR_H_
7 7
8 #include <stddef.h>
9 #include <stdint.h>
10
8 #include <map> 11 #include <map>
9 #include <set> 12 #include <set>
10 #include <stack> 13 #include <stack>
11 #include <string> 14 #include <string>
12 #include <vector> 15 #include <vector>
13 16
14 #include "base/basictypes.h"
15 #include "base/compiler_specific.h" 17 #include "base/compiler_specific.h"
16 #include "base/hash.h" 18 #include "base/hash.h"
19 #include "base/macros.h"
17 #include "base/memory/weak_ptr.h" 20 #include "base/memory/weak_ptr.h"
18 #include "base/threading/thread_checker.h" 21 #include "base/threading/thread_checker.h"
19 #include "components/sync_driver/data_type_error_handler.h" 22 #include "components/sync_driver/data_type_error_handler.h"
20 #include "components/sync_driver/model_associator.h" 23 #include "components/sync_driver/model_associator.h"
21 #include "sync/internal_api/public/util/unrecoverable_error_handler.h" 24 #include "sync/internal_api/public/util/unrecoverable_error_handler.h"
22 25
23 class GURL; 26 class GURL;
24 27
25 namespace bookmarks { 28 namespace bookmarks {
26 class BookmarkModel; 29 class BookmarkModel;
(...skipping 12 matching lines...) Expand all
39 } 42 }
40 43
41 namespace browser_sync { 44 namespace browser_sync {
42 45
43 // Contains all model association related logic: 46 // Contains all model association related logic:
44 // * Algorithm to associate bookmark model and sync model. 47 // * Algorithm to associate bookmark model and sync model.
45 // * Methods to get a bookmark node for a given sync node and vice versa. 48 // * Methods to get a bookmark node for a given sync node and vice versa.
46 // * Persisting model associations and loading them back. 49 // * Persisting model associations and loading them back.
47 class BookmarkModelAssociator 50 class BookmarkModelAssociator
48 : public sync_driver:: 51 : public sync_driver::
49 PerDataTypeAssociatorInterface<bookmarks::BookmarkNode, int64> { 52 PerDataTypeAssociatorInterface<bookmarks::BookmarkNode, int64_t> {
50 public: 53 public:
51 static syncer::ModelType model_type() { return syncer::BOOKMARKS; } 54 static syncer::ModelType model_type() { return syncer::BOOKMARKS; }
52 // |expect_mobile_bookmarks_folder| controls whether or not we 55 // |expect_mobile_bookmarks_folder| controls whether or not we
53 // expect the mobile bookmarks permanent folder to be created. 56 // expect the mobile bookmarks permanent folder to be created.
54 // Should be set to true only by mobile clients. 57 // Should be set to true only by mobile clients.
55 BookmarkModelAssociator( 58 BookmarkModelAssociator(
56 bookmarks::BookmarkModel* bookmark_model, 59 bookmarks::BookmarkModel* bookmark_model,
57 sync_driver::SyncClient* sync_client, 60 sync_driver::SyncClient* sync_client,
58 syncer::UserShare* user_share, 61 syncer::UserShare* user_share,
59 sync_driver::DataTypeErrorHandler* unrecoverable_error_handler, 62 sync_driver::DataTypeErrorHandler* unrecoverable_error_handler,
(...skipping 15 matching lines...) Expand all
75 78
76 syncer::SyncError DisassociateModels() override; 79 syncer::SyncError DisassociateModels() override;
77 80
78 // The has_nodes out param is true if the sync model has nodes other 81 // The has_nodes out param is true if the sync model has nodes other
79 // than the permanent tagged nodes. 82 // than the permanent tagged nodes.
80 bool SyncModelHasUserCreatedNodes(bool* has_nodes) override; 83 bool SyncModelHasUserCreatedNodes(bool* has_nodes) override;
81 84
82 // Returns sync id for the given bookmark node id. 85 // Returns sync id for the given bookmark node id.
83 // Returns syncer::kInvalidId if the sync node is not found for the given 86 // Returns syncer::kInvalidId if the sync node is not found for the given
84 // bookmark node id. 87 // bookmark node id.
85 int64 GetSyncIdFromChromeId(const int64& node_id) override; 88 int64_t GetSyncIdFromChromeId(const int64_t& node_id) override;
86 89
87 // Returns the bookmark node for the given sync id. 90 // Returns the bookmark node for the given sync id.
88 // Returns NULL if no bookmark node is found for the given sync id. 91 // Returns NULL if no bookmark node is found for the given sync id.
89 const bookmarks::BookmarkNode* GetChromeNodeFromSyncId( 92 const bookmarks::BookmarkNode* GetChromeNodeFromSyncId(
90 int64 sync_id) override; 93 int64_t sync_id) override;
91 94
92 // Initializes the given sync node from the given bookmark node id. 95 // Initializes the given sync node from the given bookmark node id.
93 // Returns false if no sync node was found for the given bookmark node id or 96 // Returns false if no sync node was found for the given bookmark node id or
94 // if the initialization of sync node fails. 97 // if the initialization of sync node fails.
95 bool InitSyncNodeFromChromeId(const int64& node_id, 98 bool InitSyncNodeFromChromeId(const int64_t& node_id,
96 syncer::BaseNode* sync_node) override; 99 syncer::BaseNode* sync_node) override;
97 100
98 // Associates the given bookmark node with the given sync node. 101 // Associates the given bookmark node with the given sync node.
99 void Associate(const bookmarks::BookmarkNode* node, 102 void Associate(const bookmarks::BookmarkNode* node,
100 const syncer::BaseNode& sync_node) override; 103 const syncer::BaseNode& sync_node) override;
101 // Remove the association that corresponds to the given sync id. 104 // Remove the association that corresponds to the given sync id.
102 void Disassociate(int64 sync_id) override; 105 void Disassociate(int64_t sync_id) override;
103 106
104 void AbortAssociation() override { 107 void AbortAssociation() override {
105 // No implementation needed, this associator runs on the main 108 // No implementation needed, this associator runs on the main
106 // thread. 109 // thread.
107 } 110 }
108 111
109 // See ModelAssociator interface. 112 // See ModelAssociator interface.
110 bool CryptoReadyIfNecessary() override; 113 bool CryptoReadyIfNecessary() override;
111 114
112 private: 115 private:
113 typedef std::map<int64, int64> BookmarkIdToSyncIdMap; 116 typedef std::map<int64_t, int64_t> BookmarkIdToSyncIdMap;
114 typedef std::map<int64, const bookmarks::BookmarkNode*> 117 typedef std::map<int64_t, const bookmarks::BookmarkNode*>
115 SyncIdToBookmarkNodeMap; 118 SyncIdToBookmarkNodeMap;
116 typedef std::set<int64> DirtyAssociationsSyncIds; 119 typedef std::set<int64_t> DirtyAssociationsSyncIds;
117 typedef std::vector<const bookmarks::BookmarkNode*> BookmarkList; 120 typedef std::vector<const bookmarks::BookmarkNode*> BookmarkList;
118 typedef std::stack<const bookmarks::BookmarkNode*> BookmarkStack; 121 typedef std::stack<const bookmarks::BookmarkNode*> BookmarkStack;
119 122
120 // Add association between native node and sync node to the maps. 123 // Add association between native node and sync node to the maps.
121 void AddAssociation(const bookmarks::BookmarkNode* node, int64 sync_id); 124 void AddAssociation(const bookmarks::BookmarkNode* node, int64_t sync_id);
122 125
123 // Posts a task to persist dirty associations. 126 // Posts a task to persist dirty associations.
124 void PostPersistAssociationsTask(); 127 void PostPersistAssociationsTask();
125 // Persists all dirty associations. 128 // Persists all dirty associations.
126 void PersistAssociations(); 129 void PersistAssociations();
127 130
128 // Result of the native model version check against the sync 131 // Result of the native model version check against the sync
129 // version performed by CheckModelSyncState. 132 // version performed by CheckModelSyncState.
130 enum NativeModelSyncState { 133 enum NativeModelSyncState {
131 // The native version is syncer::syncable::kInvalidTransactionVersion, 134 // The native version is syncer::syncable::kInvalidTransactionVersion,
(...skipping 15 matching lines...) Expand all
147 150
148 // Helper class used within AssociateModels to simplify the logic and 151 // Helper class used within AssociateModels to simplify the logic and
149 // minimize the number of arguments passed between private functions. 152 // minimize the number of arguments passed between private functions.
150 class Context { 153 class Context {
151 public: 154 public:
152 Context(syncer::SyncMergeResult* local_merge_result, 155 Context(syncer::SyncMergeResult* local_merge_result,
153 syncer::SyncMergeResult* syncer_merge_result); 156 syncer::SyncMergeResult* syncer_merge_result);
154 ~Context(); 157 ~Context();
155 158
156 // Push a sync node to the DFS stack. 159 // Push a sync node to the DFS stack.
157 void PushNode(int64 sync_id); 160 void PushNode(int64_t sync_id);
158 // Pops a sync node from the DFS stack. Returns false if the stack 161 // Pops a sync node from the DFS stack. Returns false if the stack
159 // is empty. 162 // is empty.
160 bool PopNode(int64* sync_id); 163 bool PopNode(int64_t* sync_id);
161 164
162 // The following methods are used to update |local_merge_result_| and 165 // The following methods are used to update |local_merge_result_| and
163 // |syncer_merge_result_|. 166 // |syncer_merge_result_|.
164 void SetPreAssociationVersions(int64 native_version, int64 sync_version); 167 void SetPreAssociationVersions(int64_t native_version,
168 int64_t sync_version);
165 void SetNumItemsBeforeAssociation(int local_num, int sync_num); 169 void SetNumItemsBeforeAssociation(int local_num, int sync_num);
166 void SetNumItemsAfterAssociation(int local_num, int sync_num); 170 void SetNumItemsAfterAssociation(int local_num, int sync_num);
167 void IncrementLocalItemsDeleted(); 171 void IncrementLocalItemsDeleted();
168 void IncrementLocalItemsAdded(); 172 void IncrementLocalItemsAdded();
169 void IncrementLocalItemsModified(); 173 void IncrementLocalItemsModified();
170 void IncrementSyncItemsAdded(); 174 void IncrementSyncItemsAdded();
171 void IncrementSyncItemsDeleted(int count); 175 void IncrementSyncItemsDeleted(int count);
172 176
173 void UpdateDuplicateCount(const base::string16& title, const GURL& url); 177 void UpdateDuplicateCount(const base::string16& title, const GURL& url);
174 178
175 int duplicate_count() const { return duplicate_count_; } 179 int duplicate_count() const { return duplicate_count_; }
176 180
177 NativeModelSyncState native_model_sync_state() const { 181 NativeModelSyncState native_model_sync_state() const {
178 return native_model_sync_state_; 182 return native_model_sync_state_;
179 } 183 }
180 void set_native_model_sync_state(NativeModelSyncState state) { 184 void set_native_model_sync_state(NativeModelSyncState state) {
181 native_model_sync_state_ = state; 185 native_model_sync_state_ = state;
182 } 186 }
183 187
184 // Bookmark roots participating in the sync. 188 // Bookmark roots participating in the sync.
185 void AddBookmarkRoot(const bookmarks::BookmarkNode* root); 189 void AddBookmarkRoot(const bookmarks::BookmarkNode* root);
186 const BookmarkList& bookmark_roots() const { return bookmark_roots_; } 190 const BookmarkList& bookmark_roots() const { return bookmark_roots_; }
187 191
188 // Gets pre-association sync version for Bookmarks datatype. 192 // Gets pre-association sync version for Bookmarks datatype.
189 int64 GetSyncPreAssociationVersion() const; 193 int64_t GetSyncPreAssociationVersion() const;
190 194
191 void MarkForVersionUpdate(const bookmarks::BookmarkNode* node); 195 void MarkForVersionUpdate(const bookmarks::BookmarkNode* node);
192 const BookmarkList& bookmarks_for_version_update() const { 196 const BookmarkList& bookmarks_for_version_update() const {
193 return bookmarks_for_version_update_; 197 return bookmarks_for_version_update_;
194 } 198 }
195 199
196 private: 200 private:
197 // DFS stack of sync nodes traversed during association. 201 // DFS stack of sync nodes traversed during association.
198 std::stack<int64> dfs_stack_; 202 std::stack<int64_t> dfs_stack_;
199 // Local and merge results are not owned. 203 // Local and merge results are not owned.
200 syncer::SyncMergeResult* local_merge_result_; 204 syncer::SyncMergeResult* local_merge_result_;
201 syncer::SyncMergeResult* syncer_merge_result_; 205 syncer::SyncMergeResult* syncer_merge_result_;
202 // |hashes_| contains hash codes of all native bookmarks 206 // |hashes_| contains hash codes of all native bookmarks
203 // for the purpose of detecting duplicates. A small number of 207 // for the purpose of detecting duplicates. A small number of
204 // false positives due to hash collisions is OK because this 208 // false positives due to hash collisions is OK because this
205 // data is used for reporting purposes only. 209 // data is used for reporting purposes only.
206 base::hash_set<size_t> hashes_; 210 base::hash_set<size_t> hashes_;
207 // Overall number of bookmark collisions from RecordDuplicates call. 211 // Overall number of bookmark collisions from RecordDuplicates call.
208 int duplicate_count_; 212 int duplicate_count_;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 // according to sync delete journals. 259 // according to sync delete journals.
256 void ApplyDeletesFromSyncJournal(syncer::BaseTransaction* trans, 260 void ApplyDeletesFromSyncJournal(syncer::BaseTransaction* trans,
257 Context* context); 261 Context* context);
258 262
259 // The main part of the association process that associatiates 263 // The main part of the association process that associatiates
260 // native nodes that are children of |parent_node| with sync nodes with IDs 264 // native nodes that are children of |parent_node| with sync nodes with IDs
261 // from |sync_ids|. 265 // from |sync_ids|.
262 syncer::SyncError BuildAssociations( 266 syncer::SyncError BuildAssociations(
263 syncer::WriteTransaction* trans, 267 syncer::WriteTransaction* trans,
264 const bookmarks::BookmarkNode* parent_node, 268 const bookmarks::BookmarkNode* parent_node,
265 const std::vector<int64>& sync_ids, 269 const std::vector<int64_t>& sync_ids,
266 Context* context); 270 Context* context);
267 271
268 // Helper method for creating a new native bookmark node. 272 // Helper method for creating a new native bookmark node.
269 const bookmarks::BookmarkNode* CreateBookmarkNode( 273 const bookmarks::BookmarkNode* CreateBookmarkNode(
270 const bookmarks::BookmarkNode* parent_node, 274 const bookmarks::BookmarkNode* parent_node,
271 int bookmark_index, 275 int bookmark_index,
272 const syncer::BaseNode* sync_child_node, 276 const syncer::BaseNode* sync_child_node,
273 const GURL& url, 277 const GURL& url,
274 Context* context, 278 Context* context,
275 syncer::SyncError* error); 279 syncer::SyncError* error);
276 280
277 // Helper method for deleting a sync node and all its children. 281 // Helper method for deleting a sync node and all its children.
278 // Returns the number of sync nodes deleted. 282 // Returns the number of sync nodes deleted.
279 int RemoveSyncNodeHierarchy(syncer::WriteTransaction* trans, int64 sync_id); 283 int RemoveSyncNodeHierarchy(syncer::WriteTransaction* trans, int64_t sync_id);
280 284
281 // Check whether bookmark model and sync model are synced by comparing 285 // Check whether bookmark model and sync model are synced by comparing
282 // their transaction versions. 286 // their transaction versions.
283 // Returns a PERSISTENCE_ERROR if a transaction mismatch was detected where 287 // Returns a PERSISTENCE_ERROR if a transaction mismatch was detected where
284 // the native model has a newer transaction verison. 288 // the native model has a newer transaction verison.
285 syncer::SyncError CheckModelSyncState(Context* context) const; 289 syncer::SyncError CheckModelSyncState(Context* context) const;
286 290
287 base::ThreadChecker thread_checker_; 291 base::ThreadChecker thread_checker_;
288 bookmarks::BookmarkModel* bookmark_model_; 292 bookmarks::BookmarkModel* bookmark_model_;
289 sync_driver::SyncClient* sync_client_; 293 sync_driver::SyncClient* sync_client_;
290 syncer::UserShare* user_share_; 294 syncer::UserShare* user_share_;
291 sync_driver::DataTypeErrorHandler* unrecoverable_error_handler_; 295 sync_driver::DataTypeErrorHandler* unrecoverable_error_handler_;
292 const bool expect_mobile_bookmarks_folder_; 296 const bool expect_mobile_bookmarks_folder_;
293 BookmarkIdToSyncIdMap id_map_; 297 BookmarkIdToSyncIdMap id_map_;
294 SyncIdToBookmarkNodeMap id_map_inverse_; 298 SyncIdToBookmarkNodeMap id_map_inverse_;
295 // Stores sync ids for dirty associations. 299 // Stores sync ids for dirty associations.
296 DirtyAssociationsSyncIds dirty_associations_sync_ids_; 300 DirtyAssociationsSyncIds dirty_associations_sync_ids_;
297 301
298 // Used to post PersistAssociation tasks to the current message loop and 302 // Used to post PersistAssociation tasks to the current message loop and
299 // guarantees no invocations can occur if |this| has been deleted. (This 303 // guarantees no invocations can occur if |this| has been deleted. (This
300 // allows this class to be non-refcounted). 304 // allows this class to be non-refcounted).
301 base::WeakPtrFactory<BookmarkModelAssociator> weak_factory_; 305 base::WeakPtrFactory<BookmarkModelAssociator> weak_factory_;
302 306
303 DISALLOW_COPY_AND_ASSIGN(BookmarkModelAssociator); 307 DISALLOW_COPY_AND_ASSIGN(BookmarkModelAssociator);
304 }; 308 };
305 309
306 } // namespace browser_sync 310 } // namespace browser_sync
307 311
308 #endif // COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_MODEL_ASSOCIATOR_H_ 312 #endif // COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_MODEL_ASSOCIATOR_H_
OLDNEW
« no previous file with comments | « components/sync_bookmarks/bookmark_data_type_controller.h ('k') | components/sync_bookmarks/bookmark_model_associator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698