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

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

Issue 312093007: Revert of Added BookmarkClient::CanBeEditedByUser. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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::GetMostRecentlyModifiedUserFolders(this, 1); 153 bookmark_utils::GetMostRecentlyModifiedFolders(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_->CanBeEditedByUser(permanent_node)) 216 if (!client_->CanRemovePermanentNodeChildren(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::GetMostRecentlyAddedUserNodeForURL( 506 const BookmarkNode* BookmarkModel::GetMostRecentlyAddedNodeForURL(
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())
511 return NULL;
512
510 std::sort(nodes.begin(), nodes.end(), &bookmark_utils::MoreRecentlyAdded); 513 std::sort(nodes.begin(), nodes.end(), &bookmark_utils::MoreRecentlyAdded);
511 514 return nodes.front();
512 // Look for the first node that the user can edit.
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;
519 } 515 }
520 516
521 bool BookmarkModel::HasBookmarks() { 517 bool BookmarkModel::HasBookmarks() {
522 base::AutoLock url_lock(url_lock_); 518 base::AutoLock url_lock(url_lock_);
523 return !nodes_ordered_by_url_set_.empty(); 519 return !nodes_ordered_by_url_set_.empty();
524 } 520 }
525 521
526 bool BookmarkModel::IsBookmarked(const GURL& url) { 522 bool BookmarkModel::IsBookmarked(const GURL& url) {
527 base::AutoLock url_lock(url_lock_); 523 base::AutoLock url_lock(url_lock_);
528 return IsBookmarkedNoLock(url); 524 return IsBookmarkedNoLock(url);
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
617 { 613 {
618 // Only hold the lock for the duration of the insert. 614 // Only hold the lock for the duration of the insert.
619 base::AutoLock url_lock(url_lock_); 615 base::AutoLock url_lock(url_lock_);
620 nodes_ordered_by_url_set_.insert(new_node); 616 nodes_ordered_by_url_set_.insert(new_node);
621 } 617 }
622 618
623 return AddNode(AsMutable(parent), index, new_node); 619 return AddNode(AsMutable(parent), index, new_node);
624 } 620 }
625 621
626 void BookmarkModel::SortChildren(const BookmarkNode* parent) { 622 void BookmarkModel::SortChildren(const BookmarkNode* parent) {
627 DCHECK(client_->CanBeEditedByUser(parent)); 623 DCHECK(client_->CanReorderChildren(parent));
628 624
629 if (!parent || !parent->is_folder() || is_root_node(parent) || 625 if (!parent || !parent->is_folder() || is_root_node(parent) ||
630 parent->child_count() <= 1) { 626 parent->child_count() <= 1) {
631 return; 627 return;
632 } 628 }
633 629
634 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 630 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_,
635 OnWillReorderBookmarkNode(this, parent)); 631 OnWillReorderBookmarkNode(this, parent));
636 632
637 UErrorCode error = U_ZERO_ERROR; 633 UErrorCode error = U_ZERO_ERROR;
638 scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(error)); 634 scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(error));
639 if (U_FAILURE(error)) 635 if (U_FAILURE(error))
640 collator.reset(NULL); 636 collator.reset(NULL);
641 BookmarkNode* mutable_parent = AsMutable(parent); 637 BookmarkNode* mutable_parent = AsMutable(parent);
642 std::sort(mutable_parent->children().begin(), 638 std::sort(mutable_parent->children().begin(),
643 mutable_parent->children().end(), 639 mutable_parent->children().end(),
644 SortComparator(collator.get())); 640 SortComparator(collator.get()));
645 641
646 if (store_.get()) 642 if (store_.get())
647 store_->ScheduleSave(); 643 store_->ScheduleSave();
648 644
649 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 645 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_,
650 BookmarkNodeChildrenReordered(this, parent)); 646 BookmarkNodeChildrenReordered(this, parent));
651 } 647 }
652 648
653 void BookmarkModel::ReorderChildren( 649 void BookmarkModel::ReorderChildren(
654 const BookmarkNode* parent, 650 const BookmarkNode* parent,
655 const std::vector<const BookmarkNode*>& ordered_nodes) { 651 const std::vector<const BookmarkNode*>& ordered_nodes) {
656 DCHECK(client_->CanBeEditedByUser(parent)); 652 DCHECK(client_->CanReorderChildren(parent));
657 653
658 // Ensure that all children in |parent| are in |ordered_nodes|. 654 // Ensure that all children in |parent| are in |ordered_nodes|.
659 DCHECK_EQ(static_cast<size_t>(parent->child_count()), ordered_nodes.size()); 655 DCHECK_EQ(static_cast<size_t>(parent->child_count()), ordered_nodes.size());
660 for (size_t i = 0; i < ordered_nodes.size(); ++i) 656 for (size_t i = 0; i < ordered_nodes.size(); ++i)
661 DCHECK_EQ(parent, ordered_nodes[i]->parent()); 657 DCHECK_EQ(parent, ordered_nodes[i]->parent());
662 658
663 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, 659 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_,
664 OnWillReorderBookmarkNode(this, parent)); 660 OnWillReorderBookmarkNode(this, parent));
665 661
666 AsMutable(parent)->SetChildren( 662 AsMutable(parent)->SetChildren(
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
1001 BookmarkPermanentNode* mobile_node = 997 BookmarkPermanentNode* mobile_node =
1002 CreatePermanentNode(BookmarkNode::MOBILE); 998 CreatePermanentNode(BookmarkNode::MOBILE);
1003 return scoped_ptr<BookmarkLoadDetails>(new BookmarkLoadDetails( 999 return scoped_ptr<BookmarkLoadDetails>(new BookmarkLoadDetails(
1004 bb_node, 1000 bb_node,
1005 other_node, 1001 other_node,
1006 mobile_node, 1002 mobile_node,
1007 client_->GetLoadExtraNodesCallback(), 1003 client_->GetLoadExtraNodesCallback(),
1008 new BookmarkIndex(client_, index_urls_, accept_languages), 1004 new BookmarkIndex(client_, index_urls_, accept_languages),
1009 next_node_id_)); 1005 next_node_id_));
1010 } 1006 }
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