| 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 0bd39b24c1d26095495def793d9203972de95d3e..9979fdd019d6bc03bd1a02f449159e970f201d15 100644
|
| --- a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
|
| @@ -1109,4 +1109,78 @@ TEST_F(PaintPropertyTreeBuilderTest, SvgPixelSnappingShouldResetPaintOffset)
|
| EXPECT_EQ(svgWithTransformProperties->transform(), rectWithTransformProperties->transform()->parent());
|
| }
|
|
|
| +TEST_F(PaintPropertyTreeBuilderTest, CachedProperties)
|
| +{
|
| + setBodyInnerHTML(
|
| + "<div id='a' style='transform: translate(33px, 44px)'>"
|
| + " <div id='b' style='transform: translate(55px, 66px)'>"
|
| + " <div id='c' style='transform: translate(77px, 88px)'>C<div>"
|
| + " </div>"
|
| + "</div>");
|
| +
|
| + Element* a = document().getElementById("a");
|
| + ObjectPaintProperties* aProperties = a->layoutObject()->objectPaintProperties();
|
| + TransformPaintPropertyNode* aTransformNode = aProperties->transform();
|
| + EXPECT_EQ(TransformationMatrix().translate(33, 44), aTransformNode->matrix());
|
| +
|
| + Element* b = document().getElementById("b");
|
| + ObjectPaintProperties* bProperties = b->layoutObject()->objectPaintProperties();
|
| + TransformPaintPropertyNode* bTransformNode = bProperties->transform();
|
| + EXPECT_EQ(TransformationMatrix().translate(55, 66), bTransformNode->matrix());
|
| +
|
| + Element* c = document().getElementById("c");
|
| + ObjectPaintProperties* cProperties = c->layoutObject()->objectPaintProperties();
|
| + TransformPaintPropertyNode* cTransformNode = cProperties->transform();
|
| + EXPECT_EQ(TransformationMatrix().translate(77, 88), cTransformNode->matrix());
|
| +
|
| + // 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();
|
| +
|
| + EXPECT_EQ(aProperties, a->layoutObject()->objectPaintProperties());
|
| + EXPECT_EQ(aTransformNode, aProperties->transform());
|
| +
|
| + EXPECT_EQ(bProperties, b->layoutObject()->objectPaintProperties());
|
| + bTransformNode = bProperties->transform();
|
| + EXPECT_EQ(TransformationMatrix().translate(111, 222), bTransformNode->matrix());
|
| + EXPECT_EQ(aTransformNode, bTransformNode->parent());
|
| +
|
| + EXPECT_EQ(cProperties, c->layoutObject()->objectPaintProperties());
|
| + EXPECT_EQ(cTransformNode, cProperties->transform());
|
| + EXPECT_EQ(bTransformNode, cTransformNode->parent());
|
| +
|
| + // 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();
|
| +
|
| + EXPECT_EQ(aProperties, a->layoutObject()->objectPaintProperties());
|
| + EXPECT_EQ(aTransformNode, aProperties->transform());
|
| +
|
| + EXPECT_EQ(bProperties, b->layoutObject()->objectPaintProperties());
|
| + EXPECT_EQ(nullptr, bProperties->transform());
|
| +
|
| + EXPECT_EQ(cProperties, c->layoutObject()->objectPaintProperties());
|
| + EXPECT_EQ(cTransformNode, cProperties->transform());
|
| + EXPECT_EQ(aTransformNode, cTransformNode->parent());
|
| +
|
| + // 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).
|
| + b->setAttribute(HTMLNames::styleAttr, "transform: translate(4px, 5px)");
|
| + document().view()->updateAllLifecyclePhases();
|
| +
|
| + EXPECT_EQ(aProperties, a->layoutObject()->objectPaintProperties());
|
| + EXPECT_EQ(aTransformNode, aProperties->transform());
|
| +
|
| + EXPECT_EQ(bProperties, b->layoutObject()->objectPaintProperties());
|
| + bTransformNode = bProperties->transform();
|
| + EXPECT_EQ(TransformationMatrix().translate(4, 5), bTransformNode->matrix());
|
| + EXPECT_EQ(aTransformNode, bTransformNode->parent());
|
| +
|
| + EXPECT_EQ(cProperties, c->layoutObject()->objectPaintProperties());
|
| + EXPECT_EQ(cTransformNode, cProperties->transform());
|
| + EXPECT_EQ(bTransformNode, cTransformNode->parent());
|
| +}
|
| +
|
| } // namespace blink
|
|
|