Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Unified Diff: components/test_runner/pixel_dump.cc

Issue 2707183003: Move //components/test_runner back into //content/shell (Closed)
Patch Set: Trim DEPS Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698