Chromium Code Reviews| 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_); |