Commit f9747e19 authored by behara.ms's avatar behara.ms Committed by Commit bot

The Java Client should be aware of the readback status.

The ReadBack response should be notified to the Java Client to make necessary decisions.

BUG=472457

Review URL: https://codereview.chromium.org/1040393002

Cr-Commit-Position: refs/heads/master@{#324214}
parent ce11d697
...@@ -111,7 +111,7 @@ void ContentReadbackHandler::OnFinishReadback(int readback_id, ...@@ -111,7 +111,7 @@ void ContentReadbackHandler::OnFinishReadback(int readback_id,
java_bitmap = gfx::ConvertToJavaBitmap(&bitmap); java_bitmap = gfx::ConvertToJavaBitmap(&bitmap);
Java_ContentReadbackHandler_notifyGetBitmapFinished( Java_ContentReadbackHandler_notifyGetBitmapFinished(
env, java_obj_.obj(), readback_id, java_bitmap.obj()); env, java_obj_.obj(), readback_id, java_bitmap.obj(), response);
} }
// static // static
......
...@@ -449,6 +449,7 @@ ...@@ -449,6 +449,7 @@
'navigation_controller_java', 'navigation_controller_java',
'popup_item_type_java', 'popup_item_type_java',
'result_codes_java', 'result_codes_java',
'readback_response_java',
'speech_recognition_error_java', 'speech_recognition_error_java',
'top_controls_state_java', 'top_controls_state_java',
'screen_orientation_values_java', 'screen_orientation_values_java',
...@@ -521,6 +522,14 @@ ...@@ -521,6 +522,14 @@
}, },
'includes': [ '../build/android/java_cpp_enum.gypi' ], 'includes': [ '../build/android/java_cpp_enum.gypi' ],
}, },
{
'target_name': 'readback_response_java',
'type': 'none',
'variables': {
'source_file': 'public/browser/readback_types.h',
},
'includes': [ '../build/android/java_cpp_enum.gypi' ],
},
{ {
'target_name': 'result_codes_java', 'target_name': 'result_codes_java',
'type': 'none', 'type': 'none',
......
...@@ -113,6 +113,7 @@ java_cpp_enum("content_public_android_java_enums_srcjar") { ...@@ -113,6 +113,7 @@ java_cpp_enum("content_public_android_java_enums_srcjar") {
"//content/browser/gamepad/gamepad_standard_mappings.h", "//content/browser/gamepad/gamepad_standard_mappings.h",
"//content/public/browser/invalidate_type.h", "//content/public/browser/invalidate_type.h",
"//content/public/browser/navigation_controller.h", "//content/public/browser/navigation_controller.h",
"//content/public/browser/readback_types.h",
"//content/public/common/console_message_level.h", "//content/public/common/console_message_level.h",
"//content/public/common/result_codes.h", "//content/public/common/result_codes.h",
"//content/public/common/screen_orientation_values.h", "//content/public/common/screen_orientation_values.h",
...@@ -127,6 +128,7 @@ java_cpp_enum("content_public_android_java_enums_srcjar") { ...@@ -127,6 +128,7 @@ java_cpp_enum("content_public_android_java_enums_srcjar") {
"org/chromium/content_public/browser/InvalidateTypes.java", "org/chromium/content_public/browser/InvalidateTypes.java",
"org/chromium/content_public/browser/navigation_controller/LoadURLType.java", "org/chromium/content_public/browser/navigation_controller/LoadURLType.java",
"org/chromium/content_public/browser/navigation_controller/UserAgentOverrideOption.java", "org/chromium/content_public/browser/navigation_controller/UserAgentOverrideOption.java",
"org/chromium/content_public/browser/readback_types/ReadbackResponse.java",
"org/chromium/content_public/common/ConsoleMessageLevel.java", "org/chromium/content_public/common/ConsoleMessageLevel.java",
"org/chromium/content_public/common/ResultCode.java", "org/chromium/content_public/common/ResultCode.java",
"org/chromium/content_public/common/ScreenOrientationValues.java", "org/chromium/content_public/common/ScreenOrientationValues.java",
......
...@@ -11,6 +11,7 @@ import android.util.SparseArray; ...@@ -11,6 +11,7 @@ import android.util.SparseArray;
import org.chromium.base.CalledByNative; import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace; import org.chromium.base.JNINamespace;
import org.chromium.base.ThreadUtils; import org.chromium.base.ThreadUtils;
import org.chromium.content_public.browser.readback_types.ReadbackResponse;
import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.base.WindowAndroid;
/** /**
...@@ -27,7 +28,7 @@ public abstract class ContentReadbackHandler { ...@@ -27,7 +28,7 @@ public abstract class ContentReadbackHandler {
* @param bitmap The {@link Bitmap} of the content. Null will be passed for readback * @param bitmap The {@link Bitmap} of the content. Null will be passed for readback
* failure. * failure.
*/ */
public void onFinishGetBitmap(Bitmap bitmap); public void onFinishGetBitmap(Bitmap bitmap, int response);
} }
private int mNextReadbackId = 1; private int mNextReadbackId = 1;
...@@ -59,11 +60,11 @@ public abstract class ContentReadbackHandler { ...@@ -59,11 +60,11 @@ public abstract class ContentReadbackHandler {
@CalledByNative @CalledByNative
private void notifyGetBitmapFinished(int readbackId, Bitmap bitmap) { private void notifyGetBitmapFinished(int readbackId, Bitmap bitmap, int response) {
GetBitmapCallback callback = mGetBitmapRequests.get(readbackId); GetBitmapCallback callback = mGetBitmapRequests.get(readbackId);
if (callback != null) { if (callback != null) {
mGetBitmapRequests.delete(readbackId); mGetBitmapRequests.delete(readbackId);
callback.onFinishGetBitmap(bitmap); callback.onFinishGetBitmap(bitmap, response);
} else { } else {
// readback Id is unregistered. // readback Id is unregistered.
assert false : "Readback finished for unregistered Id: " + readbackId; assert false : "Readback finished for unregistered Id: " + readbackId;
...@@ -84,7 +85,7 @@ public abstract class ContentReadbackHandler { ...@@ -84,7 +85,7 @@ public abstract class ContentReadbackHandler {
public void getContentBitmapAsync(float scale, Rect srcRect, ContentViewCore view, public void getContentBitmapAsync(float scale, Rect srcRect, ContentViewCore view,
Bitmap.Config config, GetBitmapCallback callback) { Bitmap.Config config, GetBitmapCallback callback) {
if (!readyForReadback()) { if (!readyForReadback()) {
callback.onFinishGetBitmap(null); callback.onFinishGetBitmap(null, ReadbackResponse.SURFACE_UNAVAILABLE);
return; return;
} }
ThreadUtils.assertOnUiThread(); ThreadUtils.assertOnUiThread();
...@@ -104,7 +105,7 @@ public abstract class ContentReadbackHandler { ...@@ -104,7 +105,7 @@ public abstract class ContentReadbackHandler {
*/ */
public void getCompositorBitmapAsync(WindowAndroid windowAndroid, GetBitmapCallback callback) { public void getCompositorBitmapAsync(WindowAndroid windowAndroid, GetBitmapCallback callback) {
if (!readyForReadback()) { if (!readyForReadback()) {
callback.onFinishGetBitmap(null); callback.onFinishGetBitmap(null, ReadbackResponse.SURFACE_UNAVAILABLE);
return; return;
} }
ThreadUtils.assertOnUiThread(); ThreadUtils.assertOnUiThread();
......
...@@ -105,7 +105,7 @@ public class ContentViewReadbackTest extends ContentShellTestBase { ...@@ -105,7 +105,7 @@ public class ContentViewReadbackTest extends ContentShellTestBase {
GetBitmapCallback callback = new GetBitmapCallback() { GetBitmapCallback callback = new GetBitmapCallback() {
@Override @Override
public void onFinishGetBitmap(Bitmap bitmap) { public void onFinishGetBitmap(Bitmap bitmap, int response) {
assertNotNull("Readback did not return valid bitmap", bitmap); assertNotNull("Readback did not return valid bitmap", bitmap);
// Verify a pixel in the center of the screenshot. // Verify a pixel in the center of the screenshot.
color.set(bitmap.getPixel(bitmap.getWidth() / 2, bitmap.getHeight() / 2)); color.set(bitmap.getPixel(bitmap.getWidth() / 2, bitmap.getHeight() / 2));
......
...@@ -11,6 +11,12 @@ class SkBitmap; ...@@ -11,6 +11,12 @@ class SkBitmap;
namespace content { namespace content {
// ReadbackResponse type used in ContentReadbackHandler.
//
// A Java counterpart will be generated for this enum.
// GENERATED_JAVA_ENUM_PACKAGE: (
// org.chromium.content_public.browser.readback_types)
// GENERATED_JAVA_PREFIX_TO_STRIP: READBACK_
enum ReadbackResponse { enum ReadbackResponse {
READBACK_SUCCESS, READBACK_SUCCESS,
READBACK_FAILED, READBACK_FAILED,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment