| Index: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
|
| diff --git a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
|
| index d364b4aae8502a176c4cf733c207622263586046..0dc03eaaaec6b714ec5b493ef279003f20448697 100644
|
| --- a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
|
| @@ -152,8 +152,9 @@ TEST_P(PaintPropertyTreeBuilderTest, FixedPosition) {
|
| FrameView* frameView = document().view();
|
| frameView->updateAllLifecyclePhases();
|
|
|
| - // target1 is a fixed-position element inside an absolute-position scrolling element.
|
| - // It should be attached under the viewport to skip scrolling and offset of the parent.
|
| + // target1 is a fixed-position element inside an absolute-position scrolling
|
| + // element. It should be attached under the viewport to skip scrolling and
|
| + // offset of the parent.
|
| Element* target1 = document().getElementById("target1");
|
| const ObjectPaintProperties* target1Properties =
|
| target1->layoutObject()->objectPaintProperties();
|
| @@ -165,9 +166,11 @@ TEST_P(PaintPropertyTreeBuilderTest, FixedPosition) {
|
| target1Properties->overflowClip()->localTransformSpace());
|
| EXPECT_EQ(FloatRoundedRect(0, 0, 100, 100),
|
| target1Properties->overflowClip()->clipRect());
|
| - // Likewise, it inherits clip from the viewport, skipping overflow clip of the scroller.
|
| + // Likewise, it inherits clip from the viewport, skipping overflow clip of the
|
| + // scroller.
|
| EXPECT_EQ(frameContentClip(), target1Properties->overflowClip()->parent());
|
| - // target1 should not have it's own scroll node and instead should inherit positionedScroll's.
|
| + // target1 should not have it's own scroll node and instead should inherit
|
| + // positionedScroll's.
|
| const ObjectPaintProperties* positionedScrollProperties =
|
| positionedScroll->layoutObject()->objectPaintProperties();
|
| EXPECT_TRUE(positionedScrollProperties->scroll()->parent()->isRoot());
|
| @@ -198,7 +201,8 @@ TEST_P(PaintPropertyTreeBuilderTest, FixedPosition) {
|
| target2Properties->overflowClip()->clipRect());
|
| EXPECT_EQ(scrollerProperties->overflowClip(),
|
| target2Properties->overflowClip()->parent());
|
| - // target2 should not have it's own scroll node and instead should inherit transformedScroll's.
|
| + // target2 should not have it's own scroll node and instead should inherit
|
| + // transformedScroll's.
|
| const ObjectPaintProperties* transformedScrollProperties =
|
| transformedScroll->layoutObject()->objectPaintProperties();
|
| EXPECT_TRUE(transformedScrollProperties->scroll()->parent()->isRoot());
|
| @@ -241,8 +245,8 @@ TEST_P(PaintPropertyTreeBuilderTest, PositionAndScroll) {
|
| scroller->layoutObject(), frameView->layoutView());
|
| }
|
|
|
| - // The relative-positioned element should have accumulated box offset (exclude scrolling),
|
| - // and should be affected by ancestor scroll transforms.
|
| + // The relative-positioned element should have accumulated box offset (exclude
|
| + // scrolling), and should be affected by ancestor scroll transforms.
|
| Element* relPos = document().getElementById("rel-pos");
|
| const ObjectPaintProperties* relPosProperties =
|
| relPos->layoutObject()->objectPaintProperties();
|
| @@ -259,7 +263,8 @@ TEST_P(PaintPropertyTreeBuilderTest, PositionAndScroll) {
|
| CHECK_EXACT_VISUAL_RECT(LayoutRect(), relPos->layoutObject(),
|
| frameView->layoutView());
|
|
|
| - // The absolute-positioned element should not be affected by non-positioned scroller at all.
|
| + // The absolute-positioned element should not be affected by non-positioned
|
| + // scroller at all.
|
| Element* absPos = document().getElementById("abs-pos");
|
| const ObjectPaintProperties* absPosProperties =
|
| absPos->layoutObject()->objectPaintProperties();
|
| @@ -316,13 +321,15 @@ TEST_P(PaintPropertyTreeBuilderTest, Perspective) {
|
| perspective->layoutObject()->objectPaintProperties();
|
| EXPECT_EQ(TransformationMatrix().applyPerspective(100),
|
| perspectiveProperties->perspective()->matrix());
|
| - // The perspective origin is the center of the border box plus accumulated paint offset.
|
| + // The perspective origin is the center of the border box plus accumulated
|
| + // paint offset.
|
| EXPECT_EQ(FloatPoint3D(250, 250, 0),
|
| perspectiveProperties->perspective()->origin());
|
| EXPECT_EQ(framePreTranslation(),
|
| perspectiveProperties->perspective()->parent());
|
|
|
| - // Adding perspective doesn't clear paint offset. The paint offset will be passed down to children.
|
| + // Adding perspective doesn't clear paint offset. The paint offset will be
|
| + // passed down to children.
|
| Element* inner = document().getElementById("inner");
|
| const ObjectPaintProperties* innerProperties =
|
| inner->layoutObject()->objectPaintProperties();
|
| @@ -539,7 +546,8 @@ TEST_P(PaintPropertyTreeBuilderTest, EffectNodesInSVG) {
|
| EXPECT_EQ(groupWithOpacityProperties->effect(),
|
| rectWithOpacityProperties->effect()->parent());
|
|
|
| - // Ensure that opacity nodes are created for LayoutSVGText which inherits from LayoutSVGBlock instead of LayoutSVGModelObject.
|
| + // Ensure that opacity nodes are created for LayoutSVGText which inherits from
|
| + // LayoutSVGBlock instead of LayoutSVGModelObject.
|
| LayoutObject& textWithOpacity =
|
| *document().getElementById("textWithOpacity")->layoutObject();
|
| const ObjectPaintProperties* textWithOpacityProperties =
|
| @@ -548,7 +556,8 @@ TEST_P(PaintPropertyTreeBuilderTest, EffectNodesInSVG) {
|
| EXPECT_EQ(groupWithOpacityProperties->effect(),
|
| textWithOpacityProperties->effect()->parent());
|
|
|
| - // Ensure that opacity nodes are created for LayoutSVGTSpan which inherits from LayoutSVGInline instead of LayoutSVGModelObject.
|
| + // Ensure that opacity nodes are created for LayoutSVGTSpan which inherits
|
| + // from LayoutSVGInline instead of LayoutSVGModelObject.
|
| LayoutObject& tspanWithOpacity =
|
| *document().getElementById("tspanWithOpacity")->layoutObject();
|
| const ObjectPaintProperties* tspanWithOpacityProperties =
|
| @@ -757,7 +766,8 @@ TEST_P(PaintPropertyTreeBuilderTest, SVGRootLocalToBorderBoxTransformNode) {
|
| EXPECT_EQ(svgProperties->transform(),
|
| svgProperties->svgLocalToBorderBoxTransform()->parent());
|
|
|
| - // Ensure the rect's transform is a child of the local to border box transform.
|
| + // Ensure the rect's transform is a child of the local to border box
|
| + // transform.
|
| LayoutObject& rect = *document().getElementById("rect")->layoutObject();
|
| const ObjectPaintProperties* rectProperties = rect.objectPaintProperties();
|
| EXPECT_EQ(TransformationMatrix().translate(17, 19),
|
| @@ -866,7 +876,8 @@ TEST_P(PaintPropertyTreeBuilderTest,
|
| fixed->layoutObject()->objectPaintProperties();
|
| EXPECT_EQ(TransformationMatrix().translate(200, 150),
|
| fixedProperties->paintOffsetTranslation()->matrix());
|
| - // Ensure the fixed position element is rooted at the nearest transform container.
|
| + // Ensure the fixed position element is rooted at the nearest transform
|
| + // container.
|
| EXPECT_EQ(containerProperties->transform(),
|
| fixedProperties->paintOffsetTranslation()->parent());
|
| }
|
| @@ -888,7 +899,8 @@ TEST_P(PaintPropertyTreeBuilderTest, ControlClip) {
|
| LayoutObject& button = *document().getElementById("button")->layoutObject();
|
| const ObjectPaintProperties* buttonProperties =
|
| button.objectPaintProperties();
|
| - // No scroll translation because the document does not scroll (not enough content).
|
| + // No scroll translation because the document does not scroll (not enough
|
| + // content).
|
| EXPECT_TRUE(!frameScrollTranslation());
|
| EXPECT_EQ(framePreTranslation(),
|
| buttonProperties->overflowClip()->localTransformSpace());
|
| @@ -920,22 +932,26 @@ TEST_P(PaintPropertyTreeBuilderTest, BorderRadiusClip) {
|
|
|
| LayoutObject& div = *document().getElementById("div")->layoutObject();
|
| const ObjectPaintProperties* divProperties = div.objectPaintProperties();
|
| - // No scroll translation because the document does not scroll (not enough content).
|
| + // No scroll translation because the document does not scroll (not enough
|
| + // content).
|
| EXPECT_TRUE(!frameScrollTranslation());
|
| EXPECT_EQ(framePreTranslation(),
|
| divProperties->overflowClip()->localTransformSpace());
|
| // The overflow clip rect includes only the padding box.
|
| - // padding box = border box(500+60+50, 400+45+55) - border outset(60+50, 45+55) - scrollbars(15, 15)
|
| + // padding box = border box(500+60+50, 400+45+55) - border outset(60+50,
|
| + // 45+55) - scrollbars(15, 15)
|
| EXPECT_EQ(FloatRoundedRect(60, 45, 500, 400),
|
| divProperties->overflowClip()->clipRect());
|
| const ClipPaintPropertyNode* borderRadiusClip =
|
| divProperties->overflowClip()->parent();
|
| EXPECT_EQ(framePreTranslation(), borderRadiusClip->localTransformSpace());
|
| - // The border radius clip is the area enclosed by inner border edge, including the scrollbars.
|
| - // As the border-radius is specified in outer radius, the inner radius is calculated by:
|
| + // The border radius clip is the area enclosed by inner border edge, including
|
| + // the scrollbars. As the border-radius is specified in outer radius, the
|
| + // inner radius is calculated by:
|
| // inner radius = max(outer radius - border width, 0)
|
| - // In the case that two adjacent borders have different width, the inner radius of the corner
|
| - // may transition from one value to the other. i.e. being an ellipse.
|
| + // In the case that two adjacent borders have different width, the inner
|
| + // radius of the corner may transition from one value to the other. i.e. being
|
| + // an ellipse.
|
| EXPECT_EQ(
|
| FloatRoundedRect(
|
| FloatRect(60, 45, 500,
|
| @@ -990,7 +1006,8 @@ TEST_P(PaintPropertyTreeBuilderTest, TransformNodesAcrossSubframes) {
|
| CHECK_EXACT_VISUAL_RECT(LayoutRect(12, 14, 100, 145), innerDivWithTransform,
|
| frameView->layoutView());
|
|
|
| - // Ensure that the inner div's transform is correctly rooted in the root frame's transform tree.
|
| + // Ensure that the inner div's transform is correctly rooted in the root
|
| + // frame's transform tree.
|
| // This asserts that we have the following tree structure:
|
| // ...
|
| // Transform transform=translation=1.000000,2.000000,3.000000
|
| @@ -1029,8 +1046,8 @@ TEST_P(PaintPropertyTreeBuilderTest, TransformNodesInTransformedSubframes) {
|
| // PaintOffsetTranslation transform=translation=7.000000,7.000000,0.000000
|
| // Transform transform=translation=4.000000,5.000000,6.000000
|
| // PreTranslation transform=translation=42.000000,42.000000,0.000000
|
| - // ScrollTranslation transform=translation=0.000000,0.000000,0.000000
|
| - // PaintOffsetTranslation transform=translation=31.000000,31.000000,0.000000
|
| + // ScrollTranslation transform=translation=0.000000,0.000000,0.00000
|
| + // PaintOffsetTranslation transform=translation=31.00,31.00,0.00
|
| // Transform transform=translation=7.000000,8.000000,9.000000
|
|
|
| LayoutObject* innerDivWithTransform =
|
| @@ -1074,9 +1091,9 @@ TEST_P(PaintPropertyTreeBuilderTest, TransformNodesInTransformedSubframes) {
|
| }
|
|
|
| TEST_P(PaintPropertyTreeBuilderTest, TreeContextClipByNonStackingContext) {
|
| - // This test verifies the tree builder correctly computes and records the property tree context
|
| - // for a (pseudo) stacking context that is scrolled by a containing block that is not one of
|
| - // the painting ancestors.
|
| + // This test verifies the tree builder correctly computes and records the
|
| + // property tree context for a (pseudo) stacking context that is scrolled by a
|
| + // containing block that is not one of the painting ancestors.
|
| setBodyInnerHTML(
|
| "<style>body { margin: 0; }</style>"
|
| "<div id='scroller' style='overflow:scroll; width:400px; height:300px;'>"
|
| @@ -1110,9 +1127,10 @@ TEST_P(PaintPropertyTreeBuilderTest, TreeContextClipByNonStackingContext) {
|
|
|
| TEST_P(PaintPropertyTreeBuilderTest,
|
| TreeContextUnclipFromParentStackingContext) {
|
| - // This test verifies the tree builder correctly computes and records the property tree context
|
| - // for a (pseudo) stacking context that has a scrolling painting ancestor that is not its
|
| - // containing block (thus should not be scrolled by it).
|
| + // This test verifies the tree builder correctly computes and records the
|
| + // property tree context for a (pseudo) stacking context that has a scrolling
|
| + // painting ancestor that is not its containing block (thus should not be
|
| + // scrolled by it).
|
|
|
| setBodyInnerHTML(
|
| "<style>body { margin: 0; }</style>"
|
| @@ -1147,8 +1165,9 @@ TEST_P(PaintPropertyTreeBuilderTest,
|
| }
|
|
|
| TEST_P(PaintPropertyTreeBuilderTest, TableCellLayoutLocation) {
|
| - // This test verifies that the border box space of a table cell is being correctly computed.
|
| - // Table cells have weird location adjustment in our layout/paint implementation.
|
| + // This test verifies that the border box space of a table cell is being
|
| + // correctly computed. Table cells have weird location adjustment in our
|
| + // layout/paint implementation.
|
| setBodyInnerHTML(
|
| "<style>"
|
| " body {"
|
| @@ -1189,8 +1208,9 @@ TEST_P(PaintPropertyTreeBuilderTest, TableCellLayoutLocation) {
|
| }
|
|
|
| TEST_P(PaintPropertyTreeBuilderTest, CSSClipFixedPositionDescendant) {
|
| - // This test verifies that clip tree hierarchy being generated correctly for the hard case
|
| - // such that a fixed position element getting clipped by an absolute position CSS clip.
|
| + // This test verifies that clip tree hierarchy being generated correctly for
|
| + // the hard case such that a fixed position element getting clipped by an
|
| + // absolute position CSS clip.
|
| setBodyInnerHTML(
|
| "<style>"
|
| " #clip {"
|
| @@ -1221,10 +1241,10 @@ TEST_P(PaintPropertyTreeBuilderTest, CSSClipFixedPositionDescendant) {
|
| clipProperties->cssClip()->localTransformSpace());
|
| EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)),
|
| clipProperties->cssClip()->clipRect());
|
| - CHECK_VISUAL_RECT(
|
| - absoluteClipRect, &clip, document().view()->layoutView(),
|
| - // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace() doesn't apply css clip on the object itself.
|
| - LayoutUnit::max());
|
| + CHECK_VISUAL_RECT(absoluteClipRect, &clip, document().view()->layoutView(),
|
| + // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace()
|
| + // doesn't apply css clip on the object itself.
|
| + LayoutUnit::max());
|
|
|
| LayoutObject* fixed = document().getElementById("fixed")->layoutObject();
|
| const ObjectPaintProperties* fixedProperties = fixed->objectPaintProperties();
|
| @@ -1240,15 +1260,17 @@ TEST_P(PaintPropertyTreeBuilderTest, CSSClipFixedPositionDescendant) {
|
| ->matrix());
|
| EXPECT_EQ(LayoutPoint(),
|
| fixedProperties->localBorderBoxProperties()->paintOffset);
|
| - CHECK_VISUAL_RECT(
|
| - LayoutRect(), fixed, document().view()->layoutView(),
|
| - // TODO(crbug.com/599939): CSS clip of fixed-position descendants is broken in mapToVisualRectInAncestorSpace().
|
| - LayoutUnit::max());
|
| + CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(),
|
| + // TODO(crbug.com/599939): CSS clip of fixed-position
|
| + // descendants is broken in
|
| + // mapToVisualRectInAncestorSpace().
|
| + LayoutUnit::max());
|
| }
|
|
|
| TEST_P(PaintPropertyTreeBuilderTest, CSSClipAbsPositionDescendant) {
|
| - // This test verifies that clip tree hierarchy being generated correctly for the hard case
|
| - // such that a fixed position element getting clipped by an absolute position CSS clip.
|
| + // This test verifies that clip tree hierarchy being generated correctly for
|
| + // the hard case such that a fixed position element getting clipped by an
|
| + // absolute position CSS clip.
|
| setBodyInnerHTML(
|
| "<style>"
|
| " #clip {"
|
| @@ -1276,16 +1298,17 @@ TEST_P(PaintPropertyTreeBuilderTest, CSSClipAbsPositionDescendant) {
|
| LayoutObject* clip = document().getElementById("clip")->layoutObject();
|
| const ObjectPaintProperties* clipProperties = clip->objectPaintProperties();
|
| EXPECT_EQ(frameContentClip(), clipProperties->cssClip()->parent());
|
| - // No scroll translation because the document does not scroll (not enough content).
|
| + // No scroll translation because the document does not scroll (not enough
|
| + // content).
|
| EXPECT_TRUE(!frameScrollTranslation());
|
| EXPECT_EQ(framePreTranslation(),
|
| clipProperties->cssClip()->localTransformSpace());
|
| EXPECT_EQ(FloatRoundedRect(FloatRect(absoluteClipRect)),
|
| clipProperties->cssClip()->clipRect());
|
| - CHECK_VISUAL_RECT(
|
| - absoluteClipRect, clip, document().view()->layoutView(),
|
| - // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace() doesn't apply css clip on the object itself.
|
| - LayoutUnit::max());
|
| + CHECK_VISUAL_RECT(absoluteClipRect, clip, document().view()->layoutView(),
|
| + // TODO(crbug.com/599939): mapToVisualRectInAncestorSpace()
|
| + // doesn't apply css clip on the object itself.
|
| + LayoutUnit::max());
|
|
|
| LayoutObject* absolute =
|
| document().getElementById("absolute")->layoutObject();
|
| @@ -1298,15 +1321,17 @@ TEST_P(PaintPropertyTreeBuilderTest, CSSClipAbsPositionDescendant) {
|
| ->propertyTreeState.transform());
|
| EXPECT_EQ(LayoutPoint(123, 456),
|
| absPosProperties->localBorderBoxProperties()->paintOffset);
|
| - CHECK_VISUAL_RECT(
|
| - LayoutRect(), absolute, document().view()->layoutView(),
|
| - // TODO(crbug.com/599939): CSS clip of fixed-position descendants is broken in mapToVisualRectInAncestorSpace().
|
| - LayoutUnit::max());
|
| + CHECK_VISUAL_RECT(LayoutRect(), absolute, document().view()->layoutView(),
|
| + // TODO(crbug.com/599939): CSS clip of fixed-position
|
| + // descendants is broken in
|
| + // mapToVisualRectInAncestorSpace().
|
| + LayoutUnit::max());
|
| }
|
|
|
| TEST_P(PaintPropertyTreeBuilderTest, CSSClipFixedPositionDescendantNonShared) {
|
| // This test is similar to CSSClipFixedPositionDescendant above, except that
|
| - // now we have a parent overflow clip that should be escaped by the fixed descendant.
|
| + // now we have a parent overflow clip that should be escaped by the fixed
|
| + // descendant.
|
| setBodyInnerHTML(
|
| "<style>"
|
| " body {"
|
| @@ -1342,7 +1367,8 @@ TEST_P(PaintPropertyTreeBuilderTest, CSSClipFixedPositionDescendantNonShared) {
|
| const ObjectPaintProperties* overflowProperties =
|
| overflow.objectPaintProperties();
|
| EXPECT_EQ(frameContentClip(), overflowProperties->overflowClip()->parent());
|
| - // No scroll translation because the document does not scroll (not enough content).
|
| + // No scroll translation because the document does not scroll (not enough
|
| + // content).
|
| EXPECT_TRUE(!frameScrollTranslation());
|
| EXPECT_EQ(framePreTranslation(),
|
| overflowProperties->scrollTranslation()->parent());
|
| @@ -1379,10 +1405,10 @@ TEST_P(PaintPropertyTreeBuilderTest, CSSClipFixedPositionDescendantNonShared) {
|
| ->matrix());
|
| EXPECT_EQ(LayoutPoint(),
|
| fixedProperties->localBorderBoxProperties()->paintOffset);
|
| - CHECK_VISUAL_RECT(
|
| - LayoutRect(), fixed, document().view()->layoutView(),
|
| - // TODO(crbug.com/599939): CSS clip of fixed-position descendants is broken in geometry mapping.
|
| - LayoutUnit::max());
|
| + CHECK_VISUAL_RECT(LayoutRect(), fixed, document().view()->layoutView(),
|
| + // TODO(crbug.com/599939): CSS clip of fixed-position
|
| + // descendants is broken in geometry mapping.
|
| + LayoutUnit::max());
|
| }
|
|
|
| TEST_P(PaintPropertyTreeBuilderTest, ColumnSpannerUnderRelativePositioned) {
|
| @@ -1460,15 +1486,16 @@ TEST_P(PaintPropertyTreeBuilderTest, PaintOffsetWithBasicPixelSnapping) {
|
| CHECK_EXACT_VISUAL_RECT(LayoutRect(FloatRect(0.3, 0.3, 40, 40)), b,
|
| frameView->layoutView());
|
|
|
| - // c should be painted starting at subpixelAccumulation + (0.1,0.1) = (0.4,0.4).
|
| + // c should be painted starting at subpixelAccumulation + (0.1,0.1) =
|
| + // (0.4,0.4).
|
| LayoutObject* c = document().getElementById("c")->layoutObject();
|
| LayoutPoint cPaintOffset =
|
| subpixelAccumulation + LayoutPoint(FloatPoint(0.1, 0.1));
|
| const ObjectPaintProperties* cProperties = c->objectPaintProperties();
|
| EXPECT_EQ(cPaintOffset, cProperties->localBorderBoxProperties()->paintOffset);
|
| - // Visual rects via the non-paint properties system use enclosingIntRect before applying transforms,
|
| - // because they are computed bottom-up and therefore can't apply pixel snapping. Therefore apply a
|
| - // slop of 1px.
|
| + // Visual rects via the non-paint properties system use enclosingIntRect
|
| + // before applying transforms, because they are computed bottom-up and
|
| + // therefore can't apply pixel snapping. Therefore apply a slop of 1px.
|
| CHECK_VISUAL_RECT(LayoutRect(FloatRect(0.4, 0.4, 40, 40)), c,
|
| frameView->layoutView(), 1);
|
| }
|
| @@ -1505,15 +1532,16 @@ TEST_P(PaintPropertyTreeBuilderTest,
|
| LayoutUnit(40), LayoutUnit(40)),
|
| b, frameView->layoutView());
|
|
|
| - // c should be painted starting at subpixelAccumulation + (0.7,0.7) = (0.4,0.4).
|
| + // c should be painted starting at subpixelAccumulation + (0.7,0.7) =
|
| + // (0.4,0.4).
|
| LayoutObject* c = document().getElementById("c")->layoutObject();
|
| LayoutPoint cPaintOffset =
|
| subpixelAccumulation + LayoutPoint(FloatPoint(0.7, 0.7));
|
| const ObjectPaintProperties* cProperties = c->objectPaintProperties();
|
| EXPECT_EQ(cPaintOffset, cProperties->localBorderBoxProperties()->paintOffset);
|
| - // Visual rects via the non-paint properties system use enclosingIntRect before applying transforms,
|
| - // because they are computed bottom-up and therefore can't apply pixel snapping. Therefore apply a
|
| - // slop of 1px.
|
| + // Visual rects via the non-paint properties system use enclosingIntRect
|
| + // before applying transforms, because they are computed bottom-up and
|
| + // therefore can't apply pixel snapping. Therefore apply a slop of 1px.
|
| CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(0.7) + LayoutUnit(0.7),
|
| LayoutUnit(0.7) + LayoutUnit(0.7),
|
| LayoutUnit(40), LayoutUnit(40)),
|
| @@ -1559,8 +1587,8 @@ TEST_P(PaintPropertyTreeBuilderTest,
|
| const ObjectPaintProperties* cProperties = c->objectPaintProperties();
|
| EXPECT_EQ(TransformationMatrix().translate3d(11, 13, 0),
|
| cProperties->transform()->matrix());
|
| - // The paint offset should be (-0.3,-0.3) but the paint offset transform should still be at
|
| - // (0,0) because it should be snapped.
|
| + // The paint offset should be (-0.3,-0.3) but the paint offset transform
|
| + // should still be at (0,0) because it should be snapped.
|
| EXPECT_EQ(TransformationMatrix().translate(0, 0),
|
| cProperties->transform()->parent()->matrix());
|
| // The residual subpixel adjustment should still be (-0.3,-0.3).
|
| @@ -1570,15 +1598,16 @@ TEST_P(PaintPropertyTreeBuilderTest,
|
| LayoutUnit(40), LayoutUnit(40)),
|
| c, frameView->layoutView());
|
|
|
| - // d should be painted starting at subpixelAccumulation + (0.7,0.7) = (0.4,0.4).
|
| + // d should be painted starting at subpixelAccumulation + (0.7,0.7) =
|
| + // (0.4,0.4).
|
| LayoutObject* d = document().getElementById("d")->layoutObject();
|
| LayoutPoint dPaintOffset =
|
| subpixelAccumulation + LayoutPoint(FloatPoint(0.7, 0.7));
|
| const ObjectPaintProperties* dProperties = d->objectPaintProperties();
|
| EXPECT_EQ(dPaintOffset, dProperties->localBorderBoxProperties()->paintOffset);
|
| - // Visual rects via the non-paint properties system use enclosingIntRect before applying transforms,
|
| - // because they are computed bottom-up and therefore can't apply pixel snapping. Therefore apply a
|
| - // slop of 1px.
|
| + // Visual rects via the non-paint properties system use enclosingIntRect
|
| + // before applying transforms, because they are computed bottom-up and
|
| + // therefore can't apply pixel snapping. Therefore apply a slop of 1px.
|
| CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(16.7) + LayoutUnit(0.7),
|
| LayoutUnit(20.7) + LayoutUnit(0.7),
|
| LayoutUnit(40), LayoutUnit(40)),
|
| @@ -1633,9 +1662,9 @@ TEST_P(PaintPropertyTreeBuilderTest, PaintOffsetWithPixelSnappingWithFixedPos) {
|
| subpixelAccumulation + LayoutPoint(FloatPoint(0.7, 0));
|
| const ObjectPaintProperties* dProperties = d->objectPaintProperties();
|
| EXPECT_EQ(dPaintOffset, dProperties->localBorderBoxProperties()->paintOffset);
|
| - // Visual rects via the non-paint properties system use enclosingIntRect before applying transforms,
|
| - // because they are computed bottom-up and therefore can't apply pixel snapping. Therefore apply a
|
| - // slop of 1px.
|
| + // Visual rects via the non-paint properties system use enclosingIntRect
|
| + // before applying transforms, because they are computed bottom-up and
|
| + // therefore can't apply pixel snapping. Therefore apply a slop of 1px.
|
| CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(0.7) + LayoutUnit(0.7), LayoutUnit(),
|
| LayoutUnit(40), LayoutUnit(40)),
|
| d, frameView->layoutView(), 1);
|
| @@ -1667,7 +1696,8 @@ TEST_P(PaintPropertyTreeBuilderTest, SvgPixelSnappingShouldResetPaintOffset) {
|
| EXPECT_EQ(TransformationMatrix().translate(1, 1),
|
| rectWithTransformProperties->transform()->matrix());
|
|
|
| - // Ensure there is no PaintOffset transform between the rect and the svg's transform.
|
| + // Ensure there is no PaintOffset transform between the rect and the svg's
|
| + // transform.
|
| EXPECT_EQ(svgWithTransformProperties->transform(),
|
| rectWithTransformProperties->transform()->parent());
|
| }
|
| @@ -1928,8 +1958,9 @@ TEST_P(PaintPropertyTreeBuilderTest, CachedProperties) {
|
| CHECK_EXACT_VISUAL_RECT(LayoutRect(165, 198, 10, 20), c->layoutObject(),
|
| frameView->layoutView());
|
|
|
| - // Change transform of b. B's transform node should be a new node with the new value,
|
| - // and a and c's transform nodes should be unchanged (with c's parent adjusted).
|
| + // Change transform of b. B's transform node should be a new node with the new
|
| + // value, and a and c's transform nodes should be unchanged (with c's parent
|
| + // adjusted).
|
| b->setAttribute(HTMLNames::styleAttr, "transform: translate(111px, 222px)");
|
| document().view()->updateAllLifecyclePhases();
|
|
|
| @@ -1953,8 +1984,9 @@ TEST_P(PaintPropertyTreeBuilderTest, CachedProperties) {
|
| CHECK_EXACT_VISUAL_RECT(LayoutRect(221, 354, 10, 20), c->layoutObject(),
|
| frameView->layoutView());
|
|
|
| - // Remove transform from b. B's transform node should be removed from the tree,
|
| - // and a and c's transform nodes should be unchanged (with c's parent adjusted).
|
| + // Remove transform from b. B's transform node should be removed from the
|
| + // tree, and a and c's transform nodes should be unchanged (with c's parent
|
| + // adjusted).
|
| b->setAttribute(HTMLNames::styleAttr, "");
|
| document().view()->updateAllLifecyclePhases();
|
|
|
| @@ -1976,7 +2008,8 @@ TEST_P(PaintPropertyTreeBuilderTest, CachedProperties) {
|
| frameView->layoutView());
|
|
|
| // Re-add transform to b. B's transform node should be inserted into the tree,
|
| - // and a and c's transform nodes should be unchanged (with c's parent adjusted).
|
| + // and a and c's transform nodes should be unchanged (with c's parent
|
| + // adjusted).
|
| b->setAttribute(HTMLNames::styleAttr, "transform: translate(4px, 5px)");
|
| document().view()->updateAllLifecyclePhases();
|
|
|
| @@ -2001,9 +2034,9 @@ TEST_P(PaintPropertyTreeBuilderTest, CachedProperties) {
|
| }
|
|
|
| TEST_P(PaintPropertyTreeBuilderTest, OverflowClipContentsTreeState) {
|
| - // This test verifies the tree builder correctly computes and records the property tree context
|
| - // for a (pseudo) stacking context that is scrolled by a containing block that is not one of
|
| - // the painting ancestors.
|
| + // This test verifies the tree builder correctly computes and records the
|
| + // property tree context for a (pseudo) stacking context that is scrolled by a
|
| + // containing block that is not one of the painting ancestors.
|
| setBodyInnerHTML(
|
| "<style>body { margin: 20px 30px; }</style>"
|
| "<div id='clipper' style='overflow:hidden; width:400px; height:300px;'>"
|
| @@ -2018,7 +2051,8 @@ TEST_P(PaintPropertyTreeBuilderTest, OverflowClipContentsTreeState) {
|
| LayoutObject* child = document().getElementById("child")->layoutObject();
|
| const ObjectPaintProperties* childProperties = child->objectPaintProperties();
|
|
|
| - // No scroll translation because the document does not scroll (not enough content).
|
| + // No scroll translation because the document does not scroll (not enough
|
| + // content).
|
| EXPECT_TRUE(!frameScrollTranslation());
|
| EXPECT_EQ(framePreTranslation(), clipProperties->localBorderBoxProperties()
|
| ->propertyTreeState.transform());
|
| @@ -2060,7 +2094,8 @@ TEST_P(PaintPropertyTreeBuilderTest, ContainsPaintContentsTreeState) {
|
| LayoutObject* child = document().getElementById("child")->layoutObject();
|
| const ObjectPaintProperties* childProperties = child->objectPaintProperties();
|
|
|
| - // No scroll translation because the document does not scroll (not enough content).
|
| + // No scroll translation because the document does not scroll (not enough
|
| + // content).
|
| EXPECT_TRUE(!frameScrollTranslation());
|
| EXPECT_EQ(framePreTranslation(), clipProperties->localBorderBoxProperties()
|
| ->propertyTreeState.transform());
|
| @@ -2088,9 +2123,9 @@ TEST_P(PaintPropertyTreeBuilderTest, ContainsPaintContentsTreeState) {
|
| }
|
|
|
| TEST_P(PaintPropertyTreeBuilderTest, OverflowScrollContentsTreeState) {
|
| - // This test verifies the tree builder correctly computes and records the property tree context
|
| - // for a (pseudo) stacking context that is scrolled by a containing block that is not one of
|
| - // the painting ancestors.
|
| + // This test verifies the tree builder correctly computes and records the
|
| + // property tree context for a (pseudo) stacking context that is scrolled by a
|
| + // containing block that is not one of the painting ancestors.
|
| setBodyInnerHTML(
|
| "<style>body { margin: 20px 30px; }</style>"
|
| "<div id='clipper' style='overflow:scroll; width:400px; height:300px;'>"
|
| @@ -2168,7 +2203,8 @@ TEST_P(PaintPropertyTreeBuilderTest, OverflowScrollWithRoundedRect) {
|
| FloatSize(50, 50), FloatSize(50, 50), FloatSize(50, 50)),
|
| roundedBoxProperties->innerBorderRadiusClip()->clipRect());
|
|
|
| - // Unlike the inner border radius clip, the overflow clip is inset by the scrollbars (13px).
|
| + // Unlike the inner border radius clip, the overflow clip is inset by the
|
| + // scrollbars (13px).
|
| EXPECT_EQ(FloatRoundedRect(50, 50, 187, 187),
|
| roundedBoxProperties->overflowClip()->clipRect());
|
| EXPECT_EQ(frameContentClip(),
|
| @@ -2178,9 +2214,9 @@ TEST_P(PaintPropertyTreeBuilderTest, OverflowScrollWithRoundedRect) {
|
| }
|
|
|
| TEST_P(PaintPropertyTreeBuilderTest, CssClipContentsTreeState) {
|
| - // This test verifies the tree builder correctly computes and records the property tree context
|
| - // for a (pseudo) stacking context that is scrolled by a containing block that is not one of
|
| - // the painting ancestors.
|
| + // This test verifies the tree builder correctly computes and records the
|
| + // property tree context for a (pseudo) stacking context that is scrolled by a
|
| + // containing block that is not one of the painting ancestors.
|
| setBodyInnerHTML(
|
| "<style>body { margin: 20px 30px; }</style>"
|
| "<div id='clipper' style='position: absolute; clip: rect(10px, 80px, "
|
| @@ -2195,7 +2231,8 @@ TEST_P(PaintPropertyTreeBuilderTest, CssClipContentsTreeState) {
|
| clipper->objectPaintProperties();
|
| LayoutObject* child = document().getElementById("child")->layoutObject();
|
|
|
| - // No scroll translation because the document does not scroll (not enough content).
|
| + // No scroll translation because the document does not scroll (not enough
|
| + // content).
|
| EXPECT_TRUE(!frameScrollTranslation());
|
| EXPECT_EQ(framePreTranslation(), clipProperties->localBorderBoxProperties()
|
| ->propertyTreeState.transform());
|
| @@ -2274,7 +2311,8 @@ TEST_P(PaintPropertyTreeBuilderTest, OverflowHiddenScrollProperties) {
|
|
|
| const ObjectPaintProperties* overflowHiddenScrollProperties =
|
| overflowHidden->layoutObject()->objectPaintProperties();
|
| - // Because the frameView is does not scroll, overflowHidden's scroll should be under the root.
|
| + // Because the frameView is does not scroll, overflowHidden's scroll should be
|
| + // under the root.
|
| EXPECT_TRUE(overflowHiddenScrollProperties->scroll()->parent()->isRoot());
|
| EXPECT_EQ(TransformationMatrix().translate(0, -37),
|
| overflowHiddenScrollProperties->scroll()
|
| @@ -2282,10 +2320,11 @@ TEST_P(PaintPropertyTreeBuilderTest, OverflowHiddenScrollProperties) {
|
| ->matrix());
|
| // This should match the overflow's dimensions.
|
| EXPECT_EQ(IntSize(5, 3), overflowHiddenScrollProperties->scroll()->clip());
|
| - // The scrolling content's bounds should include both the overflow's dimensions (5x3) and the
|
| - // 0x79 "forceScroll" object.
|
| + // The scrolling content's bounds should include both the overflow's
|
| + // dimensions (5x3) and the 0x79 "forceScroll" object.
|
| EXPECT_EQ(IntSize(5, 79), overflowHiddenScrollProperties->scroll()->bounds());
|
| - // Although overflow: hidden is programmatically scrollable, it is not user scrollable.
|
| + // Although overflow: hidden is programmatically scrollable, it is not user
|
| + // scrollable.
|
| EXPECT_FALSE(
|
| overflowHiddenScrollProperties->scroll()->userScrollableHorizontal());
|
| EXPECT_FALSE(
|
| @@ -2328,20 +2367,23 @@ TEST_P(PaintPropertyTreeBuilderTest, NestedScrollProperties) {
|
|
|
| const ObjectPaintProperties* overflowAScrollProperties =
|
| overflowA->layoutObject()->objectPaintProperties();
|
| - // Because the frameView is does not scroll, overflowA's scroll should be under the root.
|
| + // Because the frameView is does not scroll, overflowA's scroll should be
|
| + // under the root.
|
| EXPECT_TRUE(overflowAScrollProperties->scroll()->parent()->isRoot());
|
| EXPECT_EQ(
|
| TransformationMatrix().translate(0, -37),
|
| overflowAScrollProperties->scroll()->scrollOffsetTranslation()->matrix());
|
| EXPECT_EQ(IntSize(5, 3), overflowAScrollProperties->scroll()->clip());
|
| - // 107 is the forceScroll element plus the height of the overflow scroll child (overflowB).
|
| + // 107 is the forceScroll element plus the height of the overflow scroll child
|
| + // (overflowB).
|
| EXPECT_EQ(IntSize(9, 107), overflowAScrollProperties->scroll()->bounds());
|
| EXPECT_TRUE(overflowAScrollProperties->scroll()->userScrollableHorizontal());
|
| EXPECT_TRUE(overflowAScrollProperties->scroll()->userScrollableVertical());
|
|
|
| const ObjectPaintProperties* overflowBScrollProperties =
|
| overflowB->layoutObject()->objectPaintProperties();
|
| - // The overflow child's scroll node should be a child of the parent's (overflowA) scroll node.
|
| + // The overflow child's scroll node should be a child of the parent's
|
| + // (overflowA) scroll node.
|
| EXPECT_EQ(overflowAScrollProperties->scroll(),
|
| overflowBScrollProperties->scroll()->parent());
|
| EXPECT_EQ(
|
| @@ -2414,13 +2456,15 @@ TEST_P(PaintPropertyTreeBuilderTest, PositionedScrollerIsNotNested) {
|
| TransformationMatrix().translate(0, -37),
|
| overflowScrollProperties->scroll()->scrollOffsetTranslation()->matrix());
|
| EXPECT_EQ(IntSize(5, 3), overflowScrollProperties->scroll()->clip());
|
| - // The height should be 4000px because the (dom-order) overflow children are positioned and do not
|
| - // contribute to the height. Only the 4000px "forceScroll" height is present.
|
| + // The height should be 4000px because the (dom-order) overflow children are
|
| + // positioned and do not contribute to the height. Only the 4000px
|
| + // "forceScroll" height is present.
|
| EXPECT_EQ(IntSize(5, 4000), overflowScrollProperties->scroll()->bounds());
|
|
|
| const ObjectPaintProperties* absposOverflowScrollProperties =
|
| absposOverflow->layoutObject()->objectPaintProperties();
|
| - // The absolute position overflow scroll node is parented under the frame, not the dom-order parent.
|
| + // The absolute position overflow scroll node is parented under the frame, not
|
| + // the dom-order parent.
|
| EXPECT_EQ(frameScroll(), absposOverflowScrollProperties->scroll()->parent());
|
| EXPECT_EQ(TransformationMatrix().translate(0, -41),
|
| absposOverflowScrollProperties->scroll()
|
| @@ -2432,7 +2476,8 @@ TEST_P(PaintPropertyTreeBuilderTest, PositionedScrollerIsNotNested) {
|
|
|
| const ObjectPaintProperties* fixedOverflowScrollProperties =
|
| fixedOverflow->layoutObject()->objectPaintProperties();
|
| - // The fixed position overflow scroll node is parented under the root, not the dom-order parent or frame's scroll.
|
| + // The fixed position overflow scroll node is parented under the root, not the
|
| + // dom-order parent or frame's scroll.
|
| EXPECT_TRUE(fixedOverflowScrollProperties->scroll()->parent()->isRoot());
|
| EXPECT_EQ(TransformationMatrix().translate(0, -43),
|
| fixedOverflowScrollProperties->scroll()
|
| @@ -2485,20 +2530,23 @@ TEST_P(PaintPropertyTreeBuilderTest, NestedPositionedScrollProperties) {
|
|
|
| const ObjectPaintProperties* overflowAScrollProperties =
|
| overflowA->layoutObject()->objectPaintProperties();
|
| - // Because the frameView is does not scroll, overflowA's scroll should be under the root.
|
| + // Because the frameView is does not scroll, overflowA's scroll should be
|
| + // under the root.
|
| EXPECT_TRUE(overflowAScrollProperties->scroll()->parent()->isRoot());
|
| EXPECT_EQ(
|
| TransformationMatrix().translate(0, -37),
|
| overflowAScrollProperties->scroll()->scrollOffsetTranslation()->matrix());
|
| EXPECT_EQ(IntSize(20, 20), overflowAScrollProperties->scroll()->clip());
|
| - // 100 is the forceScroll element's height because the overflow child does not contribute to the height.
|
| + // 100 is the forceScroll element's height because the overflow child does not
|
| + // contribute to the height.
|
| EXPECT_EQ(IntSize(20, 100), overflowAScrollProperties->scroll()->bounds());
|
| EXPECT_TRUE(overflowAScrollProperties->scroll()->userScrollableHorizontal());
|
| EXPECT_TRUE(overflowAScrollProperties->scroll()->userScrollableVertical());
|
|
|
| const ObjectPaintProperties* overflowBScrollProperties =
|
| overflowB->layoutObject()->objectPaintProperties();
|
| - // The overflow child's scroll node should be a child of the parent's (overflowA) scroll node.
|
| + // The overflow child's scroll node should be a child of the parent's
|
| + // (overflowA) scroll node.
|
| EXPECT_EQ(overflowAScrollProperties->scroll(),
|
| overflowBScrollProperties->scroll()->parent());
|
| EXPECT_EQ(
|
|
|