| Index: content/browser/renderer_host/render_widget_host_view_android.cc
 | 
| diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
 | 
| index f86d262a78b4dc6f823a1a2ceee0f6d59b49ce48..1eb646dec7997ebc2bdebda61842c9f7b7d06c5b 100644
 | 
| --- a/content/browser/renderer_host/render_widget_host_view_android.cc
 | 
| +++ b/content/browser/renderer_host/render_widget_host_view_android.cc
 | 
| @@ -99,7 +99,7 @@ void SendImeEventAck(RenderWidgetHostImpl* host) {
 | 
|  }
 | 
|  
 | 
|  void CopyFromCompositingSurfaceFinished(
 | 
| -    const base::Callback<void(bool, const SkBitmap&)>& callback,
 | 
| +    ReadbackRequestCallback& callback,
 | 
|      scoped_ptr<cc::SingleReleaseCallback> release_callback,
 | 
|      scoped_ptr<SkBitmap> bitmap,
 | 
|      const base::TimeTicks& start_time,
 | 
| @@ -118,7 +118,8 @@ void CopyFromCompositingSurfaceFinished(
 | 
|    release_callback->Run(sync_point, lost_resource);
 | 
|    UMA_HISTOGRAM_TIMES(kAsyncReadBackString,
 | 
|                        base::TimeTicks::Now() - start_time);
 | 
| -  callback.Run(result, *bitmap);
 | 
| +  ReadbackResponse response = result ? READBACK_SUCCESS : READBACK_FAILED;
 | 
| +  callback.Run(*bitmap, response);
 | 
|  }
 | 
|  
 | 
|  ui::LatencyInfo CreateLatencyInfo(const blink::WebInputEvent& event) {
 | 
| @@ -239,11 +240,10 @@ bool HasMobileViewport(const cc::CompositorFrameMetadata& frame_metadata) {
 | 
|  
 | 
|  }  // anonymous namespace
 | 
|  
 | 
| -ReadbackRequest::ReadbackRequest(
 | 
| -    float scale,
 | 
| -    SkColorType color_type,
 | 
| -    gfx::Rect src_subrect,
 | 
| -    const base::Callback<void(bool, const SkBitmap&)>& result_callback)
 | 
| +ReadbackRequest::ReadbackRequest(float scale,
 | 
| +                                 SkColorType color_type,
 | 
| +                                 gfx::Rect src_subrect,
 | 
| +                                 ReadbackRequestCallback& result_callback)
 | 
|      : scale_(scale),
 | 
|        color_type_(color_type),
 | 
|        src_subrect_(src_subrect),
 | 
| @@ -380,7 +380,7 @@ void RenderWidgetHostViewAndroid::SetBounds(const gfx::Rect& rect) {
 | 
|  void RenderWidgetHostViewAndroid::AbortPendingReadbackRequests() {
 | 
|    while (!readbacks_waiting_for_frame_.empty()) {
 | 
|      ReadbackRequest& readback_request = readbacks_waiting_for_frame_.front();
 | 
| -    readback_request.GetResultCallback().Run(false, SkBitmap());
 | 
| +    readback_request.GetResultCallback().Run(SkBitmap(), READBACK_FAILED);
 | 
|      readbacks_waiting_for_frame_.pop();
 | 
|    }
 | 
|  }
 | 
| @@ -389,9 +389,9 @@ void RenderWidgetHostViewAndroid::GetScaledContentBitmap(
 | 
|      float scale,
 | 
|      SkColorType color_type,
 | 
|      gfx::Rect src_subrect,
 | 
| -    CopyFromCompositingSurfaceCallback& result_callback) {
 | 
| +    ReadbackRequestCallback& result_callback) {
 | 
|    if (!host_ || host_->is_hidden()) {
 | 
| -    result_callback.Run(false, SkBitmap());
 | 
| +    result_callback.Run(SkBitmap(), READBACK_NOT_SUPPORTED);
 | 
|      return;
 | 
|    }
 | 
|    if (!IsSurfaceAvailableForCopy()) {
 | 
| @@ -833,17 +833,17 @@ void RenderWidgetHostViewAndroid::SetBackgroundColor(SkColor color) {
 | 
|  void RenderWidgetHostViewAndroid::CopyFromCompositingSurface(
 | 
|      const gfx::Rect& src_subrect,
 | 
|      const gfx::Size& dst_size,
 | 
| -    CopyFromCompositingSurfaceCallback& callback,
 | 
| +    ReadbackRequestCallback& callback,
 | 
|      const SkColorType color_type) {
 | 
|    TRACE_EVENT0("cc", "RenderWidgetHostViewAndroid::CopyFromCompositingSurface");
 | 
|    if ((!host_ || host_->is_hidden()) ||
 | 
|        !IsReadbackConfigSupported(color_type)) {
 | 
| -    callback.Run(false, SkBitmap());
 | 
| +    callback.Run(SkBitmap(), READBACK_FORMAT_NOT_SUPPORTED);
 | 
|      return;
 | 
|    }
 | 
|    base::TimeTicks start_time = base::TimeTicks::Now();
 | 
|    if (!using_synchronous_compositor_ && !IsSurfaceAvailableForCopy()) {
 | 
| -    callback.Run(false, SkBitmap());
 | 
| +    callback.Run(SkBitmap(), READBACK_NOT_SUPPORTED);
 | 
|      return;
 | 
|    }
 | 
|    const gfx::Display& display =
 | 
| @@ -1193,13 +1193,13 @@ scoped_ptr<TouchHandleDrawable> RenderWidgetHostViewAndroid::CreateDrawable() {
 | 
|  void RenderWidgetHostViewAndroid::SynchronousCopyContents(
 | 
|      const gfx::Rect& src_subrect_in_pixel,
 | 
|      const gfx::Size& dst_size_in_pixel,
 | 
| -    const base::Callback<void(bool, const SkBitmap&)>& callback,
 | 
| +    ReadbackRequestCallback& callback,
 | 
|      const SkColorType color_type) {
 | 
|    SynchronousCompositor* compositor =
 | 
|        SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(),
 | 
|                                          host_->GetRoutingID());
 | 
|    if (!compositor) {
 | 
| -    callback.Run(false, SkBitmap());
 | 
| +    callback.Run(SkBitmap(), READBACK_FAILED);
 | 
|      return;
 | 
|    }
 | 
|  
 | 
| @@ -1213,7 +1213,7 @@ void RenderWidgetHostViewAndroid::SynchronousCopyContents(
 | 
|        (float)dst_size_in_pixel.width() / (float)src_subrect_in_pixel.width(),
 | 
|        (float)dst_size_in_pixel.height() / (float)src_subrect_in_pixel.height());
 | 
|    compositor->DemandDrawSw(&canvas);
 | 
| -  callback.Run(true, bitmap);
 | 
| +  callback.Run(bitmap, READBACK_SUCCESS);
 | 
|  }
 | 
|  
 | 
|  void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
 | 
| @@ -1688,7 +1688,7 @@ RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResultForDelegatedReadback(
 | 
|      const SkColorType color_type,
 | 
|      const base::TimeTicks& start_time,
 | 
|      scoped_refptr<cc::Layer> readback_layer,
 | 
| -    const base::Callback<void(bool, const SkBitmap&)>& callback,
 | 
| +    ReadbackRequestCallback& callback,
 | 
|      scoped_ptr<cc::CopyOutputResult> result) {
 | 
|    readback_layer->RemoveFromParent();
 | 
|    PrepareTextureCopyOutputResult(
 | 
| @@ -1700,10 +1700,10 @@ void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult(
 | 
|      const gfx::Size& dst_size_in_pixel,
 | 
|      const SkColorType color_type,
 | 
|      const base::TimeTicks& start_time,
 | 
| -    const base::Callback<void(bool, const SkBitmap&)>& callback,
 | 
| +    ReadbackRequestCallback& callback,
 | 
|      scoped_ptr<cc::CopyOutputResult> result) {
 | 
|    base::ScopedClosureRunner scoped_callback_runner(
 | 
| -      base::Bind(callback, false, SkBitmap()));
 | 
| +      base::Bind(callback, SkBitmap(), READBACK_FAILED));
 | 
|    TRACE_EVENT0("cc",
 | 
|                 "RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult");
 | 
|  
 | 
| 
 |