Chromium Code Reviews| Index: chrome/browser/bookmarks/bookmark_model.cc |
| diff --git a/chrome/browser/bookmarks/bookmark_model.cc b/chrome/browser/bookmarks/bookmark_model.cc |
| index cdd91f5a973a1d0d8e0ba2b28e3f0da935a5f4b3..5f63e645f2a8e5bd053a381e0f6f0653b0462ba2 100644 |
| --- a/chrome/browser/bookmarks/bookmark_model.cc |
| +++ b/chrome/browser/bookmarks/bookmark_model.cc |
| @@ -22,11 +22,13 @@ |
| #include "chrome/browser/favicon/favicon_service_factory.h" |
| #include "chrome/browser/history/history_service.h" |
| #include "chrome/browser/history/history_service_factory.h" |
| +#include "chrome/browser/history/url_database.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "components/bookmarks/core/browser/bookmark_title_match.h" |
| #include "components/favicon_base/favicon_types.h" |
| #include "content/public/browser/notification_details.h" |
| #include "content/public/browser/notification_source.h" |
| +#include "content/public/browser/user_metrics.h" |
| #include "grit/generated_resources.h" |
| #include "ui/base/l10n/l10n_util.h" |
| #include "ui/gfx/favicon_size.h" |
| @@ -108,7 +110,8 @@ void BookmarkModel::Shutdown() { |
| } |
| void BookmarkModel::Load( |
| - const scoped_refptr<base::SequencedTaskRunner>& task_runner) { |
| + const scoped_refptr<base::SequencedTaskRunner>& io_task_runner, |
| + const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner) { |
| if (store_.get()) { |
| // If the store is non-null, it means Load was already invoked. Load should |
| // only be invoked once. |
| @@ -125,8 +128,8 @@ void BookmarkModel::Load( |
| content::Source<Profile>(profile_)); |
| // Load the bookmarks. BookmarkStorage notifies us when done. |
| - store_ = new BookmarkStorage(profile_, this, task_runner.get()); |
| - store_->LoadBookmarks(CreateLoadDetails()); |
| + store_ = new BookmarkStorage(this, profile_->GetPath(), io_task_runner.get()); |
| + store_->LoadBookmarks(CreateLoadDetails(), ui_task_runner); |
| } |
| const BookmarkNode* BookmarkModel::GetParentForNewNodes() { |
| @@ -621,7 +624,7 @@ void BookmarkModel::GetBookmarksWithTitlesMatching( |
| if (!loaded_) |
| return; |
| - index_->GetBookmarksWithTitlesMatching(text, max_count, matches); |
| + index_->GetBookmarksWithTitlesMatching(this, text, max_count, matches); |
| } |
| void BookmarkModel::ClearStore() { |
| @@ -887,19 +890,15 @@ void BookmarkModel::LoadFavicon(BookmarkNode* node) { |
| return; |
| DCHECK(node->url().is_valid()); |
| - FaviconService* favicon_service = FaviconServiceFactory::GetForProfile( |
| - profile_, Profile::EXPLICIT_ACCESS); |
| - if (!favicon_service) |
| - return; |
| - base::CancelableTaskTracker::TaskId taskId = |
| - favicon_service->GetFaviconImageForURL( |
| - FaviconService::FaviconForURLParams( |
| - node->url(), favicon_base::FAVICON, gfx::kFaviconSize), |
| - base::Bind(&BookmarkModel::OnFaviconDataAvailable, |
| - base::Unretained(this), |
| - node), |
| - &cancelable_task_tracker_); |
| - node->set_favicon_load_task_id(taskId); |
| + base::CancelableTaskTracker::TaskId taskId = GetFaviconImageForURL( |
| + node->url(), |
| + favicon_base::FAVICON, |
| + gfx::kFaviconSize, |
| + base::Bind( |
| + &BookmarkModel::OnFaviconDataAvailable, base::Unretained(this), node), |
| + &cancelable_task_tracker_); |
| + if (taskId != base::CancelableTaskTracker::kBadTaskId) |
| + node->set_favicon_load_task_id(taskId); |
| } |
| void BookmarkModel::FaviconLoaded(const BookmarkNode* node) { |
| @@ -963,7 +962,49 @@ BookmarkLoadDetails* BookmarkModel::CreateLoadDetails() { |
| CreatePermanentNode(BookmarkNode::OTHER_NODE); |
| BookmarkPermanentNode* mobile_node = |
| CreatePermanentNode(BookmarkNode::MOBILE); |
| - return new BookmarkLoadDetails(bb_node, other_node, mobile_node, |
| - new BookmarkIndex(profile_), |
| - next_node_id_); |
| + return new BookmarkLoadDetails( |
| + bb_node, other_node, mobile_node, new BookmarkIndex(), next_node_id_); |
| +} |
| + |
| +base::CancelableTaskTracker::TaskId BookmarkModel::GetFaviconImageForURL( |
|
sky
2014/04/18 17:05:04
Style guide says declaration order and definition
sdefresne
2014/04/18 22:25:49
Done.
|
| + const GURL& page_url, |
| + int icon_types, |
| + int desired_size_in_dip, |
| + const FaviconImageCallback& callback, |
| + base::CancelableTaskTracker* tracker) { |
| + FaviconService* favicon_service = |
| + FaviconServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS); |
| + if (!favicon_service) |
| + return base::CancelableTaskTracker::kBadTaskId; |
| + return favicon_service->GetFaviconImageForURL( |
| + FaviconService::FaviconForURLParams( |
| + page_url, icon_types, desired_size_in_dip), |
| + callback, |
| + tracker); |
| +} |
| + |
| +void BookmarkModel::GetTypedCountForNodes( |
| + const NodeSet& nodes, |
| + NodeTypedCountPairs* node_typed_count_pairs) { |
| + HistoryService* history_service = |
| + HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS); |
| + history::URLDatabase* url_db = |
| + history_service ? history_service->InMemoryDatabase() : NULL; |
| + for (NodeSet::const_iterator i = nodes.begin(); i != nodes.end(); ++i) { |
| + int typed_count = 0; |
| + |
| + // If |url_db| is the InMemoryDatabase, it might not cache all URLRows, but |
| + // it guarantees to contain those with |typed_count| > 0. Thus, if we cannot |
| + // fetch the URLRow, it is safe to assume that its |typed_count| is 0. |
| + history::URLRow url; |
| + if (url_db && url_db->GetRowForURL((*i)->url(), &url)) |
| + typed_count = url.typed_count(); |
| + |
| + NodeTypedCountPair pair(*i, typed_count); |
| + node_typed_count_pairs->push_back(pair); |
| + } |
| +} |
| + |
| +void BookmarkModel::RecordAction(const base::UserMetricsAction& action) { |
| + content::RecordAction(action); |
| } |