OLD | NEW |
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 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 public: | 91 public: |
92 EmptyUndoDelegate() {} | 92 EmptyUndoDelegate() {} |
93 ~EmptyUndoDelegate() override {} | 93 ~EmptyUndoDelegate() override {} |
94 | 94 |
95 private: | 95 private: |
96 // BookmarkUndoDelegate: | 96 // BookmarkUndoDelegate: |
97 void SetUndoProvider(BookmarkUndoProvider* provider) override {} | 97 void SetUndoProvider(BookmarkUndoProvider* provider) override {} |
98 void OnBookmarkNodeRemoved(BookmarkModel* model, | 98 void OnBookmarkNodeRemoved(BookmarkModel* model, |
99 const BookmarkNode* parent, | 99 const BookmarkNode* parent, |
100 int index, | 100 int index, |
101 scoped_ptr<BookmarkNode> node) override {} | 101 std::unique_ptr<BookmarkNode> node) override {} |
102 | 102 |
103 DISALLOW_COPY_AND_ASSIGN(EmptyUndoDelegate); | 103 DISALLOW_COPY_AND_ASSIGN(EmptyUndoDelegate); |
104 }; | 104 }; |
105 | 105 |
106 } // namespace | 106 } // namespace |
107 | 107 |
108 // BookmarkModel -------------------------------------------------------------- | 108 // BookmarkModel -------------------------------------------------------------- |
109 | 109 |
110 BookmarkModel::BookmarkModel(scoped_ptr<BookmarkClient> client) | 110 BookmarkModel::BookmarkModel(std::unique_ptr<BookmarkClient> client) |
111 : client_(std::move(client)), | 111 : client_(std::move(client)), |
112 loaded_(false), | 112 loaded_(false), |
113 root_(GURL()), | 113 root_(GURL()), |
114 bookmark_bar_node_(NULL), | 114 bookmark_bar_node_(NULL), |
115 other_node_(NULL), | 115 other_node_(NULL), |
116 mobile_node_(NULL), | 116 mobile_node_(NULL), |
117 next_node_id_(1), | 117 next_node_id_(1), |
118 observers_( | 118 observers_( |
119 base::ObserverList<BookmarkModelObserver>::NOTIFY_EXISTING_ONLY), | 119 base::ObserverList<BookmarkModelObserver>::NOTIFY_EXISTING_ONLY), |
120 loaded_signal_(true, false), | 120 loaded_signal_(true, false), |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 EndExtensiveChanges(); | 251 EndExtensiveChanges(); |
252 if (store_.get()) | 252 if (store_.get()) |
253 store_->ScheduleSave(); | 253 store_->ScheduleSave(); |
254 | 254 |
255 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, | 255 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, |
256 BookmarkAllUserNodesRemoved(this, removed_urls)); | 256 BookmarkAllUserNodesRemoved(this, removed_urls)); |
257 | 257 |
258 BeginGroupedChanges(); | 258 BeginGroupedChanges(); |
259 for (const auto& removed_node_data : removed_node_data_list) { | 259 for (const auto& removed_node_data : removed_node_data_list) { |
260 undo_delegate()->OnBookmarkNodeRemoved( | 260 undo_delegate()->OnBookmarkNodeRemoved( |
261 this, | 261 this, removed_node_data.parent, removed_node_data.index, |
262 removed_node_data.parent, | 262 std::unique_ptr<BookmarkNode>(removed_node_data.node)); |
263 removed_node_data.index, | |
264 scoped_ptr<BookmarkNode>(removed_node_data.node)); | |
265 } | 263 } |
266 EndGroupedChanges(); | 264 EndGroupedChanges(); |
267 } | 265 } |
268 | 266 |
269 void BookmarkModel::Move(const BookmarkNode* node, | 267 void BookmarkModel::Move(const BookmarkNode* node, |
270 const BookmarkNode* new_parent, | 268 const BookmarkNode* new_parent, |
271 int index) { | 269 int index) { |
272 if (!loaded_ || !node || !IsValidIndex(new_parent, index, true) || | 270 if (!loaded_ || !node || !IsValidIndex(new_parent, index, true) || |
273 is_root_node(new_parent) || is_permanent_node(node)) { | 271 is_root_node(new_parent) || is_permanent_node(node)) { |
274 NOTREACHED(); | 272 NOTREACHED(); |
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
651 | 649 |
652 if (!parent || !parent->is_folder() || is_root_node(parent) || | 650 if (!parent || !parent->is_folder() || is_root_node(parent) || |
653 parent->child_count() <= 1) { | 651 parent->child_count() <= 1) { |
654 return; | 652 return; |
655 } | 653 } |
656 | 654 |
657 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, | 655 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, |
658 OnWillReorderBookmarkNode(this, parent)); | 656 OnWillReorderBookmarkNode(this, parent)); |
659 | 657 |
660 UErrorCode error = U_ZERO_ERROR; | 658 UErrorCode error = U_ZERO_ERROR; |
661 scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(error)); | 659 std::unique_ptr<icu::Collator> collator(icu::Collator::createInstance(error)); |
662 if (U_FAILURE(error)) | 660 if (U_FAILURE(error)) |
663 collator.reset(NULL); | 661 collator.reset(NULL); |
664 BookmarkNode* mutable_parent = AsMutable(parent); | 662 BookmarkNode* mutable_parent = AsMutable(parent); |
665 std::sort(mutable_parent->children().begin(), | 663 std::sort(mutable_parent->children().begin(), |
666 mutable_parent->children().end(), | 664 mutable_parent->children().end(), |
667 SortComparator(collator.get())); | 665 SortComparator(collator.get())); |
668 | 666 |
669 if (store_.get()) | 667 if (store_.get()) |
670 store_->ScheduleSave(); | 668 store_->ScheduleSave(); |
671 | 669 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
746 case BookmarkNode::OTHER_NODE: | 744 case BookmarkNode::OTHER_NODE: |
747 return other_node_; | 745 return other_node_; |
748 case BookmarkNode::MOBILE: | 746 case BookmarkNode::MOBILE: |
749 return mobile_node_; | 747 return mobile_node_; |
750 default: | 748 default: |
751 NOTREACHED(); | 749 NOTREACHED(); |
752 return NULL; | 750 return NULL; |
753 } | 751 } |
754 } | 752 } |
755 | 753 |
756 void BookmarkModel::RestoreRemovedNode(const BookmarkNode* parent, | 754 void BookmarkModel::RestoreRemovedNode( |
757 int index, | 755 const BookmarkNode* parent, |
758 scoped_ptr<BookmarkNode> scoped_node) { | 756 int index, |
| 757 std::unique_ptr<BookmarkNode> scoped_node) { |
759 BookmarkNode* node = scoped_node.release(); | 758 BookmarkNode* node = scoped_node.release(); |
760 AddNode(AsMutable(parent), index, node); | 759 AddNode(AsMutable(parent), index, node); |
761 | 760 |
762 // We might be restoring a folder node that have already contained a set of | 761 // We might be restoring a folder node that have already contained a set of |
763 // child nodes. We need to notify all of them. | 762 // child nodes. We need to notify all of them. |
764 NotifyNodeAddedForAllDescendents(node); | 763 NotifyNodeAddedForAllDescendents(node); |
765 } | 764 } |
766 | 765 |
767 void BookmarkModel::NotifyNodeAddedForAllDescendents(const BookmarkNode* node) { | 766 void BookmarkModel::NotifyNodeAddedForAllDescendents(const BookmarkNode* node) { |
768 for (int i = 0; i < node->child_count(); ++i) { | 767 for (int i = 0; i < node->child_count(); ++i) { |
(...skipping 22 matching lines...) Expand all Loading... |
791 removed_urls->insert(node->url()); | 790 removed_urls->insert(node->url()); |
792 } | 791 } |
793 | 792 |
794 CancelPendingFaviconLoadRequests(node); | 793 CancelPendingFaviconLoadRequests(node); |
795 | 794 |
796 // Recurse through children. | 795 // Recurse through children. |
797 for (int i = node->child_count() - 1; i >= 0; --i) | 796 for (int i = node->child_count() - 1; i >= 0; --i) |
798 RemoveNode(node->GetChild(i), removed_urls); | 797 RemoveNode(node->GetChild(i), removed_urls); |
799 } | 798 } |
800 | 799 |
801 void BookmarkModel::DoneLoading(scoped_ptr<BookmarkLoadDetails> details) { | 800 void BookmarkModel::DoneLoading(std::unique_ptr<BookmarkLoadDetails> details) { |
802 DCHECK(details); | 801 DCHECK(details); |
803 if (loaded_) { | 802 if (loaded_) { |
804 // We should only ever be loaded once. | 803 // We should only ever be loaded once. |
805 NOTREACHED(); | 804 NOTREACHED(); |
806 return; | 805 return; |
807 } | 806 } |
808 | 807 |
809 // TODO(robliao): Remove ScopedTracker below once https://crbug.com/467179 | 808 // TODO(robliao): Remove ScopedTracker below once https://crbug.com/467179 |
810 // is fixed. | 809 // is fixed. |
811 tracked_objects::ScopedTracker tracking_profile1( | 810 tracked_objects::ScopedTracker tracking_profile1( |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
883 // is fixed. | 882 // is fixed. |
884 tracked_objects::ScopedTracker tracking_profile6( | 883 tracked_objects::ScopedTracker tracking_profile6( |
885 FROM_HERE_WITH_EXPLICIT_FUNCTION("467179 BookmarkModel::DoneLoading6")); | 884 FROM_HERE_WITH_EXPLICIT_FUNCTION("467179 BookmarkModel::DoneLoading6")); |
886 | 885 |
887 // Notify our direct observers. | 886 // Notify our direct observers. |
888 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, | 887 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, |
889 BookmarkModelLoaded(this, details->ids_reassigned())); | 888 BookmarkModelLoaded(this, details->ids_reassigned())); |
890 } | 889 } |
891 | 890 |
892 void BookmarkModel::RemoveAndDeleteNode(BookmarkNode* delete_me) { | 891 void BookmarkModel::RemoveAndDeleteNode(BookmarkNode* delete_me) { |
893 scoped_ptr<BookmarkNode> node(delete_me); | 892 std::unique_ptr<BookmarkNode> node(delete_me); |
894 | 893 |
895 const BookmarkNode* parent = node->parent(); | 894 const BookmarkNode* parent = node->parent(); |
896 DCHECK(parent); | 895 DCHECK(parent); |
897 int index = parent->GetIndexOf(node.get()); | 896 int index = parent->GetIndexOf(node.get()); |
898 DCHECK_NE(-1, index); | 897 DCHECK_NE(-1, index); |
899 | 898 |
900 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, | 899 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, |
901 OnWillRemoveBookmarks(this, parent, index, node.get())); | 900 OnWillRemoveBookmarks(this, parent, index, node.get())); |
902 | 901 |
903 std::set<GURL> removed_urls; | 902 std::set<GURL> removed_urls; |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1082 if (node->is_url()) | 1081 if (node->is_url()) |
1083 nodes_ordered_by_url_set_.insert(node); | 1082 nodes_ordered_by_url_set_.insert(node); |
1084 for (int i = 0; i < node->child_count(); ++i) | 1083 for (int i = 0; i < node->child_count(); ++i) |
1085 PopulateNodesByURL(node->GetChild(i)); | 1084 PopulateNodesByURL(node->GetChild(i)); |
1086 } | 1085 } |
1087 | 1086 |
1088 int64_t BookmarkModel::generate_next_node_id() { | 1087 int64_t BookmarkModel::generate_next_node_id() { |
1089 return next_node_id_++; | 1088 return next_node_id_++; |
1090 } | 1089 } |
1091 | 1090 |
1092 scoped_ptr<BookmarkLoadDetails> BookmarkModel::CreateLoadDetails() { | 1091 std::unique_ptr<BookmarkLoadDetails> BookmarkModel::CreateLoadDetails() { |
1093 BookmarkPermanentNode* bb_node = | 1092 BookmarkPermanentNode* bb_node = |
1094 CreatePermanentNode(BookmarkNode::BOOKMARK_BAR); | 1093 CreatePermanentNode(BookmarkNode::BOOKMARK_BAR); |
1095 BookmarkPermanentNode* other_node = | 1094 BookmarkPermanentNode* other_node = |
1096 CreatePermanentNode(BookmarkNode::OTHER_NODE); | 1095 CreatePermanentNode(BookmarkNode::OTHER_NODE); |
1097 BookmarkPermanentNode* mobile_node = | 1096 BookmarkPermanentNode* mobile_node = |
1098 CreatePermanentNode(BookmarkNode::MOBILE); | 1097 CreatePermanentNode(BookmarkNode::MOBILE); |
1099 return scoped_ptr<BookmarkLoadDetails>(new BookmarkLoadDetails( | 1098 return std::unique_ptr<BookmarkLoadDetails>(new BookmarkLoadDetails( |
1100 bb_node, | 1099 bb_node, other_node, mobile_node, client_->GetLoadExtraNodesCallback(), |
1101 other_node, | 1100 new BookmarkIndex(client_.get()), next_node_id_)); |
1102 mobile_node, | |
1103 client_->GetLoadExtraNodesCallback(), | |
1104 new BookmarkIndex(client_.get()), | |
1105 next_node_id_)); | |
1106 } | 1101 } |
1107 | 1102 |
1108 void BookmarkModel::SetUndoDelegate(BookmarkUndoDelegate* undo_delegate) { | 1103 void BookmarkModel::SetUndoDelegate(BookmarkUndoDelegate* undo_delegate) { |
1109 undo_delegate_ = undo_delegate; | 1104 undo_delegate_ = undo_delegate; |
1110 if (undo_delegate_) | 1105 if (undo_delegate_) |
1111 undo_delegate_->SetUndoProvider(this); | 1106 undo_delegate_->SetUndoProvider(this); |
1112 } | 1107 } |
1113 | 1108 |
1114 BookmarkUndoDelegate* BookmarkModel::undo_delegate() const { | 1109 BookmarkUndoDelegate* BookmarkModel::undo_delegate() const { |
1115 return undo_delegate_ ? undo_delegate_ : empty_undo_delegate_.get(); | 1110 return undo_delegate_ ? undo_delegate_ : empty_undo_delegate_.get(); |
1116 } | 1111 } |
1117 | 1112 |
1118 } // namespace bookmarks | 1113 } // namespace bookmarks |
OLD | NEW |