Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4066)

Unified Diff: chrome/browser/android/most_visited_sites.cc

Issue 297233008: [NTP] Use server thumbnails from SuggestionsService on Android NTP. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: DCHECK Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 5ff3d30df03330e9cd6980e70cfb0d5c60650f63..955e410bce0941a7c190f0be58286ff9650b5987 100644
--- a/chrome/browser/android/most_visited_sites.cc
+++ b/chrome/browser/android/most_visited_sites.cc
@@ -11,6 +11,7 @@
#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "base/android/scoped_java_ref.h"
+#include "base/callback.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "chrome/browser/chrome_notification_types.h"
@@ -84,10 +85,31 @@ void AddForcedURLOnUIThread(scoped_refptr<history::TopSites> top_sites,
top_sites->AddForcedURL(url, base::Time::Now());
}
+void OnSuggestionsThumbnailAvailable(
+ ScopedJavaGlobalRef<jobject>* j_callback,
+ const GURL& url,
+ const SkBitmap* bitmap) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ JNIEnv* env = AttachCurrentThread();
+
+ ScopedJavaGlobalRef<jobject>* j_bitmap_ref =
+ new ScopedJavaGlobalRef<jobject>();
+ if (bitmap) {
+ j_bitmap_ref->Reset(
+ env,
+ gfx::ConvertToJavaBitmap(bitmap).obj());
+ }
+
+ Java_ThumbnailCallback_onMostVisitedURLsThumbnailAvailable(
+ env, j_callback->obj(), j_bitmap_ref->obj());
+}
+
+// Runs on the DB thread.
void GetUrlThumbnailTask(
std::string url_string,
scoped_refptr<TopSites> top_sites,
- ScopedJavaGlobalRef<jobject>* j_callback) {
+ ScopedJavaGlobalRef<jobject>* j_callback,
+ base::Closure lookup_failed_ui_callback) {
JNIEnv* env = AttachCurrentThread();
ScopedJavaGlobalRef<jobject>* j_bitmap_ref =
@@ -109,6 +131,13 @@ void GetUrlThumbnailTask(
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::Bind(AddForcedURLOnUIThread, top_sites, gurl));
+
+ // If appropriate, return on the UI thread to execute the proper callback.
+ if (!lookup_failed_ui_callback.is_null()) {
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE, lookup_failed_ui_callback);
+ return;
+ }
}
// Since j_callback is owned by this callback, when the callback falls out of
@@ -122,6 +151,16 @@ void GetUrlThumbnailTask(
base::Owned(j_bitmap_ref), base::Owned(j_callback_pass)));
}
+void GetSuggestionsThumbnailOnUIThread(
+ SuggestionsService* suggestions_service,
+ const std::string& url_string,
+ ScopedJavaGlobalRef<jobject>* j_callback) {
+ suggestions_service->GetPageThumbnail(
+ GURL(url_string),
+ base::Bind(&OnSuggestionsThumbnailAvailable,
+ base::Owned(new ScopedJavaGlobalRef<jobject>(*j_callback))));
+}
+
} // namespace
MostVisitedSites::MostVisitedSites(Profile* profile)
@@ -162,22 +201,33 @@ void MostVisitedSites::SetMostVisitedURLsObserver(JNIEnv* env,
}
}
-// May be called from any thread
+// Called from the UI Thread.
void MostVisitedSites::GetURLThumbnail(JNIEnv* env,
jobject obj,
jstring url,
jobject j_callback_obj) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
ScopedJavaGlobalRef<jobject>* j_callback =
new ScopedJavaGlobalRef<jobject>();
j_callback->Reset(env, j_callback_obj);
std::string url_string = ConvertJavaStringToUTF8(env, url);
scoped_refptr<TopSites> top_sites(profile_->GetTopSites());
+
+ // If the Suggestions service is enabled, create a callback to fetch a
+ // server thumbnail from it, in case the local thumbnail is not found.
+ SuggestionsService* suggestions_service =
+ SuggestionsServiceFactory::GetForProfile(profile_);
+ base::Closure lookup_failed_callback = suggestions_service ?
+ base::Bind(&GetSuggestionsThumbnailOnUIThread,
+ suggestions_service, url_string,
+ base::Owned(new ScopedJavaGlobalRef<jobject>(*j_callback))) :
+ base::Closure();
BrowserThread::PostTask(
- BrowserThread::DB, FROM_HERE, base::Bind(
- &GetUrlThumbnailTask,
- url_string,
- top_sites, base::Owned(j_callback)));
+ BrowserThread::DB, FROM_HERE,
+ base::Bind(
+ &GetUrlThumbnailTask, url_string, top_sites,
+ base::Owned(j_callback), lookup_failed_callback));
}
void MostVisitedSites::BlacklistUrl(JNIEnv* env,
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698