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

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

Issue 302313005: Show the Managed Bookmarks folder in the views UI. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased on model changes Created 6 years, 6 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 | Annotate | Revision Log
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 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 expanded_state_tracker_.reset( 143 expanded_state_tracker_.reset(
144 new BookmarkExpandedStateTracker(this, pref_service)); 144 new BookmarkExpandedStateTracker(this, pref_service));
145 145
146 // Load the bookmarks. BookmarkStorage notifies us when done. 146 // Load the bookmarks. BookmarkStorage notifies us when done.
147 store_ = new BookmarkStorage(this, profile_path, io_task_runner.get()); 147 store_ = new BookmarkStorage(this, profile_path, io_task_runner.get());
148 store_->LoadBookmarks(CreateLoadDetails(accept_languages), ui_task_runner); 148 store_->LoadBookmarks(CreateLoadDetails(accept_languages), ui_task_runner);
149 } 149 }
150 150
151 const BookmarkNode* BookmarkModel::GetParentForNewNodes() { 151 const BookmarkNode* BookmarkModel::GetParentForNewNodes() {
152 std::vector<const BookmarkNode*> nodes = 152 std::vector<const BookmarkNode*> nodes =
153 bookmark_utils::GetMostRecentlyModifiedFolders(this, 1); 153 bookmark_utils::GetMostRecentlyModifiedUserFolders(this, 1);
154 DCHECK(!nodes.empty()); // This list is always padded with default folders. 154 DCHECK(!nodes.empty()); // This list is always padded with default folders.
155 return nodes[0]; 155 return nodes[0];
156 } 156 }
157 157
158 void BookmarkModel::AddObserver(BookmarkModelObserver* observer) { 158 void BookmarkModel::AddObserver(BookmarkModelObserver* observer) {
159 observers_.AddObserver(observer); 159 observers_.AddObserver(observer);
160 } 160 }
161 161
162 void BookmarkModel::RemoveObserver(BookmarkModelObserver* observer) { 162 void BookmarkModel::RemoveObserver(BookmarkModelObserver* observer) {
163 observers_.RemoveObserver(observer); 163 observers_.RemoveObserver(observer);
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 std::vector<const BookmarkNode*>* nodes) { 496 std::vector<const BookmarkNode*>* nodes) {
497 base::AutoLock url_lock(url_lock_); 497 base::AutoLock url_lock(url_lock_);
498 BookmarkNode tmp_node(url); 498 BookmarkNode tmp_node(url);
499 NodesOrderedByURLSet::iterator i = nodes_ordered_by_url_set_.find(&tmp_node); 499 NodesOrderedByURLSet::iterator i = nodes_ordered_by_url_set_.find(&tmp_node);
500 while (i != nodes_ordered_by_url_set_.end() && (*i)->url() == url) { 500 while (i != nodes_ordered_by_url_set_.end() && (*i)->url() == url) {
501 nodes->push_back(*i); 501 nodes->push_back(*i);
502 ++i; 502 ++i;
503 } 503 }
504 } 504 }
505 505
506 const BookmarkNode* BookmarkModel::GetMostRecentlyAddedNodeForURL( 506 const BookmarkNode* BookmarkModel::GetMostRecentlyAddedUserNodeForURL(
507 const GURL& url) { 507 const GURL& url) {
508 std::vector<const BookmarkNode*> nodes; 508 std::vector<const BookmarkNode*> nodes;
509 GetNodesByURL(url, &nodes); 509 GetNodesByURL(url, &nodes);
510 if (nodes.empty()) 510 std::sort(nodes.begin(), nodes.end(), &bookmark_utils::MoreRecentlyAdded);
511 return NULL;
512 511
513 std::sort(nodes.begin(), nodes.end(), &bookmark_utils::MoreRecentlyAdded); 512 // Look for the first node that the user can edit.
514 return nodes.front(); 513 for (size_t i = 0; i < nodes.size(); ++i) {
514 if (client_->CanBeEditedByUser(nodes[i]))
sky 2014/06/05 23:46:47 Add test coverage for this.
Joao da Silva 2014/06/06 15:41:03 Done.
515 return nodes[i];
516 }
517
518 return NULL;
515 } 519 }
516 520
517 bool BookmarkModel::HasBookmarks() { 521 bool BookmarkModel::HasBookmarks() {
518 base::AutoLock url_lock(url_lock_); 522 base::AutoLock url_lock(url_lock_);
519 return !nodes_ordered_by_url_set_.empty(); 523 return !nodes_ordered_by_url_set_.empty();
520 } 524 }
521 525
522 bool BookmarkModel::IsBookmarked(const GURL& url) { 526 bool BookmarkModel::IsBookmarked(const GURL& url) {
523 base::AutoLock url_lock(url_lock_); 527 base::AutoLock url_lock(url_lock_);
524 return IsBookmarkedNoLock(url); 528 return IsBookmarkedNoLock(url, false);
529 }
530
531 bool BookmarkModel::IsBookmarkedByUser(const GURL& url) {
532 base::AutoLock url_lock(url_lock_);
533 return IsBookmarkedNoLock(url, true);
525 } 534 }
526 535
527 void BookmarkModel::GetBookmarks( 536 void BookmarkModel::GetBookmarks(
528 std::vector<BookmarkService::URLAndTitle>* bookmarks) { 537 std::vector<BookmarkService::URLAndTitle>* bookmarks) {
529 base::AutoLock url_lock(url_lock_); 538 base::AutoLock url_lock(url_lock_);
530 const GURL* last_url = NULL; 539 const GURL* last_url = NULL;
531 for (NodesOrderedByURLSet::iterator i = nodes_ordered_by_url_set_.begin(); 540 for (NodesOrderedByURLSet::iterator i = nodes_ordered_by_url_set_.begin();
532 i != nodes_ordered_by_url_set_.end(); ++i) { 541 i != nodes_ordered_by_url_set_.end(); ++i) {
533 const GURL* url = &((*i)->url()); 542 const GURL* url = &((*i)->url());
534 // Only add unique URLs. 543 // Only add unique URLs.
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 case BookmarkNode::OTHER_NODE: 720 case BookmarkNode::OTHER_NODE:
712 return other_node_; 721 return other_node_;
713 case BookmarkNode::MOBILE: 722 case BookmarkNode::MOBILE:
714 return mobile_node_; 723 return mobile_node_;
715 default: 724 default:
716 NOTREACHED(); 725 NOTREACHED();
717 return NULL; 726 return NULL;
718 } 727 }
719 } 728 }
720 729
721 bool BookmarkModel::IsBookmarkedNoLock(const GURL& url) { 730 bool BookmarkModel::IsBookmarkedNoLock(const GURL& url,
731 bool only_by_editable_nodes) {
722 BookmarkNode tmp_node(url); 732 BookmarkNode tmp_node(url);
723 return (nodes_ordered_by_url_set_.find(&tmp_node) != 733 typedef NodesOrderedByURLSet::const_iterator Iterator;
724 nodes_ordered_by_url_set_.end()); 734 std::pair<Iterator, Iterator> range =
735 nodes_ordered_by_url_set_.equal_range(&tmp_node);
736 for (Iterator it = range.first; it != range.second; ++it) {
737 if (!only_by_editable_nodes || client_->CanBeEditedByUser(*it))
738 return true;
739 }
740 return false;
725 } 741 }
726 742
727 void BookmarkModel::RemoveNode(BookmarkNode* node, 743 void BookmarkModel::RemoveNode(BookmarkNode* node,
728 std::set<GURL>* removed_urls) { 744 std::set<GURL>* removed_urls) {
729 if (!loaded_ || !node || is_permanent_node(node)) { 745 if (!loaded_ || !node || is_permanent_node(node)) {
730 NOTREACHED(); 746 NOTREACHED();
731 return; 747 return;
732 } 748 }
733 749
734 url_lock_.AssertAcquired(); 750 url_lock_.AssertAcquired();
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 url_lock_.AssertAcquired(); 865 url_lock_.AssertAcquired();
850 DCHECK(removed_urls); 866 DCHECK(removed_urls);
851 BookmarkNode* parent = AsMutable(node->parent()); 867 BookmarkNode* parent = AsMutable(node->parent());
852 DCHECK(parent); 868 DCHECK(parent);
853 parent->Remove(node); 869 parent->Remove(node);
854 RemoveNode(node, removed_urls); 870 RemoveNode(node, removed_urls);
855 // RemoveNode adds an entry to removed_urls for each node of type URL. As we 871 // RemoveNode adds an entry to removed_urls for each node of type URL. As we
856 // allow duplicates we need to remove any entries that are still bookmarked. 872 // allow duplicates we need to remove any entries that are still bookmarked.
857 for (std::set<GURL>::iterator i = removed_urls->begin(); 873 for (std::set<GURL>::iterator i = removed_urls->begin();
858 i != removed_urls->end();) { 874 i != removed_urls->end();) {
859 if (IsBookmarkedNoLock(*i)) { 875 if (IsBookmarkedNoLock(*i, false)) {
860 // When we erase the iterator pointing at the erasee is 876 // When we erase the iterator pointing at the erasee is
861 // invalidated, so using i++ here within the "erase" call is 877 // invalidated, so using i++ here within the "erase" call is
862 // important as it advances the iterator before passing the 878 // important as it advances the iterator before passing the
863 // old value through to erase. 879 // old value through to erase.
864 removed_urls->erase(i++); 880 removed_urls->erase(i++);
865 } else { 881 } else {
866 ++i; 882 ++i;
867 } 883 }
868 } 884 }
869 } 885 }
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
997 BookmarkPermanentNode* mobile_node = 1013 BookmarkPermanentNode* mobile_node =
998 CreatePermanentNode(BookmarkNode::MOBILE); 1014 CreatePermanentNode(BookmarkNode::MOBILE);
999 return scoped_ptr<BookmarkLoadDetails>(new BookmarkLoadDetails( 1015 return scoped_ptr<BookmarkLoadDetails>(new BookmarkLoadDetails(
1000 bb_node, 1016 bb_node,
1001 other_node, 1017 other_node,
1002 mobile_node, 1018 mobile_node,
1003 client_->GetLoadExtraNodesCallback(), 1019 client_->GetLoadExtraNodesCallback(),
1004 new BookmarkIndex(client_, index_urls_, accept_languages), 1020 new BookmarkIndex(client_, index_urls_, accept_languages),
1005 next_node_id_)); 1021 next_node_id_));
1006 } 1022 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698