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 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" |
12 #include "base/i18n/string_compare.h" | 12 #include "base/i18n/string_compare.h" |
13 #include "base/logging.h" | 13 #include "base/logging.h" |
14 #include "base/macros.h" | 14 #include "base/macros.h" |
15 #include "base/profiler/scoped_tracker.h" | 15 #include "base/profiler/scoped_tracker.h" |
16 #include "base/strings/string_util.h" | 16 #include "base/strings/string_util.h" |
| 17 #include "components/bookmarks/browser/bookmark_client.h" |
17 #include "components/bookmarks/browser/bookmark_expanded_state_tracker.h" | 18 #include "components/bookmarks/browser/bookmark_expanded_state_tracker.h" |
18 #include "components/bookmarks/browser/bookmark_index.h" | 19 #include "components/bookmarks/browser/bookmark_index.h" |
19 #include "components/bookmarks/browser/bookmark_match.h" | 20 #include "components/bookmarks/browser/bookmark_match.h" |
20 #include "components/bookmarks/browser/bookmark_model_observer.h" | 21 #include "components/bookmarks/browser/bookmark_model_observer.h" |
21 #include "components/bookmarks/browser/bookmark_node_data.h" | 22 #include "components/bookmarks/browser/bookmark_node_data.h" |
22 #include "components/bookmarks/browser/bookmark_storage.h" | 23 #include "components/bookmarks/browser/bookmark_storage.h" |
23 #include "components/bookmarks/browser/bookmark_utils.h" | 24 #include "components/bookmarks/browser/bookmark_utils.h" |
24 #include "components/favicon_base/favicon_types.h" | 25 #include "components/favicon_base/favicon_types.h" |
25 #include "grit/components_strings.h" | 26 #include "grit/components_strings.h" |
26 #include "ui/base/l10n/l10n_util.h" | 27 #include "ui/base/l10n/l10n_util.h" |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 } | 86 } |
86 | 87 |
87 private: | 88 private: |
88 icu::Collator* collator_; | 89 icu::Collator* collator_; |
89 }; | 90 }; |
90 | 91 |
91 } // namespace | 92 } // namespace |
92 | 93 |
93 // BookmarkModel -------------------------------------------------------------- | 94 // BookmarkModel -------------------------------------------------------------- |
94 | 95 |
95 BookmarkModel::BookmarkModel(BookmarkClient* client) | 96 BookmarkModel::BookmarkModel(scoped_ptr<BookmarkClient> bookmark_client) |
96 : client_(client), | 97 : bookmark_client_(bookmark_client.Pass()), |
97 loaded_(false), | 98 loaded_(false), |
98 root_(GURL()), | 99 root_(GURL()), |
99 bookmark_bar_node_(nullptr), | 100 bookmark_bar_node_(nullptr), |
100 other_node_(nullptr), | 101 other_node_(nullptr), |
101 mobile_node_(nullptr), | 102 mobile_node_(nullptr), |
102 managed_node_(nullptr), | 103 managed_node_(nullptr), |
103 supervised_node_(nullptr), | 104 supervised_node_(nullptr), |
104 next_node_id_(1), | 105 next_node_id_(1), |
105 observers_( | 106 observers_( |
106 base::ObserverList<BookmarkModelObserver>::NOTIFY_EXISTING_ONLY), | 107 base::ObserverList<BookmarkModelObserver>::NOTIFY_EXISTING_ONLY), |
107 loaded_signal_(true, false), | 108 loaded_signal_(true, false), |
108 extensive_changes_(0) { | 109 extensive_changes_(0) { |
109 DCHECK(client_); | 110 DCHECK(bookmark_client_); |
| 111 bookmark_client_->Init(this); |
110 } | 112 } |
111 | 113 |
112 BookmarkModel::~BookmarkModel() { | 114 BookmarkModel::~BookmarkModel() { |
113 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, | 115 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, |
114 BookmarkModelBeingDeleted(this)); | 116 BookmarkModelBeingDeleted(this)); |
115 | 117 |
116 if (store_.get()) { | 118 if (store_.get()) { |
117 // The store maintains a reference back to us. We need to tell it we're gone | 119 // The store maintains a reference back to us. We need to tell it we're gone |
118 // so that it doesn't try and invoke a method back on us again. | 120 // so that it doesn't try and invoke a method back on us again. |
119 store_->BookmarkModelDeleted(); | 121 store_->BookmarkModelDeleted(); |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
472 if (node == supervised_node_ || node == managed_node_) | 474 if (node == supervised_node_ || node == managed_node_) |
473 return false; | 475 return false; |
474 #if !defined(OS_IOS) | 476 #if !defined(OS_IOS) |
475 return node->type() != BookmarkNode::MOBILE; | 477 return node->type() != BookmarkNode::MOBILE; |
476 #else | 478 #else |
477 return node->type() == BookmarkNode::MOBILE; | 479 return node->type() == BookmarkNode::MOBILE; |
478 #endif | 480 #endif |
479 } | 481 } |
480 | 482 |
481 void BookmarkModel::RecordAction(const base::UserMetricsAction& action) { | 483 void BookmarkModel::RecordAction(const base::UserMetricsAction& action) { |
482 client_->RecordAction(action); | 484 bookmark_client_->RecordAction(action); |
483 } | 485 } |
484 | 486 |
485 void BookmarkModel::SetDateAdded(const BookmarkNode* node, Time date_added) { | 487 void BookmarkModel::SetDateAdded(const BookmarkNode* node, Time date_added) { |
486 DCHECK(node && !is_permanent_node(node)); | 488 DCHECK(node && !is_permanent_node(node)); |
487 | 489 |
488 if (node->date_added() == date_added) | 490 if (node->date_added() == date_added) |
489 return; | 491 return; |
490 | 492 |
491 AsMutable(node)->set_date_added(date_added); | 493 AsMutable(node)->set_date_added(date_added); |
492 | 494 |
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
841 // TODO(robliao): Remove ScopedTracker below once https://crbug.com/467179 | 843 // TODO(robliao): Remove ScopedTracker below once https://crbug.com/467179 |
842 // is fixed. | 844 // is fixed. |
843 tracked_objects::ScopedTracker tracking_profile6( | 845 tracked_objects::ScopedTracker tracking_profile6( |
844 FROM_HERE_WITH_EXPLICIT_FUNCTION("467179 BookmarkModel::DoneLoading6")); | 846 FROM_HERE_WITH_EXPLICIT_FUNCTION("467179 BookmarkModel::DoneLoading6")); |
845 | 847 |
846 // Notify our direct observers. | 848 // Notify our direct observers. |
847 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, | 849 FOR_EACH_OBSERVER(BookmarkModelObserver, observers_, |
848 BookmarkModelLoaded(this, details->ids_reassigned())); | 850 BookmarkModelLoaded(this, details->ids_reassigned())); |
849 | 851 |
850 // Notify client. | 852 // Notify client. |
851 client_->DoneLoading(managed_node_, supervised_node_); | 853 bookmark_client_->DoneLoading(managed_node_, supervised_node_); |
852 } | 854 } |
853 | 855 |
854 void BookmarkModel::RemoveAndDeleteNode(BookmarkNode* delete_me) { | 856 void BookmarkModel::RemoveAndDeleteNode(BookmarkNode* delete_me) { |
855 scoped_ptr<BookmarkNode> node(delete_me); | 857 scoped_ptr<BookmarkNode> node(delete_me); |
856 | 858 |
857 const BookmarkNode* parent = node->parent(); | 859 const BookmarkNode* parent = node->parent(); |
858 DCHECK(parent); | 860 DCHECK(parent); |
859 int index = parent->GetIndexOf(node.get()); | 861 int index = parent->GetIndexOf(node.get()); |
860 DCHECK_NE(-1, index); | 862 DCHECK_NE(-1, index); |
861 | 863 |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1002 } | 1004 } |
1003 | 1005 |
1004 void BookmarkModel::LoadFavicon(BookmarkNode* node, | 1006 void BookmarkModel::LoadFavicon(BookmarkNode* node, |
1005 favicon_base::IconType icon_type) { | 1007 favicon_base::IconType icon_type) { |
1006 if (node->is_folder()) | 1008 if (node->is_folder()) |
1007 return; | 1009 return; |
1008 | 1010 |
1009 DCHECK(node->url().is_valid()); | 1011 DCHECK(node->url().is_valid()); |
1010 node->set_favicon_state(BookmarkNode::LOADING_FAVICON); | 1012 node->set_favicon_state(BookmarkNode::LOADING_FAVICON); |
1011 base::CancelableTaskTracker::TaskId taskId = | 1013 base::CancelableTaskTracker::TaskId taskId = |
1012 client_->GetFaviconImageForPageURL( | 1014 bookmark_client_->GetFaviconImageForPageURL( |
1013 node->url(), | 1015 node->url(), |
1014 icon_type, | 1016 icon_type, |
1015 base::Bind( | 1017 base::Bind( |
1016 &BookmarkModel::OnFaviconDataAvailable, | 1018 &BookmarkModel::OnFaviconDataAvailable, |
1017 base::Unretained(this), | 1019 base::Unretained(this), |
1018 node, | 1020 node, |
1019 icon_type), | 1021 icon_type), |
1020 &cancelable_task_tracker_); | 1022 &cancelable_task_tracker_); |
1021 if (taskId != base::CancelableTaskTracker::kBadTaskId) | 1023 if (taskId != base::CancelableTaskTracker::kBadTaskId) |
1022 node->set_favicon_load_task_id(taskId); | 1024 node->set_favicon_load_task_id(taskId); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1057 CreatePermanentNode(BookmarkNode::MOBILE); | 1059 CreatePermanentNode(BookmarkNode::MOBILE); |
1058 // Create the managed_node and supervised_node with a temporary id of 0 now. | 1060 // Create the managed_node and supervised_node with a temporary id of 0 now. |
1059 // They will be populated and assigned property ids by the LoadExtraCallback | 1061 // They will be populated and assigned property ids by the LoadExtraCallback |
1060 // returned by GetLoadExtraNodesCallback(). Ownership of the node is | 1062 // returned by GetLoadExtraNodesCallback(). Ownership of the node is |
1061 // transferred to the closure. | 1063 // transferred to the closure. |
1062 scoped_ptr<BookmarkPermanentNode> managed_node(new BookmarkPermanentNode(0)); | 1064 scoped_ptr<BookmarkPermanentNode> managed_node(new BookmarkPermanentNode(0)); |
1063 scoped_ptr<BookmarkPermanentNode> supervised_node( | 1065 scoped_ptr<BookmarkPermanentNode> supervised_node( |
1064 new BookmarkPermanentNode(0)); | 1066 new BookmarkPermanentNode(0)); |
1065 return scoped_ptr<BookmarkLoadDetails>(new BookmarkLoadDetails( | 1067 return scoped_ptr<BookmarkLoadDetails>(new BookmarkLoadDetails( |
1066 bb_node, other_node, mobile_node, | 1068 bb_node, other_node, mobile_node, |
1067 client_->GetLoadExtraNodesCallback( | 1069 bookmark_client_->GetLoadExtraNodesCallback( |
1068 managed_node.Pass(), supervised_node.Pass(), | 1070 managed_node.Pass(), supervised_node.Pass(), |
1069 base::Bind(&BookmarkModel::OnExtraNodeLoaded, | 1071 base::Bind(&BookmarkModel::OnExtraNodeLoaded, |
1070 base::Unretained(this))), | 1072 base::Unretained(this))), |
1071 new BookmarkIndex(client_, accept_languages), next_node_id_)); | 1073 new BookmarkIndex(bookmark_client_.get(), accept_languages), |
| 1074 next_node_id_)); |
1072 } | 1075 } |
1073 | 1076 |
1074 void BookmarkModel::OnExtraNodeLoaded(BookmarkPermanentNode* managed_node, | 1077 void BookmarkModel::OnExtraNodeLoaded(BookmarkPermanentNode* managed_node, |
1075 BookmarkPermanentNode* supervised_node) { | 1078 BookmarkPermanentNode* supervised_node) { |
1076 managed_node_ = managed_node; | 1079 managed_node_ = managed_node; |
1077 supervised_node_ = supervised_node; | 1080 supervised_node_ = supervised_node; |
1078 } | 1081 } |
1079 | 1082 |
1080 bool BookmarkModel::IsTopLevelPermanentNode(const BookmarkPermanentNode* node) { | 1083 bool BookmarkModel::IsTopLevelPermanentNode(const BookmarkPermanentNode* node) { |
1081 return node->type() == BookmarkNode::BOOKMARK_BAR || | 1084 return node->type() == BookmarkNode::BOOKMARK_BAR || |
(...skipping 15 matching lines...) Expand all Loading... |
1097 | 1100 |
1098 bool BookmarkModel::PreferTouchIcon() { | 1101 bool BookmarkModel::PreferTouchIcon() { |
1099 #if !defined(OS_IOS) | 1102 #if !defined(OS_IOS) |
1100 return false; | 1103 return false; |
1101 #else | 1104 #else |
1102 return true; | 1105 return true; |
1103 #endif | 1106 #endif |
1104 } | 1107 } |
1105 | 1108 |
1106 } // namespace bookmarks | 1109 } // namespace bookmarks |
OLD | NEW |