diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/rendering/RenderTreeAsText.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/core/rendering/RenderTreeAsText.cpp | 175 |
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(); } |