| Index: components/test_runner/pixel_dump.cc
 | 
| diff --git a/components/test_runner/pixel_dump.cc b/components/test_runner/pixel_dump.cc
 | 
| deleted file mode 100644
 | 
| index 6b47a14ec2dccaece023ed63ee0579bffbf10e24..0000000000000000000000000000000000000000
 | 
| --- a/components/test_runner/pixel_dump.cc
 | 
| +++ /dev/null
 | 
| @@ -1,212 +0,0 @@
 | 
| -// Copyright 2016 The Chromium Authors. All rights reserved.
 | 
| -// Use of this source code is governed by a BSD-style license that can be
 | 
| -// found in the LICENSE file.
 | 
| -
 | 
| -#include "components/test_runner/pixel_dump.h"
 | 
| -
 | 
| -#include <memory>
 | 
| -
 | 
| -#include "base/bind.h"
 | 
| -#include "base/bind_helpers.h"
 | 
| -#include "base/callback.h"
 | 
| -#include "base/logging.h"
 | 
| -#include "base/threading/thread_task_runner_handle.h"
 | 
| -#include "base/trace_event/trace_event.h"
 | 
| -#include "cc/paint/paint_canvas.h"
 | 
| -#include "cc/paint/paint_flags.h"
 | 
| -#include "components/test_runner/layout_test_runtime_flags.h"
 | 
| -// FIXME: Including platform_canvas.h here is a layering violation.
 | 
| -#include "skia/ext/platform_canvas.h"
 | 
| -#include "third_party/WebKit/public/platform/Platform.h"
 | 
| -#include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallback.h"
 | 
| -#include "third_party/WebKit/public/platform/WebImage.h"
 | 
| -#include "third_party/WebKit/public/platform/WebMockClipboard.h"
 | 
| -#include "third_party/WebKit/public/platform/WebPoint.h"
 | 
| -#include "third_party/WebKit/public/web/WebFrame.h"
 | 
| -#include "third_party/WebKit/public/web/WebLocalFrame.h"
 | 
| -#include "third_party/WebKit/public/web/WebPagePopup.h"
 | 
| -#include "third_party/WebKit/public/web/WebPrintParams.h"
 | 
| -#include "third_party/WebKit/public/web/WebView.h"
 | 
| -#include "ui/gfx/geometry/point.h"
 | 
| -
 | 
