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 a41f6c83c7c456fd3c7d41653259aa6e1a236c4f..edec09862d7b3afa98b8fd8f52479dfb6876c12f 100644 |
--- a/chrome/browser/android/most_visited_sites.cc |
+++ b/chrome/browser/android/most_visited_sites.cc |
@@ -26,19 +26,15 @@ |
#include "chrome/browser/profiles/profile_android.h" |
#include "chrome/browser/search/suggestions/suggestions_service_factory.h" |
#include "chrome/browser/search/suggestions/suggestions_source.h" |
-#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" |
#include "chrome/common/pref_names.h" |
-#include "components/browser_sync/browser/profile_sync_service.h" |
#include "components/history/core/browser/top_sites.h" |
#include "components/pref_registry/pref_registry_syncable.h" |
#include "components/prefs/pref_service.h" |
-#include "components/suggestions/suggestions_service.h" |
#include "components/variations/variations_associated_data.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/url_data_source.h" |
@@ -211,12 +207,11 @@ MostVisitedSites::MostVisitedSites(Profile* profile) |
new suggestions::SuggestionsSource(profile_)); |
content::URLDataSource::Add(profile_, new ThumbnailListSource(profile_)); |
- // Register this class as an observer to the sync service. It is important to |
- // be notified of changes in the sync state such as initialization, sync |
- // being enabled or disabled, etc. |
- ProfileSyncService* profile_sync_service = |
- ProfileSyncServiceFactory::GetForProfile(profile_); |
- profile_sync_service->AddObserver(this); |
+ SuggestionsService* suggestions_service = |
+ SuggestionsServiceFactory::GetForProfile(profile_); |
+ suggestions_subscription_ = suggestions_service->AddCallback( |
+ base::Bind(&MostVisitedSites::OnSuggestionsProfileAvailable, |
+ base::Unretained(this))); |
SupervisedUserService* supervised_user_service = |
SupervisedUserServiceFactory::GetForProfile(profile_); |
@@ -224,10 +219,6 @@ MostVisitedSites::MostVisitedSites(Profile* profile) |
} |
MostVisitedSites::~MostVisitedSites() { |
- ProfileSyncService* profile_sync_service = |
- ProfileSyncServiceFactory::GetForProfile(profile_); |
- profile_sync_service->RemoveObserver(this); |
- |
SupervisedUserService* supervised_user_service = |
SupervisedUserServiceFactory::GetForProfile(profile_); |
supervised_user_service->RemoveObserver(this); |
@@ -258,10 +249,13 @@ void MostVisitedSites::SetMostVisitedURLsObserver( |
received_popular_sites_ = true; |
} |
+ OnSuggestionsProfileAvailable( |
+ SuggestionsServiceFactory::GetForProfile(profile_) |
+ ->GetSuggestionsDataFromCache()); |
+ |
QueryMostVisitedURLs(); |
- scoped_refptr<history::TopSites> top_sites = |
- TopSitesFactory::GetForProfile(profile_); |
+ scoped_refptr<TopSites> top_sites = TopSitesFactory::GetForProfile(profile_); |
if (top_sites) { |
// TopSites updates itself after a delay. To ensure up-to-date results, |
// force an update now. |
@@ -309,28 +303,25 @@ void MostVisitedSites::OnLocalThumbnailFetched( |
// SuggestionsService can supply a thumbnail download URL. |
SuggestionsService* suggestions_service = |
SuggestionsServiceFactory::GetForProfile(profile_); |
- if (suggestions_service) { |
- if (popular_sites_) { |
- const std::vector<PopularSites::Site>& sites = popular_sites_->sites(); |
- auto it = std::find_if(sites.begin(), sites.end(), |
- [&url](const PopularSites::Site& site) { |
- return site.url == url; |
- }); |
- if (it != sites.end() && it->thumbnail_url.is_valid()) { |
- return suggestions_service->GetPageThumbnailWithURL( |
- url, it->thumbnail_url, |
- base::Bind(&MostVisitedSites::OnObtainedThumbnail, |
- weak_ptr_factory_.GetWeakPtr(), false, |
- base::Passed(&j_callback))); |
- } |
- } |
- if (mv_source_ == SUGGESTIONS_SERVICE) { |
- return suggestions_service->GetPageThumbnail( |
- url, base::Bind(&MostVisitedSites::OnObtainedThumbnail, |
- weak_ptr_factory_.GetWeakPtr(), false, |
- base::Passed(&j_callback))); |
+ if (popular_sites_) { |
+ const std::vector<PopularSites::Site>& sites = popular_sites_->sites(); |
+ auto it = std::find_if( |
+ sites.begin(), sites.end(), |
+ [&url](const PopularSites::Site& site) { return site.url == url; }); |
+ if (it != sites.end() && it->thumbnail_url.is_valid()) { |
+ return suggestions_service->GetPageThumbnailWithURL( |
+ url, it->thumbnail_url, |
+ base::Bind(&MostVisitedSites::OnObtainedThumbnail, |
+ weak_ptr_factory_.GetWeakPtr(), false, |
+ base::Passed(&j_callback))); |
} |
} |
+ if (mv_source_ == SUGGESTIONS_SERVICE) { |
+ return suggestions_service->GetPageThumbnail( |
+ url, base::Bind(&MostVisitedSites::OnObtainedThumbnail, |
+ weak_ptr_factory_.GetWeakPtr(), false, |
+ base::Passed(&j_callback))); |
+ } |
} |
OnObtainedThumbnail(true, std::move(j_callback), url, bitmap.get()); |
} |
@@ -359,26 +350,20 @@ void MostVisitedSites::AddOrRemoveBlacklistedUrl( |
// Always blacklist in the local TopSites. |
scoped_refptr<TopSites> top_sites = TopSitesFactory::GetForProfile(profile_); |
if (top_sites) { |
- if (add_url) { |
+ if (add_url) |
top_sites->AddBlacklistedURL(url); |
- } else { |
+ else |
top_sites->RemoveBlacklistedURL(url); |
- } |
} |
// Only blacklist in the server-side suggestions service if it's active. |
if (mv_source_ == SUGGESTIONS_SERVICE) { |
SuggestionsService* suggestions_service = |
SuggestionsServiceFactory::GetForProfile(profile_); |
- DCHECK(suggestions_service); |
- suggestions::SuggestionsService::ResponseCallback callback( |
- base::Bind(&MostVisitedSites::OnSuggestionsProfileAvailable, |
- weak_ptr_factory_.GetWeakPtr())); |
- if (add_url) { |
- suggestions_service->BlacklistURL(url, callback, base::Closure()); |
- } else { |
- suggestions_service->UndoBlacklistURL(url, callback, base::Closure()); |
- } |
+ if (add_url) |
+ suggestions_service->BlacklistURL(url); |
+ else |
+ suggestions_service->UndoBlacklistURL(url); |
} |
} |
@@ -426,13 +411,6 @@ void MostVisitedSites::RecordOpenedMostVisitedItem( |
LogHistogramEvent(histogram, tile_type, NUM_TILE_TYPES); |
} |
-void MostVisitedSites::OnStateChanged() { |
- // There have been changes to the sync state. This class cares about a few |
- // (just initialized, enabled/disabled or history sync state changed). Re-run |
- // the query code which will use the proper state. |
- QueryMostVisitedURLs(); |
-} |
- |
void MostVisitedSites::OnURLFilterChanged() { |
QueryMostVisitedURLs(); |
} |
@@ -452,15 +430,8 @@ void MostVisitedSites::RegisterProfilePrefs( |
void MostVisitedSites::QueryMostVisitedURLs() { |
SuggestionsService* suggestions_service = |
SuggestionsServiceFactory::GetForProfile(profile_); |
- if (suggestions_service) { |
- // Suggestions service is enabled, initiate a query. |
- suggestions_service->FetchSuggestionsData( |
- suggestions::GetSyncState(profile_), |
- base::Bind(&MostVisitedSites::OnSuggestionsProfileAvailable, |
- weak_ptr_factory_.GetWeakPtr())); |
- } else { |
+ if (!suggestions_service->FetchSuggestionsData()) |
InitiateTopSitesQuery(); |
- } |
} |
void MostVisitedSites::InitiateTopSitesQuery() { |
@@ -800,6 +771,10 @@ void MostVisitedSites::NotifyMostVisitedURLsObserver() { |
UMA_HISTOGRAM_SPARSE_SLOWLY("NewTabPage.NumberOfTiles", num_suggestions); |
recorded_uma_ = true; |
} |
+ |
+ if (observer_.is_null()) |
+ return; |
+ |
std::vector<base::string16> titles; |
std::vector<std::string> urls; |
titles.reserve(num_suggestions); |
@@ -851,10 +826,9 @@ void MostVisitedSites::RecordImpressionUMAMetrics() { |
} |
} |
-void MostVisitedSites::TopSitesLoaded(history::TopSites* top_sites) { |
-} |
+void MostVisitedSites::TopSitesLoaded(TopSites* top_sites) {} |
-void MostVisitedSites::TopSitesChanged(history::TopSites* top_sites, |
+void MostVisitedSites::TopSitesChanged(TopSites* top_sites, |
ChangeReason change_reason) { |
if (mv_source_ == TOP_SITES) { |
// The displayed suggestions are invalidated. |