summaryrefslogtreecommitdiff
path: root/chromium/third_party/WebKit/Source/core/rendering/RenderTreeAsText.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/rendering/RenderTreeAsText.cpp')
-rw-r--r--chromium/third_party/WebKit/Source/core/rendering/RenderTreeAsText.cpp175
1 files changed, 91 insertions, 84 deletions
diff --git a/chromium/third_party/WebKit/Source/core/rendering/RenderTreeAsText.cpp b/chromium/third_party/WebKit/Source/core/rendering/RenderTreeAsText.cpp
index 319f7525e48..ccc630e5e81 100644
--- a/chromium/third_party/WebKit/Source/core/rendering/RenderTreeAsText.cpp
+++ b/chromium/third_party/WebKit/Source/core/rendering/RenderTreeAsText.cpp
@@ -31,9 +31,10 @@
#include "core/dom/Document.h"
#include "core/editing/FrameSelection.h"
#include "core/html/HTMLElement.h"
-#include "core/page/Frame.h"
-#include "core/page/FrameView.h"
+#include "core/frame/Frame.h"
+#include "core/frame/FrameView.h"
#include "core/page/PrintContext.h"
+#include "core/rendering/CompositedLayerMapping.h"
#include "core/rendering/FlowThreadController.h"
#include "core/rendering/InlineTextBox.h"
#include "core/rendering/RenderBR.h"
@@ -41,7 +42,6 @@
#include "core/rendering/RenderFileUploadControl.h"
#include "core/rendering/RenderInline.h"
#include "core/rendering/RenderLayer.h"
-#include "core/rendering/RenderLayerBacking.h"
#include "core/rendering/RenderListItem.h"
#include "core/rendering/RenderListMarker.h"
#include "core/rendering/RenderNamedFlowThread.h"
@@ -59,7 +59,6 @@
#include "core/rendering/svg/RenderSVGText.h"
#include "core/rendering/svg/SVGRenderTreeAsText.h"
#include "wtf/HexNumber.h"
-#include "wtf/UnusedParam.h"
#include "wtf/Vector.h"
#include "wtf/unicode/CharacterNames.h"
@@ -67,39 +66,6 @@ namespace WebCore {
using namespace HTMLNames;
-static void writeLayers(TextStream&, const RenderLayer* rootLayer, RenderLayer*, const LayoutRect& paintDirtyRect, int indent = 0, RenderAsTextBehavior = RenderAsTextBehaviorNormal);
-
-TextStream& operator<<(TextStream& ts, const IntRect& r)
-{
- return ts << "at (" << r.x() << "," << r.y() << ") size " << r.width() << "x" << r.height();
-}
-
-TextStream& operator<<(TextStream& ts, const IntPoint& p)
-{
- return ts << "(" << p.x() << "," << p.y() << ")";
-}
-
-TextStream& operator<<(TextStream& ts, const FloatPoint& p)
-{
- ts << "(" << TextStream::FormatNumberRespectingIntegers(p.x());
- ts << "," << TextStream::FormatNumberRespectingIntegers(p.y());
- ts << ")";
- return ts;
-}
-
-TextStream& operator<<(TextStream& ts, const FloatSize& s)
-{
- ts << "width=" << TextStream::FormatNumberRespectingIntegers(s.width());
- ts << " height=" << TextStream::FormatNumberRespectingIntegers(s.height());
- return ts;
-}
-
-void writeIndent(TextStream& ts, int indent)
-{
- for (int i = 0; i != indent; ++i)
- ts << " ";
-}
-
static void printBorderStyle(TextStream& ts, const EBorderStyle borderStyle)
{
switch (borderStyle) {
@@ -524,7 +490,7 @@ void write(TextStream& ts, const RenderObject& o, int indent, RenderAsTextBehavi
view->layout();
RenderLayer* l = root->layer();
if (l)
- writeLayers(ts, l, l, l->rect(), indent + 1, behavior);
+ RenderTreeAsText::writeLayers(ts, l, l, l->rect(), indent + 1, behavior);
}
}
}
@@ -547,6 +513,9 @@ static void write(TextStream& ts, RenderLayer& l,
writeIndent(ts, indent);
+ if (l.renderer()->style()->visibility() == HIDDEN)
+ ts << "hidden ";
+
ts << "layer ";
if (behavior & RenderAsTextShowAddresses)
@@ -562,16 +531,18 @@ static void write(TextStream& ts, RenderLayer& l,
if (!adjustedOutlineClipRect.contains(adjustedLayoutBounds))
ts << " outlineClip " << adjustedOutlineClipRect;
}
+ if (l.isTransparent())
+ ts << " transparent";
if (l.renderer()->hasOverflowClip()) {
- if (l.scrollXOffset())
- ts << " scrollX " << l.scrollXOffset();
- if (l.scrollYOffset())
- ts << " scrollY " << l.scrollYOffset();
- if (l.renderBox() && l.renderBox()->pixelSnappedClientWidth() != l.scrollWidth())
- ts << " scrollWidth " << l.scrollWidth();
- if (l.renderBox() && l.renderBox()->pixelSnappedClientHeight() != l.scrollHeight())
- ts << " scrollHeight " << l.scrollHeight();
+ if (l.scrollableArea()->scrollXOffset())
+ ts << " scrollX " << l.scrollableArea()->scrollXOffset();
+ if (l.scrollableArea()->scrollYOffset())
+ ts << " scrollY " << l.scrollableArea()->scrollYOffset();
+ if (l.renderBox() && l.renderBox()->pixelSnappedClientWidth() != l.renderBox()->scrollWidth())
+ ts << " scrollWidth " << l.renderBox()->scrollWidth();
+ if (l.renderBox() && l.renderBox()->pixelSnappedClientHeight() != l.renderBox()->scrollHeight())
+ ts << " scrollHeight " << l.renderBox()->scrollHeight();
}
if (paintPhase == LayerPaintPhaseBackground)
@@ -580,8 +551,15 @@ static void write(TextStream& ts, RenderLayer& l,
ts << " layerType: foreground only";
if (behavior & RenderAsTextShowCompositedLayers) {
- if (l.isComposited())
- ts << " (composited, bounds=" << l.backing()->compositedBounds() << ", drawsContent=" << l.backing()->graphicsLayer()->drawsContent() << ", paints into ancestor=" << l.backing()->paintsIntoCompositedAncestor() << ")";
+ if (l.hasCompositedLayerMapping()) {
+ ts << " (composited, bounds="
+ << l.compositedLayerMapping()->compositedBounds()
+ << ", drawsContent="
+ << l.compositedLayerMapping()->mainGraphicsLayer()->drawsContent()
+ << ", paints into ancestor="
+ << l.compositedLayerMapping()->paintsIntoCompositedAncestor()
+ << ")";
+ }
}
ts << "\n";
@@ -593,24 +571,47 @@ static void write(TextStream& ts, RenderLayer& l,
static void writeRenderRegionList(const RenderRegionList& flowThreadRegionList, TextStream& ts, int indent)
{
for (RenderRegionList::const_iterator itRR = flowThreadRegionList.begin(); itRR != flowThreadRegionList.end(); ++itRR) {
- RenderRegion* renderRegion = *itRR;
- writeIndent(ts, indent + 2);
- ts << "RenderRegion";
- if (renderRegion->generatingNode()) {
- String tagName = getTagName(renderRegion->generatingNode());
- if (!tagName.isEmpty())
- ts << " {" << tagName << "}";
- if (renderRegion->generatingNode()->isElementNode() && renderRegion->generatingNode()->hasID()) {
- Element* element = toElement(renderRegion->generatingNode());
- ts << " #" << element->idForStyleResolution();
- }
+ const RenderRegion* renderRegion = *itRR;
+
+ writeIndent(ts, indent);
+ ts << renderRegion->renderName();
+
+ Node* generatingNodeForRegion = renderRegion->generatingNodeForRegion();
+ if (generatingNodeForRegion) {
if (renderRegion->hasCustomRegionStyle())
ts << " region style: 1";
if (renderRegion->hasAutoLogicalHeight())
ts << " hasAutoLogicalHeight";
+
+ bool isRenderNamedFlowFragment = renderRegion->isRenderNamedFlowFragment();
+ if (isRenderNamedFlowFragment)
+ ts << " (anonymous child of";
+
+ StringBuilder tagName;
+ tagName.append(generatingNodeForRegion->nodeName());
+
+ Node* nodeForRegion = renderRegion->nodeForRegion();
+ if (nodeForRegion->isPseudoElement()) {
+ if (nodeForRegion->isBeforePseudoElement())
+ tagName.append("::before");
+ else if (nodeForRegion->isAfterPseudoElement())
+ tagName.append("::after");
+ }
+
+ ts << " {" << tagName.toString() << "}";
+
+ if (generatingNodeForRegion->isElementNode() && generatingNodeForRegion->hasID()) {
+ Element* element = toElement(generatingNodeForRegion);
+ ts << " #" << element->idForStyleResolution();
+ }
+
+ if (isRenderNamedFlowFragment)
+ ts << ")";
}
+
if (!renderRegion->isValid())
ts << " invalid";
+
ts << "\n";
}
}
@@ -624,53 +625,59 @@ static void writeRenderNamedFlowThreads(TextStream& ts, RenderView* renderView,
const RenderNamedFlowThreadList* list = renderView->flowThreadController()->renderNamedFlowThreadList();
writeIndent(ts, indent);
- ts << "Flow Threads\n";
+ ts << "Named flows\n";
for (RenderNamedFlowThreadList::const_iterator iter = list->begin(); iter != list->end(); ++iter) {
const RenderNamedFlowThread* renderFlowThread = *iter;
writeIndent(ts, indent + 1);
- ts << "Thread with flow-name '" << renderFlowThread->flowThreadName() << "'\n";
+ ts << "Named flow '" << renderFlowThread->flowThreadName() << "'\n";
RenderLayer* layer = renderFlowThread->layer();
- writeLayers(ts, rootLayer, layer, paintRect, indent + 2, behavior);
+ RenderTreeAsText::writeLayers(ts, rootLayer, layer, paintRect, indent + 2, behavior);
// Display the valid and invalid render regions attached to this flow thread.
const RenderRegionList& validRegionsList = renderFlowThread->renderRegionList();
+ if (!validRegionsList.isEmpty()) {
+ writeIndent(ts, indent + 2);
+ ts << "Regions for named flow '" << renderFlowThread->flowThreadName() << "'\n";
+ writeRenderRegionList(validRegionsList, ts, indent + 3);
+ }
+
const RenderRegionList& invalidRegionsList = renderFlowThread->invalidRenderRegionList();
- if (!validRegionsList.isEmpty() || !invalidRegionsList.isEmpty()) {
- writeIndent(ts, indent + 1);
- ts << "Regions for flow '"<< renderFlowThread->flowThreadName() << "'\n";
- writeRenderRegionList(validRegionsList, ts, indent);
- writeRenderRegionList(invalidRegionsList, ts, indent);
+ if (!invalidRegionsList.isEmpty()) {
+ writeIndent(ts, indent + 2);
+ ts << "Invalid regions for named flow '" << renderFlowThread->flowThreadName() << "'\n";
+ writeRenderRegionList(invalidRegionsList, ts, indent + 3);
}
}
}
-static void writeLayers(TextStream& ts, const RenderLayer* rootLayer, RenderLayer* l,
+void RenderTreeAsText::writeLayers(TextStream& ts, const RenderLayer* rootLayer, RenderLayer* layer,
const LayoutRect& paintRect, int indent, RenderAsTextBehavior behavior)
{
// FIXME: Apply overflow to the root layer to not break every test. Complete hack. Sigh.
LayoutRect paintDirtyRect(paintRect);
- if (rootLayer == l) {
+ if (rootLayer == layer) {
paintDirtyRect.setWidth(max<LayoutUnit>(paintDirtyRect.width(), rootLayer->renderBox()->layoutOverflowRect().maxX()));
paintDirtyRect.setHeight(max<LayoutUnit>(paintDirtyRect.height(), rootLayer->renderBox()->layoutOverflowRect().maxY()));
- l->setSize(l->size().expandedTo(pixelSnappedIntSize(l->renderBox()->maxLayoutOverflow(), LayoutPoint(0, 0))));
+ layer->setSize(layer->size().expandedTo(pixelSnappedIntSize(layer->renderBox()->maxLayoutOverflow(), LayoutPoint(0, 0))));
}
// Calculate the clip rects we should use.
LayoutRect layerBounds;
ClipRect damageRect, clipRectToApply, outlineRect;
- l->calculateRects(RenderLayer::ClipRectsContext(rootLayer, 0, TemporaryClipRects), paintDirtyRect, layerBounds, damageRect, clipRectToApply, outlineRect);
+ layer->calculateRects(ClipRectsContext(rootLayer, 0, TemporaryClipRects), paintDirtyRect, layerBounds, damageRect, clipRectToApply, outlineRect);
// Ensure our lists are up-to-date.
- l->updateLayerListsIfNeeded();
+ layer->stackingNode()->updateLayerListsIfNeeded();
+
+ bool shouldPaint = (behavior & RenderAsTextShowAllLayers) ? true : layer->intersectsDamageRect(layerBounds, damageRect.rect(), rootLayer);
- bool shouldPaint = (behavior & RenderAsTextShowAllLayers) ? true : l->intersectsDamageRect(layerBounds, damageRect.rect(), rootLayer);
- Vector<RenderLayer*>* negList = l->negZOrderList();
+ Vector<RenderLayerStackingNode*>* negList = layer->stackingNode()->negZOrderList();
bool paintsBackgroundSeparately = negList && negList->size() > 0;
if (shouldPaint && paintsBackgroundSeparately)
- write(ts, *l, layerBounds, damageRect.rect(), clipRectToApply.rect(), outlineRect.rect(), LayerPaintPhaseBackground, indent, behavior);
+ write(ts, *layer, layerBounds, damageRect.rect(), clipRectToApply.rect(), outlineRect.rect(), LayerPaintPhaseBackground, indent, behavior);
if (negList) {
int currIndent = indent;
@@ -680,13 +687,13 @@ static void writeLayers(TextStream& ts, const RenderLayer* rootLayer, RenderLaye
++currIndent;
}
for (unsigned i = 0; i != negList->size(); ++i)
- writeLayers(ts, rootLayer, negList->at(i), paintDirtyRect, currIndent, behavior);
+ writeLayers(ts, rootLayer, negList->at(i)->layer(), paintDirtyRect, currIndent, behavior);
}
if (shouldPaint)
- write(ts, *l, layerBounds, damageRect.rect(), clipRectToApply.rect(), outlineRect.rect(), paintsBackgroundSeparately ? LayerPaintPhaseForeground : LayerPaintPhaseAll, indent, behavior);
+ write(ts, *layer, layerBounds, damageRect.rect(), clipRectToApply.rect(), outlineRect.rect(), paintsBackgroundSeparately ? LayerPaintPhaseForeground : LayerPaintPhaseAll, indent, behavior);
- if (Vector<RenderLayer*>* normalFlowList = l->normalFlowList()) {
+ if (Vector<RenderLayerStackingNode*>* normalFlowList = layer->stackingNode()->normalFlowList()) {
int currIndent = indent;
if (behavior & RenderAsTextShowLayerNesting) {
writeIndent(ts, indent);
@@ -694,10 +701,10 @@ static void writeLayers(TextStream& ts, const RenderLayer* rootLayer, RenderLaye
++currIndent;
}
for (unsigned i = 0; i != normalFlowList->size(); ++i)
- writeLayers(ts, rootLayer, normalFlowList->at(i), paintDirtyRect, currIndent, behavior);
+ writeLayers(ts, rootLayer, normalFlowList->at(i)->layer(), paintDirtyRect, currIndent, behavior);
}
- if (Vector<RenderLayer*>* posList = l->posZOrderList()) {
+ if (Vector<RenderLayerStackingNode*>* posList = layer->stackingNode()->posZOrderList()) {
int currIndent = indent;
if (behavior & RenderAsTextShowLayerNesting) {
writeIndent(ts, indent);
@@ -705,13 +712,13 @@ static void writeLayers(TextStream& ts, const RenderLayer* rootLayer, RenderLaye
++currIndent;
}
for (unsigned i = 0; i != posList->size(); ++i)
- writeLayers(ts, rootLayer, posList->at(i), paintDirtyRect, currIndent, behavior);
+ writeLayers(ts, rootLayer, posList->at(i)->layer(), paintDirtyRect, currIndent, behavior);
}
// Altough the RenderFlowThread requires a layer, it is not collected by its parent,
// so we have to treat it as a special case.
- if (l->renderer()->isRenderView()) {
- RenderView* renderView = toRenderView(l->renderer());
+ if (layer->renderer()->isRenderView()) {
+ RenderView* renderView = toRenderView(layer->renderer());
writeRenderNamedFlowThreads(ts, renderView, rootLayer, paintDirtyRect, indent, behavior);
}
}
@@ -779,7 +786,7 @@ static String externalRepresentation(RenderBox* renderer, RenderAsTextBehavior b
return ts.release();
RenderLayer* layer = renderer->layer();
- writeLayers(ts, layer, layer, layer->rect(), 0, behavior);
+ RenderTreeAsText::writeLayers(ts, layer, layer, layer->rect(), 0, behavior);
writeSelection(ts, renderer);
return ts.release();
}