| -namespace test_runner {
 | 
| -
 | 
| -namespace {
 | 
| -
 | 
| -struct PixelsDumpRequest {
 | 
| -  PixelsDumpRequest(blink::WebView* web_view,
 | 
| -                    const LayoutTestRuntimeFlags& layout_test_runtime_flags,
 | 
| -                    const base::Callback<void(const SkBitmap&)>& callback)
 | 
| -      : web_view(web_view),
 | 
| -        layout_test_runtime_flags(layout_test_runtime_flags),
 | 
| -        callback(callback) {}
 | 
| -
 | 
| -  blink::WebView* web_view;
 | 
| -  const LayoutTestRuntimeFlags& layout_test_runtime_flags;
 | 
| -  base::Callback<void(const SkBitmap&)> callback;
 | 
| -};
 | 
| -
 | 
| -class CaptureCallback : public blink::WebCompositeAndReadbackAsyncCallback {
 | 
| - public:
 | 
| -  CaptureCallback(const base::Callback<void(const SkBitmap&)>& callback);
 | 
| -  virtual ~CaptureCallback();
 | 
| -
 | 
| -  void set_wait_for_popup(bool wait) { wait_for_popup_ = wait; }
 | 
| -  void set_popup_position(const gfx::Point& position) {
 | 
| -    popup_position_ = position;
 | 
| -  }
 | 
| -
 | 
| -  // WebCompositeAndReadbackAsyncCallback implementation.
 | 
| -  void didCompositeAndReadback(const SkBitmap& bitmap) override;
 | 
| -
 | 
| - private:
 | 
| -  base::Callback<void(const SkBitmap&)> callback_;
 | 
| -  SkBitmap main_bitmap_;
 | 
| -  bool wait_for_popup_;
 | 
| -  gfx::Point popup_position_;
 | 
| -};
 | 
| -
 | 
| -void DrawSelectionRect(const PixelsDumpRequest& dump_request,
 | 
| -                       cc::PaintCanvas* canvas) {
 | 
| -  // See if we need to draw the selection bounds rect. Selection bounds
 | 
| -  // rect is the rect enclosing the (possibly transformed) selection.
 | 
| -  // The rect should be drawn after everything is laid out and painted.
 | 
| -  if (!dump_request.layout_test_runtime_flags.dump_selection_rect())
 | 
| -    return;
 | 
| -  // If there is a selection rect - draw a red 1px border enclosing rect
 | 
| -  blink::WebRect wr = dump_request.web_view->mainFrame()->selectionBoundsRect();
 | 
| -  if (wr.isEmpty())
 | 
| -    return;
 | 
| -  // Render a red rectangle bounding selection rect
 | 
| -  cc::PaintFlags flags;
 | 
| -  flags.setColor(0xFFFF0000);  // Fully opaque red
 | 
| -  flags.setStyle(cc::PaintFlags::kStroke_Style);
 | 
| -  flags.setAntiAlias(true);
 | 
| -  flags.setStrokeWidth(1.0f);
 | 
| -  SkIRect rect;  // Bounding rect
 | 
| -  rect.set(wr.x, wr.y, wr.x + wr.width, wr.y + wr.height);
 | 
| -  canvas->drawIRect(rect, flags);
 | 
| -}
 | 
| -
 | 
| -void CapturePixelsForPrinting(std::unique_ptr<PixelsDumpRequest> dump_request) {
 | 
| -  dump_request->web_view->updateAllLifecyclePhases();
 | 
| -
 | 
| -  blink::WebSize page_size_in_pixels = dump_request->web_view->size();
 | 
| -  blink::WebFrame* web_frame = dump_request->web_view->mainFrame();
 | 
| -
 | 
| -  int page_count = web_frame->printBegin(page_size_in_pixels);
 | 
| -  int totalHeight = page_count * (page_size_in_pixels.height + 1) - 1;
 | 
| -
 | 
| -  bool is_opaque = false;
 | 
| -
 | 
| -  SkBitmap bitmap;
 | 
| -  if (!bitmap.tryAllocN32Pixels(page_size_in_pixels.width, totalHeight,
 | 
| -                                is_opaque)) {
 | 
| -    LOG(ERROR) << "Failed to create bitmap width=" << page_size_in_pixels.width
 | 
| -               << " height=" << totalHeight;
 | 
| -    dump_request->callback.Run(SkBitmap());
 | 
| -    return;
 | 
| -  }
 | 
| -
 | 
| -  cc::PaintCanvas canvas(bitmap);
 | 
| -  web_frame->printPagesWithBoundaries(&canvas, page_size_in_pixels);
 | 
| -  web_frame->printEnd();
 | 
| -
 | 
| -  DrawSelectionRect(*dump_request, &canvas);
 | 
| -  dump_request->callback.Run(bitmap);
 | 
| -}
 | 
| -
 | 
| -CaptureCallback::CaptureCallback(
 | 
| -    const base::Callback<void(const SkBitmap&)>& callback)
 | 
| -    : callback_(callback), wait_for_popup_(false) {}
 | 
| -
 | 
| -CaptureCallback::~CaptureCallback() {}
 | 
| -
 | 
| -void CaptureCallback::didCompositeAndReadback(const SkBitmap& bitmap) {
 | 
| -  TRACE_EVENT2("shell", "CaptureCallback::didCompositeAndReadback", "x",
 | 
| -               bitmap.info().width(), "y", bitmap.info().height());
 | 
| -  if (!wait_for_popup_) {
 | 
| -    callback_.Run(bitmap);
 | 
| -    delete this;
 | 
| -    return;
 | 
| -  }
 | 
| -  if (main_bitmap_.isNull()) {
 | 
| -    bitmap.deepCopyTo(&main_bitmap_);
 | 
| -    return;
 | 
| -  }
 | 
| -  SkCanvas canvas(main_bitmap_);
 | 
| -  canvas.drawBitmap(bitmap, popup_position_.x(), popup_position_.y());
 | 
| -  callback_.Run(main_bitmap_);
 | 
| -  delete this;
 | 
| -}
 | 
| -
 | 
| -void DidCapturePixelsAsync(std::unique_ptr<PixelsDumpRequest> dump_request,
 | 
| -                           const SkBitmap& bitmap) {
 | 
| -  cc::PaintCanvas canvas(bitmap);
 | 
| -  DrawSelectionRect(*dump_request, &canvas);
 | 
| -  if (!dump_request->callback.is_null())
 | 
| -    dump_request->callback.Run(bitmap);
 | 
| -}
 | 
| -
 | 
| -}  // namespace
 | 
| -
 | 
| -void DumpPixelsAsync(blink::WebView* web_view,
 | 
| -                     const LayoutTestRuntimeFlags& layout_test_runtime_flags,
 | 
| -                     float device_scale_factor_for_test,
 | 
| -                     const base::Callback<void(const SkBitmap&)>& callback) {
 | 
| -  TRACE_EVENT0("shell", "WebViewTestProxyBase::CapturePixelsAsync");
 | 
| -  DCHECK(!callback.is_null());
 | 
| -  DCHECK(!layout_test_runtime_flags.dump_drag_image());
 | 
| -
 | 
| -  std::unique_ptr<PixelsDumpRequest> pixels_request(
 | 
| -      new PixelsDumpRequest(web_view, layout_test_runtime_flags, callback));
 | 
| -
 | 
| -  if (layout_test_runtime_flags.is_printing()) {
 | 
| -    base::ThreadTaskRunnerHandle::Get()->PostTask(
 | 
| -        FROM_HERE, base::Bind(&CapturePixelsForPrinting,
 | 
| -                              base::Passed(std::move(pixels_request))));
 | 
| -    return;
 | 
| -  }
 | 
| -
 | 
| -  CaptureCallback* capture_callback = new CaptureCallback(base::Bind(
 | 
| -      &DidCapturePixelsAsync, base::Passed(std::move(pixels_request))));
 | 
| -  web_view->compositeAndReadbackAsync(capture_callback);
 | 
| -  if (blink::WebPagePopup* popup = web_view->pagePopup()) {
 | 
| -    capture_callback->set_wait_for_popup(true);
 | 
| -    blink::WebPoint position = popup->positionRelativeToOwner();
 | 
| -    position.x *= device_scale_factor_for_test;
 | 
| -    position.y *= device_scale_factor_for_test;
 | 
| -    capture_callback->set_popup_position(position);
 | 
| -    popup->compositeAndReadbackAsync(capture_callback);
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -void CopyImageAtAndCapturePixels(
 | 
| -    blink::WebView* web_view,
 | 
| -    int x,
 | 
| -    int y,
 | 
| -    const base::Callback<void(const SkBitmap&)>& callback) {
 | 
| -  DCHECK(!callback.is_null());
 | 
| -  uint64_t sequence_number =
 | 
| -      blink::Platform::current()->clipboard()->sequenceNumber(
 | 
| -          blink::WebClipboard::Buffer());
 | 
| -  // TODO(lukasza): Support image capture in OOPIFs for
 | 
| -  // https://crbug.com/477150.
 | 
| -  web_view->mainFrame()->toWebLocalFrame()->copyImageAt(blink::WebPoint(x, y));
 | 
| -  if (sequence_number ==
 | 
| -      blink::Platform::current()->clipboard()->sequenceNumber(
 | 
| -          blink::WebClipboard::Buffer())) {
 | 
| -    SkBitmap emptyBitmap;
 | 
| -    callback.Run(emptyBitmap);
 | 
| -    return;
 | 
| -  }
 | 
| -
 | 
| -  blink::WebImage image = static_cast<blink::WebMockClipboard*>(
 | 
| -                              blink::Platform::current()->clipboard())
 | 
| -                              ->readRawImage(blink::WebClipboard::Buffer());
 | 
| -  const SkBitmap& bitmap = image.getSkBitmap();
 | 
| -  SkAutoLockPixels autoLock(bitmap);
 | 
| -  callback.Run(bitmap);
 | 
| -}
 | 
| -
 | 
| -}  // namespace test_runner
 | 
| 
 |