Chromium Code Reviews| Index: chrome/browser/android/tab_android.cc |
| diff --git a/chrome/browser/android/tab_android.cc b/chrome/browser/android/tab_android.cc |
| index 4b1a8762b9090705d026b1fa8c153ba9d59ed6d3..503f42980e6d796044d0397bdf92a20b0e725c65 100644 |
| --- a/chrome/browser/android/tab_android.cc |
| +++ b/chrome/browser/android/tab_android.cc |
| @@ -12,6 +12,7 @@ |
| #include "chrome/browser/browser_about_handler.h" |
| #include "chrome/browser/chrome_notification_types.h" |
| #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
| +#include "chrome/browser/favicon/favicon_tab_helper.h" |
| #include "chrome/browser/google/google_url_tracker_factory.h" |
| #include "chrome/browser/infobars/infobar_service.h" |
| #include "chrome/browser/prerender/prerender_contents.h" |
| @@ -46,7 +47,13 @@ |
| #include "content/public/browser/user_metrics.h" |
| #include "content/public/browser/web_contents.h" |
| #include "jni/Tab_jni.h" |
| +#include "skia/ext/image_operations.h" |
| #include "third_party/WebKit/public/platform/WebReferrerPolicy.h" |
| +#include "ui/base/resource/resource_bundle.h" |
| +#include "ui/gfx/android/device_display_info.h" |
| +#include "ui/gfx/android/java_bitmap.h" |
| +#include "ui/gfx/favicon_size.h" |
| +#include "ui/gfx/image/image_skia.h" |
| TabAndroid* TabAndroid::FromWebContents(content::WebContents* web_contents) { |
| CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(web_contents); |
| @@ -511,6 +518,42 @@ bool TabAndroid::Print(JNIEnv* env, jobject obj) { |
| return true; |
| } |
| +ScopedJavaLocalRef<jobject> TabAndroid::GetFavicon(JNIEnv* env, jobject obj) { |
| + ScopedJavaLocalRef<jobject> bitmap; |
| + FaviconTabHelper* favicon_tab_helper = |
| + FaviconTabHelper::FromWebContents(web_contents_.get()); |
| + if (!favicon_tab_helper) |
| + return bitmap; |
| + if (!favicon_tab_helper->FaviconIsValid()) |
| + return bitmap; |
| + |
| + SkBitmap favicon = |
| + favicon_tab_helper->GetFavicon() |
| + .AsImageSkia() |
| + .GetRepresentation( |
| + ResourceBundle::GetSharedInstance().GetMaxScaleFactor()) |
| + .sk_bitmap(); |
| + |
| + if (!favicon.isNull()) { |
|
David Trainor- moved to gerrit
2014/07/28 17:50:05
I think IsEmpty() might be better here
Also, f fa
Jitu( very slow this week)
2014/07/30 11:33:56
We can't do check IsEmpty() here as favicon is typ
David Trainor- moved to gerrit
2014/07/30 17:51:23
Ah sorry! I meant SkBitmap.empty() not IsEmpty().
|
| + gfx::DeviceDisplayInfo device_info; |
| + const float device_scale_factor = device_info.GetDIPScale(); |
| + int target_size_dip = device_scale_factor * gfx::kFaviconSize; |
| + if (favicon.width() != target_size_dip || |
| + favicon.height() != target_size_dip) |
|
David Trainor- moved to gerrit
2014/07/28 17:50:04
Use {} this seems somewhat hard to read.
Jitu( very slow this week)
2014/07/30 11:33:56
Done.
|
| + favicon = |
| + skia::ImageOperations::Resize(favicon, |
| + skia::ImageOperations::RESIZE_BEST, |
| + target_size_dip, |
| + target_size_dip); |
| + |
| + } else { |
| + gfx::Image image; |
| + favicon = image.AsBitmap(); |
| + } |
| + bitmap = gfx::ConvertToJavaBitmap(&favicon); |
| + return bitmap; |
| +} |
| + |
| prerender::PrerenderManager* TabAndroid::GetPrerenderManager() const { |
| Profile* profile = GetProfile(); |
| if (!profile) |