Index: chrome/browser/android/ntp/most_visited_sites.cc |
diff --git a/chrome/browser/android/ntp/most_visited_sites.cc b/chrome/browser/android/ntp/most_visited_sites.cc |
index 70b57bf9fb0096bc8c47c4acf59c7f149c096830..7b1de89be00a118b452baa49d13e27ffceee53a4 100644 |
--- a/chrome/browser/android/ntp/most_visited_sites.cc |
+++ b/chrome/browser/android/ntp/most_visited_sites.cc |
@@ -16,7 +16,6 @@ |
#include "base/strings/stringprintf.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/time/time.h" |
-#include "chrome/browser/android/ntp/popular_sites.h" |
#include "chrome/browser/history/top_sites_factory.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/search/suggestions/suggestions_service_factory.h" |
@@ -149,14 +148,9 @@ bool AreURLsEquivalent(const GURL& url1, const GURL& url2) { |
return url1.host() == url2.host() && url1.path() == url2.path(); |
} |
-} // namespace |
- |
-MostVisitedSites::Suggestion::Suggestion() : provider_index(-1) {} |
- |
-MostVisitedSites::Suggestion::~Suggestion() {} |
- |
-std::string MostVisitedSites::Suggestion::GetSourceHistogramName() const { |
- switch (source) { |
+std::string GetSourceHistogramName( |
+ const MostVisitedSites::Suggestion& suggestion) { |
+ switch (suggestion.source) { |
case MostVisitedSites::TOP_SITES: |
return kHistogramClientName; |
case MostVisitedSites::POPULAR: |
@@ -164,14 +158,25 @@ std::string MostVisitedSites::Suggestion::GetSourceHistogramName() const { |
case MostVisitedSites::WHITELIST: |
return kHistogramWhitelistName; |
case MostVisitedSites::SUGGESTIONS_SERVICE: |
- return provider_index >= 0 |
- ? base::StringPrintf(kHistogramServerFormat, provider_index) |
+ return suggestion.provider_index >= 0 |
+ ? base::StringPrintf(kHistogramServerFormat, |
+ suggestion.provider_index) |
: kHistogramServerName; |
} |
NOTREACHED(); |
return std::string(); |
} |
+} // namespace |
+ |
+MostVisitedSites::Suggestion::Suggestion() : provider_index(-1) {} |
+ |
+MostVisitedSites::Suggestion::~Suggestion() {} |
+ |
+MostVisitedSites::Suggestion::Suggestion(Suggestion&&) = default; |
+MostVisitedSites::Suggestion& |
+MostVisitedSites::Suggestion::operator=(Suggestion&&) = default; |
+ |
MostVisitedSites::MostVisitedSites(Profile* profile) |
: profile_(profile), observer_(nullptr), num_sites_(0), |
received_most_visited_sites_(false), received_popular_sites_(false), |
@@ -191,7 +196,7 @@ MostVisitedSites::~MostVisitedSites() { |
} |
void MostVisitedSites::SetMostVisitedURLsObserver( |
- MostVisitedSitesObserver* observer, int num_sites) { |
+ MostVisitedSites::Observer* observer, int num_sites) { |
observer_ = observer; |
num_sites_ = num_sites; |
@@ -322,7 +327,7 @@ void MostVisitedSites::RecordTileTypeMetrics( |
++counts_per_type[tile_type]; |
std::string histogram = base::StringPrintf( |
"NewTabPage.TileType.%s", |
- current_suggestions_[i]->GetSourceHistogramName().c_str()); |
+ GetSourceHistogramName(current_suggestions_[i]).c_str()); |
LogHistogramEvent(histogram, tile_type, NUM_TILE_TYPES); |
} |
@@ -339,12 +344,12 @@ void MostVisitedSites::RecordOpenedMostVisitedItem(int index, int tile_type) { |
DCHECK_LT(index, static_cast<int>(current_suggestions_.size())); |
std::string histogram = base::StringPrintf( |
"NewTabPage.MostVisited.%s", |
- current_suggestions_[index]->GetSourceHistogramName().c_str()); |
+ GetSourceHistogramName(current_suggestions_[index]).c_str()); |
LogHistogramEvent(histogram, index, num_sites_); |
histogram = base::StringPrintf( |
"NewTabPage.TileTypeClicked.%s", |
- current_suggestions_[index]->GetSourceHistogramName().c_str()); |
+ GetSourceHistogramName(current_suggestions_[index]).c_str()); |
LogHistogramEvent(histogram, tile_type, NUM_TILE_TYPES); |
} |
@@ -402,7 +407,7 @@ void MostVisitedSites::OnMostVisitedURLsAvailable( |
SupervisedUserServiceFactory::GetForProfile(profile_) |
->GetURLFilterForUIThread(); |
- MostVisitedSites::SuggestionsVector suggestions; |
+ MostVisitedSites::SuggestionsPtrVector suggestions; |
size_t num_tiles = |
std::min(visited_list.size(), static_cast<size_t>(num_sites_)); |
for (size_t i = 0; i < num_tiles; ++i) { |
@@ -445,7 +450,7 @@ void MostVisitedSites::OnSuggestionsProfileAvailable( |
SupervisedUserURLFilter* url_filter = |
SupervisedUserServiceFactory::GetForProfile(profile_) |
->GetURLFilterForUIThread(); |
- MostVisitedSites::SuggestionsVector suggestions; |
+ MostVisitedSites::SuggestionsPtrVector suggestions; |
for (int i = 0; i < num_tiles; ++i) { |
const ChromeSuggestion& suggestion = suggestions_profile.suggestions(i); |
if (url_filter->GetFilteringBehaviorForURL(GURL(suggestion.url())) == |
@@ -471,14 +476,14 @@ void MostVisitedSites::OnSuggestionsProfileAvailable( |
NotifyMostVisitedURLsObserver(); |
} |
-MostVisitedSites::SuggestionsVector |
+MostVisitedSites::SuggestionsPtrVector |
MostVisitedSites::CreateWhitelistEntryPointSuggestions( |
- const MostVisitedSites::SuggestionsVector& personal_suggestions) { |
+ const MostVisitedSites::SuggestionsPtrVector& personal_suggestions) { |
size_t num_personal_suggestions = personal_suggestions.size(); |
DCHECK_LE(num_personal_suggestions, static_cast<size_t>(num_sites_)); |
size_t num_whitelist_suggestions = num_sites_ - num_personal_suggestions; |
- MostVisitedSites::SuggestionsVector whitelist_suggestions; |
+ MostVisitedSites::SuggestionsPtrVector whitelist_suggestions; |
SupervisedUserService* supervised_user_service = |
SupervisedUserServiceFactory::GetForProfile(profile_); |
@@ -520,13 +525,13 @@ MostVisitedSites::CreateWhitelistEntryPointSuggestions( |
return whitelist_suggestions; |
} |
-MostVisitedSites::SuggestionsVector |
+MostVisitedSites::SuggestionsPtrVector |
MostVisitedSites::CreatePopularSitesSuggestions( |
- const MostVisitedSites::SuggestionsVector& personal_suggestions, |
- const MostVisitedSites::SuggestionsVector& whitelist_suggestions) { |
+ const MostVisitedSites::SuggestionsPtrVector& personal_suggestions, |
+ const MostVisitedSites::SuggestionsPtrVector& whitelist_suggestions) { |
// For child accounts popular sites suggestions will not be added. |
if (profile_->IsChild()) |
- return MostVisitedSites::SuggestionsVector(); |
+ return MostVisitedSites::SuggestionsPtrVector(); |
size_t num_suggestions = |
personal_suggestions.size() + whitelist_suggestions.size(); |
@@ -535,7 +540,7 @@ MostVisitedSites::CreatePopularSitesSuggestions( |
// Collect non-blacklisted popular suggestions, skipping those already present |
// in the personal suggestions. |
size_t num_popular_sites_suggestions = num_sites_ - num_suggestions; |
- MostVisitedSites::SuggestionsVector popular_sites_suggestions; |
+ MostVisitedSites::SuggestionsPtrVector popular_sites_suggestions; |
if (num_popular_sites_suggestions > 0 && popular_sites_) { |
std::set<std::string> hosts; |
@@ -567,10 +572,10 @@ MostVisitedSites::CreatePopularSitesSuggestions( |
} |
void MostVisitedSites::SaveNewNTPSuggestions( |
- MostVisitedSites::SuggestionsVector* personal_suggestions) { |
- MostVisitedSites::SuggestionsVector whitelist_suggestions = |
+ MostVisitedSites::SuggestionsPtrVector* personal_suggestions) { |
+ MostVisitedSites::SuggestionsPtrVector whitelist_suggestions = |
CreateWhitelistEntryPointSuggestions(*personal_suggestions); |
- MostVisitedSites::SuggestionsVector popular_sites_suggestions = |
+ MostVisitedSites::SuggestionsPtrVector popular_sites_suggestions = |
CreatePopularSitesSuggestions(*personal_suggestions, |
whitelist_suggestions); |
size_t num_actual_tiles = personal_suggestions->size() + |
@@ -582,20 +587,22 @@ void MostVisitedSites::SaveNewNTPSuggestions( |
// |old_sites_url| and |old_sites_is_personal|, but that caused problems |
// (crbug.com/585391). Either figure out a way to fix them and re-enable, |
// or properly remove the order-persisting code. crbug.com/601734 |
- MostVisitedSites::SuggestionsVector merged_suggestions = MergeSuggestions( |
+ MostVisitedSites::SuggestionsPtrVector merged_suggestions = MergeSuggestions( |
personal_suggestions, &whitelist_suggestions, &popular_sites_suggestions, |
old_sites_url, old_sites_is_personal); |
DCHECK_EQ(num_actual_tiles, merged_suggestions.size()); |
- current_suggestions_.swap(merged_suggestions); |
+ current_suggestions_.resize(merged_suggestions.size()); |
+ for (size_t i = 0; i < merged_suggestions.size(); ++i) |
+ std::swap(*merged_suggestions[i], current_suggestions_[i]); |
if (received_popular_sites_) |
SaveCurrentNTPSites(); |
} |
// static |
-MostVisitedSites::SuggestionsVector MostVisitedSites::MergeSuggestions( |
- MostVisitedSites::SuggestionsVector* personal_suggestions, |
- MostVisitedSites::SuggestionsVector* whitelist_suggestions, |
- MostVisitedSites::SuggestionsVector* popular_suggestions, |
+MostVisitedSites::SuggestionsPtrVector MostVisitedSites::MergeSuggestions( |
+ MostVisitedSites::SuggestionsPtrVector* personal_suggestions, |
+ MostVisitedSites::SuggestionsPtrVector* whitelist_suggestions, |
+ MostVisitedSites::SuggestionsPtrVector* popular_suggestions, |
const std::vector<std::string>& old_sites_url, |
const std::vector<bool>& old_sites_is_personal) { |
size_t num_personal_suggestions = personal_suggestions->size(); |
@@ -603,7 +610,7 @@ MostVisitedSites::SuggestionsVector MostVisitedSites::MergeSuggestions( |
size_t num_popular_suggestions = popular_suggestions->size(); |
size_t num_tiles = num_popular_suggestions + num_whitelist_suggestions + |
num_personal_suggestions; |
- MostVisitedSites::SuggestionsVector merged_suggestions; |
+ MostVisitedSites::SuggestionsPtrVector merged_suggestions; |
merged_suggestions.resize(num_tiles); |
size_t num_old_tiles = old_sites_url.size(); |
@@ -676,8 +683,8 @@ void MostVisitedSites::SaveCurrentNTPSites() { |
base::ListValue url_list; |
base::ListValue source_list; |
for (const auto& suggestion : current_suggestions_) { |
- url_list.AppendString(suggestion->url.spec()); |
- source_list.AppendBoolean(suggestion->source != MostVisitedSites::POPULAR); |
+ url_list.AppendString(suggestion.url.spec()); |
+ source_list.AppendBoolean(suggestion.source != MostVisitedSites::POPULAR); |
} |
PrefService* prefs = profile_->GetPrefs(); |
prefs->Set(prefs::kNTPSuggestionsIsPersonal, source_list); |
@@ -686,8 +693,8 @@ void MostVisitedSites::SaveCurrentNTPSites() { |
// static |
std::vector<size_t> MostVisitedSites::InsertMatchingSuggestions( |
- MostVisitedSites::SuggestionsVector* src_suggestions, |
- MostVisitedSites::SuggestionsVector* dst_suggestions, |
+ MostVisitedSites::SuggestionsPtrVector* src_suggestions, |
+ MostVisitedSites::SuggestionsPtrVector* dst_suggestions, |
const std::vector<std::string>& match_urls, |
const std::vector<std::string>& match_hosts) { |
std::vector<size_t> unmatched_suggestions; |
@@ -750,18 +757,7 @@ void MostVisitedSites::NotifyMostVisitedURLsObserver() { |
if (!observer_) |
return; |
- std::vector<base::string16> titles; |
- std::vector<std::string> urls; |
- std::vector<std::string> whitelist_icon_paths; |
- titles.reserve(num_suggestions); |
- urls.reserve(num_suggestions); |
- for (const auto& suggestion : current_suggestions_) { |
- titles.push_back(suggestion->title); |
- urls.push_back(suggestion->url.spec()); |
- whitelist_icon_paths.push_back(suggestion->whitelist_icon_path.value()); |
- } |
- |
- observer_->OnMostVisitedURLsAvailable(titles, urls, whitelist_icon_paths); |
+ observer_->OnMostVisitedURLsAvailable(current_suggestions_); |
} |
void MostVisitedSites::OnPopularSitesAvailable(bool success) { |
@@ -775,15 +771,7 @@ void MostVisitedSites::OnPopularSitesAvailable(bool success) { |
if (!observer_) |
return; |
- std::vector<std::string> urls; |
- std::vector<std::string> favicon_urls; |
- std::vector<std::string> large_icon_urls; |
- for (const PopularSites::Site& popular_site : popular_sites_->sites()) { |
- urls.push_back(popular_site.url.spec()); |
- favicon_urls.push_back(popular_site.favicon_url.spec()); |
- large_icon_urls.push_back(popular_site.large_icon_url.spec()); |
- } |
- observer_->OnPopularURLsAvailable(urls, favicon_urls, large_icon_urls); |
+ observer_->OnPopularURLsAvailable(popular_sites_->sites()); |
QueryMostVisitedURLs(); |
} |
@@ -791,7 +779,7 @@ void MostVisitedSites::RecordImpressionUMAMetrics() { |
for (size_t i = 0; i < current_suggestions_.size(); i++) { |
std::string histogram = base::StringPrintf( |
"NewTabPage.SuggestionsImpression.%s", |
- current_suggestions_[i]->GetSourceHistogramName().c_str()); |
+ GetSourceHistogramName(current_suggestions_[i]).c_str()); |
LogHistogramEvent(histogram, static_cast<int>(i), num_sites_); |
} |
} |