| 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 |