| Index: chrome/browser/android/most_visited_sites.cc
|
| diff --git a/chrome/browser/android/most_visited_sites.cc b/chrome/browser/android/most_visited_sites.cc
|
| index 3e8e7f4126877ca965e254b276239f50df322b52..a41f6c83c7c456fd3c7d41653259aa6e1a236c4f 100644
|
| --- a/chrome/browser/android/most_visited_sites.cc
|
| +++ b/chrome/browser/android/most_visited_sites.cc
|
| @@ -29,6 +29,7 @@
|
| #include "chrome/browser/search/suggestions/suggestions_utils.h"
|
| #include "chrome/browser/supervised_user/supervised_user_service.h"
|
| #include "chrome/browser/supervised_user/supervised_user_service_factory.h"
|
| +#include "chrome/browser/supervised_user/supervised_user_url_filter.h"
|
| #include "chrome/browser/sync/profile_sync_service_factory.h"
|
| #include "chrome/browser/thumbnails/thumbnail_list_source.h"
|
| #include "chrome/common/chrome_switches.h"
|
| @@ -475,6 +476,9 @@ void MostVisitedSites::InitiateTopSitesQuery() {
|
|
|
| void MostVisitedSites::OnMostVisitedURLsAvailable(
|
| const history::MostVisitedURLList& visited_list) {
|
| + SupervisedUserURLFilter* url_filter =
|
| + SupervisedUserServiceFactory::GetForProfile(profile_)
|
| + ->GetURLFilterForUIThread();
|
| MostVisitedSites::SuggestionsVector suggestions;
|
| size_t num_tiles =
|
| std::min(visited_list.size(), static_cast<size_t>(num_sites_));
|
| @@ -484,6 +488,11 @@ void MostVisitedSites::OnMostVisitedURLsAvailable(
|
| num_tiles = i;
|
| break; // This is the signal that there are no more real visited sites.
|
| }
|
| + if (url_filter->GetFilteringBehaviorForURL(visited.url) ==
|
| + SupervisedUserURLFilter::FilteringBehavior::BLOCK) {
|
| + continue;
|
| + }
|
| +
|
| suggestions.push_back(make_scoped_ptr(
|
| new Suggestion(visited.title, visited.url.spec(), TOP_SITES)));
|
| }
|
| @@ -505,9 +514,17 @@ void MostVisitedSites::OnSuggestionsProfileAvailable(
|
| if (num_sites_ < num_tiles)
|
| num_tiles = num_sites_;
|
|
|
| + SupervisedUserURLFilter* url_filter =
|
| + SupervisedUserServiceFactory::GetForProfile(profile_)
|
| + ->GetURLFilterForUIThread();
|
| MostVisitedSites::SuggestionsVector suggestions;
|
| for (int i = 0; i < num_tiles; ++i) {
|
| const ChromeSuggestion& suggestion = suggestions_profile.suggestions(i);
|
| + if (url_filter->GetFilteringBehaviorForURL(GURL(suggestion.url())) ==
|
| + SupervisedUserURLFilter::FilteringBehavior::BLOCK) {
|
| + continue;
|
| + }
|
| +
|
| suggestions.push_back(make_scoped_ptr(new Suggestion(
|
| base::UTF8ToUTF16(suggestion.title()), suggestion.url(),
|
| SUGGESTIONS_SERVICE,
|
| @@ -531,8 +548,30 @@ MostVisitedSites::CreateWhitelistEntryPointSuggestions(
|
|
|
| SupervisedUserService* supervised_user_service =
|
| SupervisedUserServiceFactory::GetForProfile(profile_);
|
| + SupervisedUserURLFilter* url_filter =
|
| + supervised_user_service->GetURLFilterForUIThread();
|
| +
|
| + std::set<std::string> personal_hosts;
|
| + for (const auto& suggestion : personal_suggestions)
|
| + personal_hosts.insert(suggestion->url.host());
|
| + scoped_refptr<TopSites> top_sites(TopSitesFactory::GetForProfile(profile_));
|
|
|
| for (const auto& whitelist : supervised_user_service->whitelists()) {
|
| + // Skip blacklisted sites.
|
| + if (top_sites && top_sites->IsBlacklisted(whitelist->entry_point()))
|
| + continue;
|
| +
|
| + // Skip suggestions already present.
|
| + if (personal_hosts.find(whitelist->entry_point().host()) !=
|
| + personal_hosts.end())
|
| + continue;
|
| +
|
| + // Skip whitelist entry points that are manually blocked.
|
| + if (url_filter->GetFilteringBehaviorForURL(whitelist->entry_point()) ==
|
| + SupervisedUserURLFilter::FilteringBehavior::BLOCK) {
|
| + continue;
|
| + }
|
| +
|
| whitelist_suggestions.push_back(make_scoped_ptr(new Suggestion(
|
| whitelist->title(), whitelist->entry_point(), WHITELIST)));
|
| if (whitelist_suggestions.size() >= num_whitelist_suggestions)
|
| @@ -546,6 +585,10 @@ MostVisitedSites::SuggestionsVector
|
| MostVisitedSites::CreatePopularSitesSuggestions(
|
| const MostVisitedSites::SuggestionsVector& personal_suggestions,
|
| const MostVisitedSites::SuggestionsVector& whitelist_suggestions) {
|
| + // For child accounts popular sites suggestions will not be added.
|
| + if (profile_->IsChild())
|
| + return MostVisitedSites::SuggestionsVector();
|
| +
|
| size_t num_suggestions =
|
| personal_suggestions.size() + whitelist_suggestions.size();
|
| DCHECK_LE(num_suggestions, static_cast<size_t>(num_sites_));
|
| @@ -556,17 +599,19 @@ MostVisitedSites::CreatePopularSitesSuggestions(
|
| MostVisitedSites::SuggestionsVector popular_sites_suggestions;
|
|
|
| if (num_popular_sites_suggestions > 0 && popular_sites_) {
|
| - std::set<std::string> personal_hosts;
|
| + std::set<std::string> hosts;
|
| for (const auto& suggestion : personal_suggestions)
|
| - personal_hosts.insert(suggestion->url.host());
|
| + hosts.insert(suggestion->url.host());
|
| + for (const auto& suggestion : whitelist_suggestions)
|
| + hosts.insert(suggestion->url.host());
|
| scoped_refptr<TopSites> top_sites(TopSitesFactory::GetForProfile(profile_));
|
| for (const PopularSites::Site& popular_site : popular_sites_->sites()) {
|
| // Skip blacklisted sites.
|
| if (top_sites && top_sites->IsBlacklisted(popular_site.url))
|
| continue;
|
| std::string host = popular_site.url.host();
|
| - // Skip suggestions already present in personal.
|
| - if (personal_hosts.find(host) != personal_hosts.end())
|
| + // Skip suggestions already present in personal or whitelists.
|
| + if (hosts.find(host) != hosts.end())
|
| continue;
|
|
|
| popular_sites_suggestions.push_back(make_scoped_ptr(
|
|
|