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

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

Issue 317333004: Added BookmarkClient::CanBeEditedByUser. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: added TODO 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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 206
207 BeginExtensiveChanges(); 207 BeginExtensiveChanges();
208 // Skip deleting permanent nodes. Permanent bookmark nodes are the root and 208 // Skip deleting permanent nodes. Permanent bookmark nodes are the root and
209 // its immediate children. For removing all non permanent nodes just remove 209 // its immediate children. For removing all non permanent nodes just remove
210 // all children of non-root permanent nodes. 210 // all children of non-root permanent nodes.
211 { 211 {
212 base::AutoLock url_lock(url_lock_); 212 base::AutoLock url_lock(url_lock_);
213 for (int i = 0; i < root_.child_count(); ++i) { 213 for (int i = 0; i < root_.child_count(); ++i) {
214 BookmarkNode* permanent_node = root_.GetChild(i); 214 BookmarkNode* permanent_node = root_.GetChild(i);
215 215
216 if (!client_->CanRemovePermanentNodeChildren(permanent_node)) 216 if (!client_->CanBeEditedByUser(permanent_node))
217 continue; 217 continue;
218 218
219 for (int j = permanent_node->child_count() - 1; j >= 0; --j) { 219 for (int j = permanent_node->child_count() - 1; j >= 0; --j) {
220 BookmarkNode* child_node = permanent_node->GetChild(j); 220 BookmarkNode* child_node = permanent_node->GetChild(j);
221 removed_nodes.push_back(child_node); 221 removed_nodes.push_back(child_node);
222 RemoveNodeAndGetRemovedUrls(child_node, &removed_urls); 222 RemoveNodeAndGetRemovedUrls(child_node, &removed_urls);
223 } 223 }
224 } 224 }
225 } 225 }
226 EndExtensiveChanges(); 226 EndExtensiveChanges();
(...skipping 269 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]))
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);
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 { 617 {
614 // Only hold the lock for the duration of the insert. 618 // Only hold the lock for the duration of the insert.
615 base::AutoLock url_lock(url_lock_); 619 base::AutoLock url_lock(url_lock_);
616 nodes_ordered_by_url_set_.insert(new_node); 620 nodes_ordered_by_url_set_.insert(new_node);
617 } 621 }
618 622
619 return AddNode(AsMutable(parent), index, new_node); 623 return AddNode(AsMutable(parent), index, new_node);
620 } 624 }
621 625
622 void BookmarkModel::SortChildren(const BookmarkNode* parent) { 626 void BookmarkModel::SortChildren(const BookmarkNode* parent) {
623 DCHECK(client_->CanReorderChildren(parent)); 627 DCHECK(client_->CanBeEditedByUser(parent));
624 628
625 if (!parent || !parent->is_folder() || is_root_node(parent) || 629 if (!parent || !parent->is_folder() || is_root_node(parent) ||
626 parent->child_count() <= 1) { 630 parent->child_count() <= 1) {
627 return; 631 return;
628 } 632 }
629 633
630 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 634 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_,
631 OnWillReorderBookmarkNode(this, parent)); 635 OnWillReorderBookmarkNode(this, parent));
632 636
633 UErrorCode error = U_ZERO_ERROR; 637 UErrorCode error = U_ZERO_ERROR;
634 scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(error)); 638 scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(error));
635 if (U_FAILURE(error)) 639 if (U_FAILURE(error))
636 collator.reset(NULL); 640 collator.reset(NULL);
637 BookmarkNode* mutable_parent = AsMutable(parent); 641 BookmarkNode* mutable_parent = AsMutable(parent);
638 std::sort(mutable_parent->children().begin(), 642 std::sort(mutable_parent->children().begin(),
639 mutable_parent->children().end(), 643 mutable_parent->children().end(),
640 SortComparator(collator.get())); 644 SortComparator(collator.get()));
641 645
642 if (store_.get()) 646 if (store_.get())
643 store_->ScheduleSave(); 647 store_->ScheduleSave();
644 648
645 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 649 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_,
646 BookmarkNodeChildrenReordered(this, parent)); 650 BookmarkNodeChildrenReordered(this, parent));
647 } 651 }
648 652
649 void BookmarkModel::ReorderChildren( 653 void BookmarkModel::ReorderChildren(
650 const BookmarkNode* parent, 654 const BookmarkNode* parent,
651 const std::vector<const BookmarkNode*>& ordered_nodes) { 655 const std::vector<const BookmarkNode*>& ordered_nodes) {
652 DCHECK(client_->CanReorderChildren(parent)); 656 DCHECK(client_->CanBeEditedByUser(parent));
653 657
654 // Ensure that all children in |parent| are in |ordered_nodes|. 658 // Ensure that all children in |parent| are in |ordered_nodes|.
655 DCHECK_EQ(static_cast<size_t>(parent->child_count()), ordered_nodes.size()); 659 DCHECK_EQ(static_cast<size_t>(parent->child_count()), ordered_nodes.size());
656 for (size_t i = 0; i < ordered_nodes.size(); ++i) 660 for (size_t i = 0; i < ordered_nodes.size(); ++i)
657 DCHECK_EQ(parent, ordered_nodes[i]->parent()); 661 DCHECK_EQ(parent, ordered_nodes[i]->parent());
658 662
659 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 663 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_,
660 OnWillReorderBookmarkNode(this, parent)); 664 OnWillReorderBookmarkNode(this, parent));
661 665
662 AsMutable(parent)->SetChildren( 666 AsMutable(parent)->SetChildren(
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
997 BookmarkPermanentNode* mobile_node = 1001 BookmarkPermanentNode* mobile_node =
998 CreatePermanentNode(BookmarkNode::MOBILE); 1002 CreatePermanentNode(BookmarkNode::MOBILE);
999 return scoped_ptr<BookmarkLoadDetails>(new BookmarkLoadDetails( 1003 return scoped_ptr<BookmarkLoadDetails>(new BookmarkLoadDetails(
1000 bb_node, 1004 bb_node,
1001 other_node, 1005 other_node,
1002 mobile_node, 1006 mobile_node,
1003 client_->GetLoadExtraNodesCallback(), 1007 client_->GetLoadExtraNodesCallback(),
1004 new BookmarkIndex(client_, index_urls_, accept_languages), 1008 new BookmarkIndex(client_, index_urls_, accept_languages),
1005 next_node_id_)); 1009 next_node_id_));
1006 } 1010 }
OLDNEW
« no previous file with comments | « components/bookmarks/browser/bookmark_model.h ('k') | components/bookmarks/browser/bookmark_model_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698