Index: content/browser/android/content_view_core_impl.cc |
diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc |
index 80fe628dd022781a85a0bd56fe22b32d2d270490..aed58a3d19598a5da0741563dc05243f83aadd2d 100644 |
--- a/content/browser/android/content_view_core_impl.cc |
+++ b/content/browser/android/content_view_core_impl.cc |
@@ -61,6 +61,8 @@ using base::android::ConvertJavaStringToUTF16; |
using base::android::ConvertJavaStringToUTF8; |
using base::android::ConvertUTF16ToJavaString; |
using base::android::ConvertUTF8ToJavaString; |
+using base::android::HasException; |
+using base::android::JavaByteArrayToByteVector; |
using base::android::ScopedJavaGlobalRef; |
using base::android::ScopedJavaLocalRef; |
using WebKit::WebGestureEvent; |
@@ -707,6 +709,42 @@ void ContentViewCoreImpl::SetNeedsAnimate() { |
Java_ContentViewCore_setNeedsAnimate(env, obj.obj()); |
} |
+bool ContentViewCoreImpl::GrabSnapshot(const std::string& format, |
+ int quality, |
+ double scale, |
+ std::vector<uint8>* data) { |
+ gfx::Size size = gfx::ToFlooredSize(gfx::ScaleSize(GetViewportSizePix(), |
+ scale)); |
Sami
2013/08/05 16:56:15
Check that no dimension of |size| is zero here.
|
+ SkBitmap bitmap; |
Sami
2013/08/05 16:56:15
To avoid the extra allocation and copy on line 735
|
+ bitmap.setConfig(SkBitmap::kARGB_8888_Config, size.width(), size.height()); |
+ bitmap.allocPixels(); |
+ SkAutoLockPixels lock(bitmap); |
+ |
+ RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); |
+ if (!view->PopulateBitmapWithContents(size, &bitmap)) |
no sievers
2013/08/05 21:46:44
We'd like to deprecate this API and make all readb
|
+ return false; |
+ |
+ JNIEnv* env = AttachCurrentThread(); |
+ ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
+ if (obj.is_null()) |
+ return false; |
+ |
+ ScopedJavaLocalRef<jstring> jstring_format = |
+ ConvertUTF8ToJavaString(env, format); |
+ ScopedJavaLocalRef<jobject> java_bitmap = |
+ gfx::ConvertToJavaBitmap(&bitmap); |
+ DCHECK(!java_bitmap.is_null()); |
+ |
+ ScopedJavaLocalRef<jbyteArray> data_ref = |
+ Java_ContentViewCore_compressBitmap(env, obj.obj(), java_bitmap.obj(), |
+ jstring_format.obj(), quality); |
+ if (HasException(env) || data_ref.is_null()) |
+ return false; |
+ |
+ JavaByteArrayToByteVector(env, data_ref.obj(), data); |
+ return true; |
+} |
+ |
ui::ViewAndroid* ContentViewCoreImpl::GetViewAndroid() const { |
// view_android_ should never be null for Chrome. |
DCHECK(view_android_); |