| 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 6fc326f7d9426cbad6c43d979ed6810d674a4b71..e9cca0e3acfa949814cb4e71578b09f593cecb57 100644
|
| --- a/chrome/browser/android/most_visited_sites.cc
|
| +++ b/chrome/browser/android/most_visited_sites.cc
|
| @@ -4,6 +4,9 @@
|
|
|
| #include "chrome/browser/android/most_visited_sites.h"
|
|
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| #include "base/android/jni_android.h"
|
| #include "base/android/jni_array.h"
|
| #include "base/android/jni_string.h"
|
| @@ -11,7 +14,6 @@
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "base/time/time.h"
|
| #include "chrome/browser/chrome_notification_types.h"
|
| -#include "chrome/browser/history/history_types.h"
|
| #include "chrome/browser/history/top_sites.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/profiles/profile_android.h"
|
| @@ -60,22 +62,6 @@ void ExtractMostVisitedTitlesAndURLs(
|
| }
|
| }
|
|
|
| -void OnMostVisitedURLsAvailable(
|
| - ScopedJavaGlobalRef<jobject>* j_observer,
|
| - int num_sites,
|
| - const history::MostVisitedURLList& visited_list) {
|
| - std::vector<base::string16> titles;
|
| - std::vector<std::string> urls;
|
| - ExtractMostVisitedTitlesAndURLs(visited_list, &titles, &urls, num_sites);
|
| -
|
| - JNIEnv* env = AttachCurrentThread();
|
| - Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable(
|
| - env,
|
| - j_observer->obj(),
|
| - ToJavaArrayOfStrings(env, titles).obj(),
|
| - ToJavaArrayOfStrings(env, urls).obj());
|
| -}
|
| -
|
| SkBitmap ExtractThumbnail(const base::RefCountedMemory& image_data) {
|
| scoped_ptr<SkBitmap> image(gfx::JPEGCodec::Decode(
|
| image_data.front(),
|
| @@ -197,12 +183,29 @@ void MostVisitedSites::GetURLThumbnail(JNIEnv* env,
|
| void MostVisitedSites::BlacklistUrl(JNIEnv* env,
|
| jobject obj,
|
| jstring j_url) {
|
| - TopSites* top_sites = profile_->GetTopSites();
|
| - if (!top_sites)
|
| - return;
|
| + std::string url = ConvertJavaStringToUTF8(env, j_url);
|
| +
|
| + switch (mv_source_) {
|
| + case TOP_SITES: {
|
| + TopSites* top_sites = profile_->GetTopSites();
|
| + DCHECK(top_sites);
|
| + top_sites->AddBlacklistedURL(GURL(url));
|
| + break;
|
| + }
|
|
|
| - std::string url_string = ConvertJavaStringToUTF8(env, j_url);
|
| - top_sites->AddBlacklistedURL(GURL(url_string));
|
| + case SUGGESTIONS_SERVICE: {
|
| + SuggestionsService* suggestions_service =
|
| + SuggestionsServiceFactory::GetForProfile(profile_);
|
| + DCHECK(suggestions_service);
|
| + suggestions_service->AddBlacklistedURL(
|
| + GURL(url),
|
| + base::Bind(
|
| + &MostVisitedSites::OnSuggestionsProfileAvailable,
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| + base::Owned(new ScopedJavaGlobalRef<jobject>(observer_))));
|
| + break;
|
| + }
|
| + }
|
| }
|
|
|
| void MostVisitedSites::Observe(int type,
|
| @@ -210,8 +213,10 @@ void MostVisitedSites::Observe(int type,
|
| const content::NotificationDetails& details) {
|
| DCHECK_EQ(type, chrome::NOTIFICATION_TOP_SITES_CHANGED);
|
|
|
| - // Most visited urls changed, query again.
|
| - QueryMostVisitedURLs();
|
| + if (mv_source_ == TOP_SITES) {
|
| + // The displayed suggestions are invalidated.
|
| + QueryMostVisitedURLs();
|
| + }
|
| }
|
|
|
| // static
|
| @@ -220,10 +225,8 @@ bool MostVisitedSites::Register(JNIEnv* env) {
|
| }
|
|
|
| void MostVisitedSites::QueryMostVisitedURLs() {
|
| - SuggestionsServiceFactory* suggestions_service_factory =
|
| - SuggestionsServiceFactory::GetInstance();
|
| SuggestionsService* suggestions_service =
|
| - suggestions_service_factory->GetForProfile(profile_);
|
| + SuggestionsServiceFactory::GetForProfile(profile_);
|
| if (suggestions_service) {
|
| // Suggestions service is enabled, initiate a query.
|
| suggestions_service->FetchSuggestionsData(
|
| @@ -243,12 +246,31 @@ void MostVisitedSites::InitiateTopSitesQuery() {
|
|
|
| top_sites->GetMostVisitedURLs(
|
| base::Bind(
|
| - &OnMostVisitedURLsAvailable,
|
| + &MostVisitedSites::OnMostVisitedURLsAvailable,
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| base::Owned(new ScopedJavaGlobalRef<jobject>(observer_)),
|
| num_sites_),
|
| false);
|
| }
|
|
|
| +void MostVisitedSites::OnMostVisitedURLsAvailable(
|
| + ScopedJavaGlobalRef<jobject>* j_observer,
|
| + int num_sites,
|
| + const history::MostVisitedURLList& visited_list) {
|
| + std::vector<base::string16> titles;
|
| + std::vector<std::string> urls;
|
| + ExtractMostVisitedTitlesAndURLs(visited_list, &titles, &urls, num_sites);
|
| +
|
| + mv_source_ = TOP_SITES;
|
| +
|
| + JNIEnv* env = AttachCurrentThread();
|
| + Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable(
|
| + env,
|
| + j_observer->obj(),
|
| + ToJavaArrayOfStrings(env, titles).obj(),
|
| + ToJavaArrayOfStrings(env, urls).obj());
|
| +}
|
| +
|
| void MostVisitedSites::OnSuggestionsProfileAvailable(
|
| ScopedJavaGlobalRef<jobject>* j_observer,
|
| const SuggestionsProfile& suggestions_profile) {
|
| @@ -267,6 +289,8 @@ void MostVisitedSites::OnSuggestionsProfileAvailable(
|
| urls.push_back(suggestion.url());
|
| }
|
|
|
| + mv_source_ = SUGGESTIONS_SERVICE;
|
| +
|
| JNIEnv* env = AttachCurrentThread();
|
| Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable(
|
| env,
|
|
|