| Index: components/test_runner/layout_dump.cc
|
| diff --git a/components/test_runner/layout_dump.cc b/components/test_runner/layout_dump.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9fc7f188d41c2034d7861742eda5af9f38c9eebd
|
| --- /dev/null
|
| +++ b/components/test_runner/layout_dump.cc
|
| @@ -0,0 +1,98 @@
|
| +// 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/layout_dump.h"
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/strings/stringprintf.h"
|
| +#include "third_party/WebKit/public/platform/WebSize.h"
|
| +#include "third_party/WebKit/public/platform/WebString.h"
|
| +#include "third_party/WebKit/public/web/WebDocument.h"
|
| +#include "third_party/WebKit/public/web/WebElement.h"
|
| +#include "third_party/WebKit/public/web/WebFrame.h"
|
| +#include "third_party/WebKit/public/web/WebLocalFrame.h"
|
| +
|
| +namespace test_runner {
|
| +
|
| +using blink::WebFrame;
|
| +using blink::WebLocalFrame;
|
| +using blink::WebSize;
|
| +
|
| +namespace {
|
| +
|
| +std::string DumpFrameHeaderIfNeeded(WebFrame* frame) {
|
| + std::string result;
|
| +
|
| + // Add header for all but the main frame. Skip empty frames.
|
| + if (frame->parent() && !frame->document().documentElement().isNull()) {
|
| + result.append("\n--------\nFrame: '");
|
| + result.append(frame->uniqueName().utf8());
|
| + result.append("'\n--------\n");
|
| + }
|
| +
|
| + return result;
|
| +}
|
| +
|
| +std::string DumpFrameScrollPosition(WebFrame* frame) {
|
| + std::string result;
|
| + WebSize offset = frame->scrollOffset();
|
| + if (offset.width > 0 || offset.height > 0) {
|
| + if (frame->parent()) {
|
| + result =
|
| + std::string("frame '") + frame->uniqueName().utf8().data() + "' ";
|
| + }
|
| + base::StringAppendF(&result, "scrolled to %d,%d\n", offset.width,
|
| + offset.height);
|
| + }
|
| +
|
| + return result;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +std::string DumpLayout(WebLocalFrame* frame, const LayoutDumpFlags& flags) {
|
| + DCHECK(frame);
|
| + std::string result;
|
| +
|
| + switch (flags.main_dump_mode) {
|
| + case LayoutDumpMode::DUMP_AS_TEXT:
|
| + result = DumpFrameHeaderIfNeeded(frame);
|
| + if (flags.dump_as_printed && frame->document().isHTMLDocument()) {
|
| + result +=
|
| + frame->layoutTreeAsText(WebFrame::LayoutAsTextPrinting).utf8();
|
| + } else {
|
| + result += frame->document().contentAsTextForTesting().utf8();
|
| + }
|
| + result += "\n";
|
| + break;
|
| + case LayoutDumpMode::DUMP_AS_MARKUP:
|
| + DCHECK(!flags.dump_as_printed);
|
| + result = DumpFrameHeaderIfNeeded(frame);
|
| + result += frame->contentAsMarkup().utf8();
|
| + result += "\n";
|
| + break;
|
| + case LayoutDumpMode::DUMP_SCROLL_POSITIONS:
|
| + if (frame->parent() == nullptr) {
|
| + WebFrame::LayoutAsTextControls layout_text_behavior =
|
| + WebFrame::LayoutAsTextNormal;
|
| + if (flags.dump_as_printed)
|
| + layout_text_behavior |= WebFrame::LayoutAsTextPrinting;
|
| + if (flags.debug_render_tree)
|
| + layout_text_behavior |= WebFrame::LayoutAsTextDebug;
|
| + if (flags.dump_line_box_trees)
|
| + layout_text_behavior |= WebFrame::LayoutAsTextWithLineTrees;
|
| + result = frame->layoutTreeAsText(layout_text_behavior).utf8();
|
| + }
|
| + result += DumpFrameScrollPosition(frame);
|
| + break;
|
| + default:
|
| + DCHECK(false) << static_cast<int>(flags.main_dump_mode);
|
| + result = "";
|
| + break;
|
| + }
|
| +
|
| + return result;
|
| +}
|
| +
|
| +} // namespace test_runner
|
|
|