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

Side by Side Diff: components/bookmarks/browser/bookmark_model.cc

Issue 2425603005: components/bookmarks: convert usage of FOR_EACH_OBSERVER macro (Closed)
Patch Set: BookmarkMetaInfoChanged Created 4 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 #include "components/bookmarks/browser/bookmark_model.h" 5 #include "components/bookmarks/browser/bookmark_model.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 loaded_signal_(base::WaitableEvent::ResetPolicy::MANUAL, 122 loaded_signal_(base::WaitableEvent::ResetPolicy::MANUAL,
123 base::WaitableEvent::InitialState::NOT_SIGNALED), 123 base::WaitableEvent::InitialState::NOT_SIGNALED),
124 extensive_changes_(0), 124 extensive_changes_(0),
125 undo_delegate_(nullptr), 125 undo_delegate_(nullptr),
126 empty_undo_delegate_(new EmptyUndoDelegate) { 126 empty_undo_delegate_(new EmptyUndoDelegate) {
127 DCHECK(client_); 127 DCHECK(client_);
128 client_->Init(this); 128 client_->Init(this);
129 } 129 }
130 130
131 BookmarkModel::~BookmarkModel() { 131 BookmarkModel::~BookmarkModel() {
132 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 132 for (BookmarkModelObserver& observer : observers_)
133 BookmarkModelBeingDeleted(this)); 133 observer.BookmarkModelBeingDeleted(this);
134 134
135 if (store_.get()) { 135 if (store_.get()) {
136 // The store maintains a reference back to us. We need to tell it we're gone 136 // The store maintains a reference back to us. We need to tell it we're gone
137 // so that it doesn't try and invoke a method back on us again. 137 // so that it doesn't try and invoke a method back on us again.
138 store_->BookmarkModelDeleted(); 138 store_->BookmarkModelDeleted();
139 } 139 }
140 } 140 }
141 141
142 void BookmarkModel::Shutdown() { 142 void BookmarkModel::Shutdown() {
143 if (loaded_) 143 if (loaded_)
(...skipping 27 matching lines...) Expand all
171 void BookmarkModel::AddObserver(BookmarkModelObserver* observer) { 171 void BookmarkModel::AddObserver(BookmarkModelObserver* observer) {
172 observers_.AddObserver(observer); 172 observers_.AddObserver(observer);
173 } 173 }
174 174
175 void BookmarkModel::RemoveObserver(BookmarkModelObserver* observer) { 175 void BookmarkModel::RemoveObserver(BookmarkModelObserver* observer) {
176 observers_.RemoveObserver(observer); 176 observers_.RemoveObserver(observer);
177 } 177 }
178 178
179 void BookmarkModel::BeginExtensiveChanges() { 179 void BookmarkModel::BeginExtensiveChanges() {
180 if (++extensive_changes_ == 1) { 180 if (++extensive_changes_ == 1) {
181 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 181 for (BookmarkModelObserver& observer : observers_)
182 ExtensiveBookmarkChangesBeginning(this)); 182 observer.ExtensiveBookmarkChangesBeginning(this);
183 } 183 }
184 } 184 }
185 185
186 void BookmarkModel::EndExtensiveChanges() { 186 void BookmarkModel::EndExtensiveChanges() {
187 --extensive_changes_; 187 --extensive_changes_;
188 DCHECK_GE(extensive_changes_, 0); 188 DCHECK_GE(extensive_changes_, 0);
189 if (extensive_changes_ == 0) { 189 if (extensive_changes_ == 0) {
190 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 190 for (BookmarkModelObserver& observer : observers_)
191 ExtensiveBookmarkChangesEnded(this)); 191 observer.ExtensiveBookmarkChangesEnded(this);
192 } 192 }
193 } 193 }
194 194
195 void BookmarkModel::BeginGroupedChanges() { 195 void BookmarkModel::BeginGroupedChanges() {
196 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 196 for (BookmarkModelObserver& observer : observers_)
197 GroupedBookmarkChangesBeginning(this)); 197 observer.GroupedBookmarkChangesBeginning(this);
198 } 198 }
199 199
200 void BookmarkModel::EndGroupedChanges() { 200 void BookmarkModel::EndGroupedChanges() {
201 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 201 for (BookmarkModelObserver& observer : observers_)
202 GroupedBookmarkChangesEnded(this)); 202 observer.GroupedBookmarkChangesEnded(this);
203 } 203 }
204 204
205 void BookmarkModel::Remove(const BookmarkNode* node) { 205 void BookmarkModel::Remove(const BookmarkNode* node) {
206 DCHECK(loaded_); 206 DCHECK(loaded_);
207 DCHECK(node); 207 DCHECK(node);
208 DCHECK(!is_root_node(node)); 208 DCHECK(!is_root_node(node));
209 RemoveAndDeleteNode(AsMutable(node)); 209 RemoveAndDeleteNode(AsMutable(node));
210 } 210 }
211 211
212 void BookmarkModel::RemoveAllUserBookmarks() { 212 void BookmarkModel::RemoveAllUserBookmarks() {
213 std::set<GURL> removed_urls; 213 std::set<GURL> removed_urls;
214 struct RemoveNodeData { 214 struct RemoveNodeData {
215 const BookmarkNode* parent; 215 const BookmarkNode* parent;
216 int index; 216 int index;
217 std::unique_ptr<BookmarkNode> node; 217 std::unique_ptr<BookmarkNode> node;
218 }; 218 };
219 std::vector<RemoveNodeData> removed_node_data_list; 219 std::vector<RemoveNodeData> removed_node_data_list;
220 220
221 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 221 for (BookmarkModelObserver& observer : observers_)
222 OnWillRemoveAllUserBookmarks(this)); 222 observer.OnWillRemoveAllUserBookmarks(this);
223 223
224 BeginExtensiveChanges(); 224 BeginExtensiveChanges();
225 // Skip deleting permanent nodes. Permanent bookmark nodes are the root and 225 // Skip deleting permanent nodes. Permanent bookmark nodes are the root and
226 // its immediate children. For removing all non permanent nodes just remove 226 // its immediate children. For removing all non permanent nodes just remove
227 // all children of non-root permanent nodes. 227 // all children of non-root permanent nodes.
228 { 228 {
229 base::AutoLock url_lock(url_lock_); 229 base::AutoLock url_lock(url_lock_);
230 for (int i = 0; i < root_.child_count(); ++i) { 230 for (int i = 0; i < root_.child_count(); ++i) {
231 const BookmarkNode* permanent_node = root_.GetChild(i); 231 const BookmarkNode* permanent_node = root_.GetChild(i);
232 232
233 if (!client_->CanBeEditedByUser(permanent_node)) 233 if (!client_->CanBeEditedByUser(permanent_node))
234 continue; 234 continue;
235 235
236 for (int j = permanent_node->child_count() - 1; j >= 0; --j) { 236 for (int j = permanent_node->child_count() - 1; j >= 0; --j) {
237 std::unique_ptr<BookmarkNode> node = RemoveNodeAndGetRemovedUrls( 237 std::unique_ptr<BookmarkNode> node = RemoveNodeAndGetRemovedUrls(
238 AsMutable(permanent_node->GetChild(j)), &removed_urls); 238 AsMutable(permanent_node->GetChild(j)), &removed_urls);
239 removed_node_data_list.push_back({permanent_node, j, std::move(node)}); 239 removed_node_data_list.push_back({permanent_node, j, std::move(node)});
240 } 240 }
241 } 241 }
242 } 242 }
243 EndExtensiveChanges(); 243 EndExtensiveChanges();
244 if (store_.get()) 244 if (store_.get())
245 store_->ScheduleSave(); 245 store_->ScheduleSave();
246 246
247 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 247 for (BookmarkModelObserver& observer : observers_)
248 BookmarkAllUserNodesRemoved(this, removed_urls)); 248 observer.BookmarkAllUserNodesRemoved(this, removed_urls);
249 249
250 BeginGroupedChanges(); 250 BeginGroupedChanges();
251 for (auto& removed_node_data : removed_node_data_list) { 251 for (auto& removed_node_data : removed_node_data_list) {
252 undo_delegate()->OnBookmarkNodeRemoved(this, removed_node_data.parent, 252 undo_delegate()->OnBookmarkNodeRemoved(this, removed_node_data.parent,
253 removed_node_data.index, 253 removed_node_data.index,
254 std::move(removed_node_data.node)); 254 std::move(removed_node_data.node));
255 } 255 }
256 EndGroupedChanges(); 256 EndGroupedChanges();
257 } 257 }
258 258
(...skipping 28 matching lines...) Expand all
287 287
288 BookmarkNode* mutable_old_parent = AsMutable(old_parent); 288 BookmarkNode* mutable_old_parent = AsMutable(old_parent);
289 std::unique_ptr<BookmarkNode> owned_node = 289 std::unique_ptr<BookmarkNode> owned_node =
290 mutable_old_parent->Remove(AsMutable(node)); 290 mutable_old_parent->Remove(AsMutable(node));
291 BookmarkNode* mutable_new_parent = AsMutable(new_parent); 291 BookmarkNode* mutable_new_parent = AsMutable(new_parent);
292 mutable_new_parent->Add(std::move(owned_node), index); 292 mutable_new_parent->Add(std::move(owned_node), index);
293 293
294 if (store_.get()) 294 if (store_.get())
295 store_->ScheduleSave(); 295 store_->ScheduleSave();
296 296
297 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 297 for (BookmarkModelObserver& observer : observers_)
298 BookmarkNodeMoved(this, old_parent, old_index, 298 observer.BookmarkNodeMoved(this, old_parent, old_index, new_parent, index);
299 new_parent, index));
300 } 299 }
301 300
302 void BookmarkModel::Copy(const BookmarkNode* node, 301 void BookmarkModel::Copy(const BookmarkNode* node,
303 const BookmarkNode* new_parent, 302 const BookmarkNode* new_parent,
304 int index) { 303 int index) {
305 if (!loaded_ || !node || !IsValidIndex(new_parent, index, true) || 304 if (!loaded_ || !node || !IsValidIndex(new_parent, index, true) ||
306 is_root_node(new_parent) || is_permanent_node(node)) { 305 is_root_node(new_parent) || is_permanent_node(node)) {
307 NOTREACHED(); 306 NOTREACHED();
308 return; 307 return;
309 } 308 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 DCHECK(node); 344 DCHECK(node);
346 345
347 if (node->GetTitle() == title) 346 if (node->GetTitle() == title)
348 return; 347 return;
349 348
350 if (is_permanent_node(node) && !client_->CanSetPermanentNodeTitle(node)) { 349 if (is_permanent_node(node) && !client_->CanSetPermanentNodeTitle(node)) {
351 NOTREACHED(); 350 NOTREACHED();
352 return; 351 return;
353 } 352 }
354 353
355 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 354 for (BookmarkModelObserver& observer : observers_)
356 OnWillChangeBookmarkNode(this, node)); 355 observer.OnWillChangeBookmarkNode(this, node);
357 356
358 // The title index doesn't support changing the title, instead we remove then 357 // The title index doesn't support changing the title, instead we remove then
359 // add it back. 358 // add it back.
360 index_->Remove(node); 359 index_->Remove(node);
361 AsMutable(node)->SetTitle(title); 360 AsMutable(node)->SetTitle(title);
362 index_->Add(node); 361 index_->Add(node);
363 362
364 if (store_.get()) 363 if (store_.get())
365 store_->ScheduleSave(); 364 store_->ScheduleSave();
366 365
367 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 366 for (BookmarkModelObserver& observer : observers_)
368 BookmarkNodeChanged(this, node)); 367 observer.BookmarkNodeChanged(this, node);
369 } 368 }
370 369
371 void BookmarkModel::SetURL(const BookmarkNode* node, const GURL& url) { 370 void BookmarkModel::SetURL(const BookmarkNode* node, const GURL& url) {
372 DCHECK(node && !node->is_folder()); 371 DCHECK(node && !node->is_folder());
373 372
374 if (node->url() == url) 373 if (node->url() == url)
375 return; 374 return;
376 375
377 BookmarkNode* mutable_node = AsMutable(node); 376 BookmarkNode* mutable_node = AsMutable(node);
378 mutable_node->InvalidateFavicon(); 377 mutable_node->InvalidateFavicon();
379 CancelPendingFaviconLoadRequests(mutable_node); 378 CancelPendingFaviconLoadRequests(mutable_node);
380 379
381 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 380 for (BookmarkModelObserver& observer : observers_)
382 OnWillChangeBookmarkNode(this, node)); 381 observer.OnWillChangeBookmarkNode(this, node);
383 382
384 { 383 {
385 base::AutoLock url_lock(url_lock_); 384 base::AutoLock url_lock(url_lock_);
386 RemoveNodeFromInternalMaps(mutable_node); 385 RemoveNodeFromInternalMaps(mutable_node);
387 mutable_node->set_url(url); 386 mutable_node->set_url(url);
388 AddNodeToInternalMaps(mutable_node); 387 AddNodeToInternalMaps(mutable_node);
389 } 388 }
390 389
391 if (store_.get()) 390 if (store_.get())
392 store_->ScheduleSave(); 391 store_->ScheduleSave();
393 392
394 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 393 for (BookmarkModelObserver& observer : observers_)
395 BookmarkNodeChanged(this, node)); 394 observer.BookmarkNodeChanged(this, node);
396 } 395 }
397 396
398 void BookmarkModel::SetNodeMetaInfo(const BookmarkNode* node, 397 void BookmarkModel::SetNodeMetaInfo(const BookmarkNode* node,
399 const std::string& key, 398 const std::string& key,
400 const std::string& value) { 399 const std::string& value) {
401 std::string old_value; 400 std::string old_value;
402 if (node->GetMetaInfo(key, &old_value) && old_value == value) 401 if (node->GetMetaInfo(key, &old_value) && old_value == value)
403 return; 402 return;
404 403
405 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 404 for (BookmarkModelObserver& observer : observers_)
406 OnWillChangeBookmarkMetaInfo(this, node)); 405 observer.OnWillChangeBookmarkMetaInfo(this, node);
407 406
408 if (AsMutable(node)->SetMetaInfo(key, value) && store_.get()) 407 if (AsMutable(node)->SetMetaInfo(key, value) && store_.get())
409 store_->ScheduleSave(); 408 store_->ScheduleSave();
410 409
411 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 410 for (BookmarkModelObserver& observer : observers_)
412 BookmarkMetaInfoChanged(this, node)); 411 observer.BookmarkMetaInfoChanged(this, node);
413 } 412 }
414 413
415 void BookmarkModel::SetNodeMetaInfoMap( 414 void BookmarkModel::SetNodeMetaInfoMap(
416 const BookmarkNode* node, 415 const BookmarkNode* node,
417 const BookmarkNode::MetaInfoMap& meta_info_map) { 416 const BookmarkNode::MetaInfoMap& meta_info_map) {
418 const BookmarkNode::MetaInfoMap* old_meta_info_map = node->GetMetaInfoMap(); 417 const BookmarkNode::MetaInfoMap* old_meta_info_map = node->GetMetaInfoMap();
419 if ((!old_meta_info_map && meta_info_map.empty()) || 418 if ((!old_meta_info_map && meta_info_map.empty()) ||
420 (old_meta_info_map && meta_info_map == *old_meta_info_map)) 419 (old_meta_info_map && meta_info_map == *old_meta_info_map))
421 return; 420 return;
422 421
423 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 422 for (BookmarkModelObserver& observer : observers_)
424 OnWillChangeBookmarkMetaInfo(this, node)); 423 observer.OnWillChangeBookmarkMetaInfo(this, node);
425 424
426 AsMutable(node)->SetMetaInfoMap(meta_info_map); 425 AsMutable(node)->SetMetaInfoMap(meta_info_map);
427 if (store_.get()) 426 if (store_.get())
428 store_->ScheduleSave(); 427 store_->ScheduleSave();
429 428
430 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 429 for (BookmarkModelObserver& observer : observers_)
431 BookmarkMetaInfoChanged(this, node)); 430 observer.BookmarkMetaInfoChanged(this, node);
432 } 431 }
433 432
434 void BookmarkModel::DeleteNodeMetaInfo(const BookmarkNode* node, 433 void BookmarkModel::DeleteNodeMetaInfo(const BookmarkNode* node,
435 const std::string& key) { 434 const std::string& key) {
436 const BookmarkNode::MetaInfoMap* meta_info_map = node->GetMetaInfoMap(); 435 const BookmarkNode::MetaInfoMap* meta_info_map = node->GetMetaInfoMap();
437 if (!meta_info_map || meta_info_map->find(key) == meta_info_map->end()) 436 if (!meta_info_map || meta_info_map->find(key) == meta_info_map->end())
438 return; 437 return;
439 438
440 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 439 for (BookmarkModelObserver& observer : observers_)
441 OnWillChangeBookmarkMetaInfo(this, node)); 440 observer.OnWillChangeBookmarkMetaInfo(this, node);
442 441
443 if (AsMutable(node)->DeleteMetaInfo(key) && store_.get()) 442 if (AsMutable(node)->DeleteMetaInfo(key) && store_.get())
444 store_->ScheduleSave(); 443 store_->ScheduleSave();
445 444
446 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 445 for (BookmarkModelObserver& observer : observers_)
447 BookmarkMetaInfoChanged(this, node)); 446 observer.BookmarkMetaInfoChanged(this, node);
448 } 447 }
449 448
450 void BookmarkModel::AddNonClonedKey(const std::string& key) { 449 void BookmarkModel::AddNonClonedKey(const std::string& key) {
451 non_cloned_keys_.insert(key); 450 non_cloned_keys_.insert(key);
452 } 451 }
453 452
454 void BookmarkModel::SetNodeSyncTransactionVersion( 453 void BookmarkModel::SetNodeSyncTransactionVersion(
455 const BookmarkNode* node, 454 const BookmarkNode* node,
456 int64_t sync_transaction_version) { 455 int64_t sync_transaction_version) {
457 DCHECK(client_->CanSyncNode(node)); 456 DCHECK(client_->CanSyncNode(node));
(...skipping 27 matching lines...) Expand all
485 if (icon_url == node->icon_url()) 484 if (icon_url == node->icon_url())
486 to_update.insert(node); 485 to_update.insert(node);
487 } 486 }
488 } 487 }
489 488
490 for (const BookmarkNode* node : to_update) { 489 for (const BookmarkNode* node : to_update) {
491 // Rerequest the favicon. 490 // Rerequest the favicon.
492 BookmarkNode* mutable_node = AsMutable(node); 491 BookmarkNode* mutable_node = AsMutable(node);
493 mutable_node->InvalidateFavicon(); 492 mutable_node->InvalidateFavicon();
494 CancelPendingFaviconLoadRequests(mutable_node); 493 CancelPendingFaviconLoadRequests(mutable_node);
495 FOR_EACH_OBSERVER(BookmarkModelObserver, 494 for (BookmarkModelObserver& observer : observers_)
496 observers_, 495 observer.BookmarkNodeFaviconChanged(this, node);
497 BookmarkNodeFaviconChanged(this, node));
498 } 496 }
499 } 497 }
500 498
501 void BookmarkModel::SetDateAdded(const BookmarkNode* node, Time date_added) { 499 void BookmarkModel::SetDateAdded(const BookmarkNode* node, Time date_added) {
502 DCHECK(node && !is_permanent_node(node)); 500 DCHECK(node && !is_permanent_node(node));
503 501
504 if (node->date_added() == date_added) 502 if (node->date_added() == date_added)
505 return; 503 return;
506 504
507 AsMutable(node)->set_date_added(date_added); 505 AsMutable(node)->set_date_added(date_added);
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 } 641 }
644 642
645 void BookmarkModel::SortChildren(const BookmarkNode* parent) { 643 void BookmarkModel::SortChildren(const BookmarkNode* parent) {
646 DCHECK(client_->CanBeEditedByUser(parent)); 644 DCHECK(client_->CanBeEditedByUser(parent));
647 645
648 if (!parent || !parent->is_folder() || is_root_node(parent) || 646 if (!parent || !parent->is_folder() || is_root_node(parent) ||
649 parent->child_count() <= 1) { 647 parent->child_count() <= 1) {
650 return; 648 return;
651 } 649 }
652 650
653 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 651 for (BookmarkModelObserver& observer : observers_)
654 OnWillReorderBookmarkNode(this, parent)); 652 observer.OnWillReorderBookmarkNode(this, parent);
655 653
656 UErrorCode error = U_ZERO_ERROR; 654 UErrorCode error = U_ZERO_ERROR;
657 std::unique_ptr<icu::Collator> collator(icu::Collator::createInstance(error)); 655 std::unique_ptr<icu::Collator> collator(icu::Collator::createInstance(error));
658 if (U_FAILURE(error)) 656 if (U_FAILURE(error))
659 collator.reset(NULL); 657 collator.reset(NULL);
660 BookmarkNode* mutable_parent = AsMutable(parent); 658 BookmarkNode* mutable_parent = AsMutable(parent);
661 std::sort(mutable_parent->children().begin(), 659 std::sort(mutable_parent->children().begin(),
662 mutable_parent->children().end(), 660 mutable_parent->children().end(),
663 SortComparator(collator.get())); 661 SortComparator(collator.get()));
664 662
665 if (store_.get()) 663 if (store_.get())
666 store_->ScheduleSave(); 664 store_->ScheduleSave();
667 665
668 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 666 for (BookmarkModelObserver& observer : observers_)
669 BookmarkNodeChildrenReordered(this, parent)); 667 observer.BookmarkNodeChildrenReordered(this, parent);
670 } 668 }
671 669
672 void BookmarkModel::ReorderChildren( 670 void BookmarkModel::ReorderChildren(
673 const BookmarkNode* parent, 671 const BookmarkNode* parent,
674 const std::vector<const BookmarkNode*>& ordered_nodes) { 672 const std::vector<const BookmarkNode*>& ordered_nodes) {
675 DCHECK(client_->CanBeEditedByUser(parent)); 673 DCHECK(client_->CanBeEditedByUser(parent));
676 674
677 // Ensure that all children in |parent| are in |ordered_nodes|. 675 // Ensure that all children in |parent| are in |ordered_nodes|.
678 DCHECK_EQ(static_cast<size_t>(parent->child_count()), ordered_nodes.size()); 676 DCHECK_EQ(static_cast<size_t>(parent->child_count()), ordered_nodes.size());
679 for (const BookmarkNode* node : ordered_nodes) 677 for (const BookmarkNode* node : ordered_nodes)
680 DCHECK_EQ(parent, node->parent()); 678 DCHECK_EQ(parent, node->parent());
681 679
682 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 680 for (BookmarkModelObserver& observer : observers_)
683 OnWillReorderBookmarkNode(this, parent)); 681 observer.OnWillReorderBookmarkNode(this, parent);
684 682
685 if (ordered_nodes.size() > 1) { 683 if (ordered_nodes.size() > 1) {
686 std::map<const BookmarkNode*, int> order; 684 std::map<const BookmarkNode*, int> order;
687 for (size_t i = 0; i < ordered_nodes.size(); ++i) 685 for (size_t i = 0; i < ordered_nodes.size(); ++i)
688 order[ordered_nodes[i]] = i; 686 order[ordered_nodes[i]] = i;
689 687
690 std::vector<std::unique_ptr<BookmarkNode>> new_children( 688 std::vector<std::unique_ptr<BookmarkNode>> new_children(
691 ordered_nodes.size()); 689 ordered_nodes.size());
692 BookmarkNode* mutable_parent = AsMutable(parent); 690 BookmarkNode* mutable_parent = AsMutable(parent);
693 for (auto& child : mutable_parent->children()) { 691 for (auto& child : mutable_parent->children()) {
694 size_t new_location = order[child.get()]; 692 size_t new_location = order[child.get()];
695 new_children[new_location] = std::move(child); 693 new_children[new_location] = std::move(child);
696 } 694 }
697 mutable_parent->children().swap(new_children); 695 mutable_parent->children().swap(new_children);
698 696
699 if (store_.get()) 697 if (store_.get())
700 store_->ScheduleSave(); 698 store_->ScheduleSave();
701 } 699 }
702 700
703 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 701 for (BookmarkModelObserver& observer : observers_)
704 BookmarkNodeChildrenReordered(this, parent)); 702 observer.BookmarkNodeChildrenReordered(this, parent);
705 } 703 }
706 704
707 void BookmarkModel::SetDateFolderModified(const BookmarkNode* parent, 705 void BookmarkModel::SetDateFolderModified(const BookmarkNode* parent,
708 const Time time) { 706 const Time time) {
709 DCHECK(parent); 707 DCHECK(parent);
710 AsMutable(parent)->set_date_folder_modified(time); 708 AsMutable(parent)->set_date_folder_modified(time);
711 709
712 if (store_.get()) 710 if (store_.get())
713 store_->ScheduleSave(); 711 store_->ScheduleSave();
714 } 712 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 BookmarkNode* node_ptr = node.get(); 765 BookmarkNode* node_ptr = node.get();
768 AddNode(AsMutable(parent), index, std::move(node)); 766 AddNode(AsMutable(parent), index, std::move(node));
769 767
770 // We might be restoring a folder node that have already contained a set of 768 // We might be restoring a folder node that have already contained a set of
771 // child nodes. We need to notify all of them. 769 // child nodes. We need to notify all of them.
772 NotifyNodeAddedForAllDescendents(node_ptr); 770 NotifyNodeAddedForAllDescendents(node_ptr);
773 } 771 }
774 772
775 void BookmarkModel::NotifyNodeAddedForAllDescendents(const BookmarkNode* node) { 773 void BookmarkModel::NotifyNodeAddedForAllDescendents(const BookmarkNode* node) {
776 for (int i = 0; i < node->child_count(); ++i) { 774 for (int i = 0; i < node->child_count(); ++i) {
777 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 775 for (BookmarkModelObserver& observer : observers_)
778 BookmarkNodeAdded(this, node, i)); 776 observer.BookmarkNodeAdded(this, node, i);
779 NotifyNodeAddedForAllDescendents(node->GetChild(i)); 777 NotifyNodeAddedForAllDescendents(node->GetChild(i));
780 } 778 }
781 } 779 }
782 780
783 bool BookmarkModel::IsBookmarkedNoLock(const GURL& url) { 781 bool BookmarkModel::IsBookmarkedNoLock(const GURL& url) {
784 BookmarkNode tmp_node(url); 782 BookmarkNode tmp_node(url);
785 return (nodes_ordered_by_url_set_.find(&tmp_node) != 783 return (nodes_ordered_by_url_set_.find(&tmp_node) !=
786 nodes_ordered_by_url_set_.end()); 784 nodes_ordered_by_url_set_.end());
787 } 785 }
788 786
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 loaded_ = true; 891 loaded_ = true;
894 892
895 loaded_signal_.Signal(); 893 loaded_signal_.Signal();
896 894
897 // TODO(robliao): Remove ScopedTracker below once https://crbug.com/467179 895 // TODO(robliao): Remove ScopedTracker below once https://crbug.com/467179
898 // is fixed. 896 // is fixed.
899 tracked_objects::ScopedTracker tracking_profile6( 897 tracked_objects::ScopedTracker tracking_profile6(
900 FROM_HERE_WITH_EXPLICIT_FUNCTION("467179 BookmarkModel::DoneLoading6")); 898 FROM_HERE_WITH_EXPLICIT_FUNCTION("467179 BookmarkModel::DoneLoading6"));
901 899
902 // Notify our direct observers. 900 // Notify our direct observers.
903 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 901 for (BookmarkModelObserver& observer : observers_)
904 BookmarkModelLoaded(this, details->ids_reassigned())); 902 observer.BookmarkModelLoaded(this, details->ids_reassigned());
905 } 903 }
906 904
907 void BookmarkModel::RemoveAndDeleteNode(BookmarkNode* node_ptr) { 905 void BookmarkModel::RemoveAndDeleteNode(BookmarkNode* node_ptr) {
908 std::unique_ptr<BookmarkNode> node; 906 std::unique_ptr<BookmarkNode> node;
909 907
910 const BookmarkNode* parent = node_ptr->parent(); 908 const BookmarkNode* parent = node_ptr->parent();
911 DCHECK(parent); 909 DCHECK(parent);
912 int index = parent->GetIndexOf(node_ptr); 910 int index = parent->GetIndexOf(node_ptr);
913 DCHECK_NE(-1, index); 911 DCHECK_NE(-1, index);
914 912
915 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 913 for (BookmarkModelObserver& observer : observers_)
916 OnWillRemoveBookmarks(this, parent, index, node_ptr)); 914 observer.OnWillRemoveBookmarks(this, parent, index, node_ptr);
917 915
918 std::set<GURL> removed_urls; 916 std::set<GURL> removed_urls;
919 { 917 {
920 base::AutoLock url_lock(url_lock_); 918 base::AutoLock url_lock(url_lock_);
921 node = RemoveNodeAndGetRemovedUrls(node_ptr, &removed_urls); 919 node = RemoveNodeAndGetRemovedUrls(node_ptr, &removed_urls);
922 } 920 }
923 921
924 if (store_.get()) 922 if (store_.get())
925 store_->ScheduleSave(); 923 store_->ScheduleSave();
926 924
927 FOR_EACH_OBSERVER( 925 for (BookmarkModelObserver& observer : observers_)
928 BookmarkModelObserver, 926 observer.BookmarkNodeRemoved(this, parent, index, node.get(), removed_urls);
929 observers_,
930 BookmarkNodeRemoved(this, parent, index, node.get(), removed_urls));
931 927
932 undo_delegate()->OnBookmarkNodeRemoved(this, parent, index, std::move(node)); 928 undo_delegate()->OnBookmarkNodeRemoved(this, parent, index, std::move(node));
933 } 929 }
934 930
935 void BookmarkModel::RemoveNodeFromInternalMaps(BookmarkNode* node) { 931 void BookmarkModel::RemoveNodeFromInternalMaps(BookmarkNode* node) {
936 index_->Remove(node); 932 index_->Remove(node);
937 // NOTE: this is called in such a way that url_lock_ is already held. As 933 // NOTE: this is called in such a way that url_lock_ is already held. As
938 // such, this doesn't explicitly grab the lock. 934 // such, this doesn't explicitly grab the lock.
939 url_lock_.AssertAcquired(); 935 url_lock_.AssertAcquired();
940 NodesOrderedByURLSet::iterator i = nodes_ordered_by_url_set_.find(node); 936 NodesOrderedByURLSet::iterator i = nodes_ordered_by_url_set_.find(node);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
982 parent->Add(std::move(node), index); 978 parent->Add(std::move(node), index);
983 979
984 if (store_.get()) 980 if (store_.get())
985 store_->ScheduleSave(); 981 store_->ScheduleSave();
986 982
987 { 983 {
988 base::AutoLock url_lock(url_lock_); 984 base::AutoLock url_lock(url_lock_);
989 AddNodeToInternalMaps(node_ptr); 985 AddNodeToInternalMaps(node_ptr);
990 } 986 }
991 987
992 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 988 for (BookmarkModelObserver& observer : observers_)
993 BookmarkNodeAdded(this, parent, index)); 989 observer.BookmarkNodeAdded(this, parent, index);
994 990
995 return node_ptr; 991 return node_ptr;
996 } 992 }
997 993
998 void BookmarkModel::AddNodeToInternalMaps(BookmarkNode* node) { 994 void BookmarkModel::AddNodeToInternalMaps(BookmarkNode* node) {
999 url_lock_.AssertAcquired(); 995 url_lock_.AssertAcquired();
1000 if (node->is_url()) { 996 if (node->is_url()) {
1001 index_->Add(node); 997 index_->Add(node);
1002 nodes_ordered_by_url_set_.insert(node); 998 nodes_ordered_by_url_set_.insert(node);
1003 } 999 }
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1077 &BookmarkModel::OnFaviconDataAvailable, 1073 &BookmarkModel::OnFaviconDataAvailable,
1078 base::Unretained(this), 1074 base::Unretained(this),
1079 node, 1075 node,
1080 icon_type), 1076 icon_type),
1081 &cancelable_task_tracker_); 1077 &cancelable_task_tracker_);
1082 if (taskId != base::CancelableTaskTracker::kBadTaskId) 1078 if (taskId != base::CancelableTaskTracker::kBadTaskId)
1083 node->set_favicon_load_task_id(taskId); 1079 node->set_favicon_load_task_id(taskId);
1084 } 1080 }
1085 1081
1086 void BookmarkModel::FaviconLoaded(const BookmarkNode* node) { 1082 void BookmarkModel::FaviconLoaded(const BookmarkNode* node) {
1087 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 1083 for (BookmarkModelObserver& observer : observers_)
1088 BookmarkNodeFaviconChanged(this, node)); 1084 observer.BookmarkNodeFaviconChanged(this, node);
1089 } 1085 }
1090 1086
1091 void BookmarkModel::CancelPendingFaviconLoadRequests(BookmarkNode* node) { 1087 void BookmarkModel::CancelPendingFaviconLoadRequests(BookmarkNode* node) {
1092 if (node->favicon_load_task_id() != base::CancelableTaskTracker::kBadTaskId) { 1088 if (node->favicon_load_task_id() != base::CancelableTaskTracker::kBadTaskId) {
1093 cancelable_task_tracker_.TryCancel(node->favicon_load_task_id()); 1089 cancelable_task_tracker_.TryCancel(node->favicon_load_task_id());
1094 node->set_favicon_load_task_id(base::CancelableTaskTracker::kBadTaskId); 1090 node->set_favicon_load_task_id(base::CancelableTaskTracker::kBadTaskId);
1095 } 1091 }
1096 } 1092 }
1097 1093
1098 void BookmarkModel::PopulateNodesByURL(BookmarkNode* node) { 1094 void BookmarkModel::PopulateNodesByURL(BookmarkNode* node) {
(...skipping 25 matching lines...) Expand all
1124 undo_delegate_ = undo_delegate; 1120 undo_delegate_ = undo_delegate;
1125 if (undo_delegate_) 1121 if (undo_delegate_)
1126 undo_delegate_->SetUndoProvider(this); 1122 undo_delegate_->SetUndoProvider(this);
1127 } 1123 }
1128 1124
1129 BookmarkUndoDelegate* BookmarkModel::undo_delegate() const { 1125 BookmarkUndoDelegate* BookmarkModel::undo_delegate() const {
1130 return undo_delegate_ ? undo_delegate_ : empty_undo_delegate_.get(); 1126 return undo_delegate_ ? undo_delegate_ : empty_undo_delegate_.get();
1131 } 1127 }
1132 1128
1133 } // namespace bookmarks 1129 } // namespace bookmarks
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698