Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/layout/LayoutTestHelper.h" | 5 #include "core/layout/LayoutTestHelper.h" |
| 6 #include "core/layout/LayoutTreeAsText.h" | 6 #include "core/layout/LayoutTreeAsText.h" |
| 7 #include "core/layout/api/LayoutViewItem.h" | 7 #include "core/layout/api/LayoutViewItem.h" |
| 8 #include "core/paint/ObjectPaintProperties.h" | 8 #include "core/paint/ObjectPaintProperties.h" |
| 9 #include "platform/graphics/paint/GeometryMapper.h" | 9 #include "platform/graphics/paint/GeometryMapper.h" |
| 10 #include "platform/graphics/paint/TransformPaintPropertyNode.h" | 10 #include "platform/graphics/paint/TransformPaintPropertyNode.h" |
| 11 #include "platform/testing/UnitTestHelpers.h" | 11 #include "platform/testing/UnitTestHelpers.h" |
| 12 #include "platform/text/TextStream.h" | 12 #include "platform/text/TextStream.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 14 #include "wtf/HashMap.h" | 14 #include "wtf/HashMap.h" |
| 15 #include "wtf/Vector.h" | 15 #include "wtf/Vector.h" |
| 16 | 16 |
| 17 namespace blink { | 17 namespace blink { |
| 18 | 18 |
| 19 typedef bool TestParamRootLayerScrolling; | |
| 19 class PaintPropertyTreeBuilderTest | 20 class PaintPropertyTreeBuilderTest |
| 20 : public RenderingTest | 21 : public RenderingTest |
| 21 , public ::testing::WithParamInterface<FrameSettingOverrideFunction> { | 22 , public ::testing::WithParamInterface<TestParamRootLayerScrolling> { |
| 22 public: | 23 public: |
| 23 PaintPropertyTreeBuilderTest() | 24 PaintPropertyTreeBuilderTest() |
| 24 : RenderingTest(SingleChildFrameLoaderClient::create()) | 25 : RenderingTest(SingleChildFrameLoaderClient::create()) |
| 25 , m_originalSlimmingPaintV2Enabled(RuntimeEnabledFeatures::slimmingPaint V2Enabled()) { } | 26 , m_originalSlimmingPaintV2Enabled(RuntimeEnabledFeatures::slimmingPaint V2Enabled()) |
| 27 , m_originalRootLayerScrollingEnabled(RuntimeEnabledFeatures::rootLayerS crollingEnabled()) | |
| 28 , m_enableRootLayerScrolling(GetParam()) | |
| 29 { | |
| 30 RuntimeEnabledFeatures::setSlimmingPaintV2Enabled(true); | |
| 31 RuntimeEnabledFeatures::setRootLayerScrollingEnabled(m_enableRootLayerSc rolling); | |
| 32 } | |
| 33 | |
| 34 ~PaintPropertyTreeBuilderTest() | |
| 35 { | |
| 36 CHECK_EQ(true, RuntimeEnabledFeatures::slimmingPaintV2Enabled()); | |
| 37 CHECK_EQ(m_enableRootLayerScrolling, RuntimeEnabledFeatures::rootLayerSc rollingEnabled()); | |
| 38 RuntimeEnabledFeatures::setRootLayerScrollingEnabled(m_originalRootLayer ScrollingEnabled); | |
|
esprehn
2016/08/25 23:59:24
We do this manually in a lot of places?
trchen
2016/08/26 00:15:11
Good point. I was tired of this too. I can make it
| |
| 39 RuntimeEnabledFeatures::setSlimmingPaintV2Enabled(m_originalSlimmingPain tV2Enabled); | |
| 40 } | |
| 26 | 41 |
| 27 void loadTestData(const char* fileName) | 42 void loadTestData(const char* fileName) |
| 28 { | 43 { |
| 29 String fullPath = testing::blinkRootDir(); | 44 String fullPath = testing::blinkRootDir(); |
| 30 fullPath.append("/Source/core/paint/test_data/"); | 45 fullPath.append("/Source/core/paint/test_data/"); |
| 31 fullPath.append(fileName); | 46 fullPath.append(fileName); |
| 32 RefPtr<SharedBuffer> inputBuffer = testing::readFromFile(fullPath); | 47 RefPtr<SharedBuffer> inputBuffer = testing::readFromFile(fullPath); |
| 33 setBodyInnerHTML(String(inputBuffer->data(), inputBuffer->size())); | 48 setBodyInnerHTML(String(inputBuffer->data(), inputBuffer->size())); |
| 34 } | 49 } |
| 35 | 50 |
| 36 bool rootLayerScrolls() | |
| 37 { | |
| 38 return document().settings() && document().settings()->rootLayerScrolls( ); | |
| 39 } | |
| 40 | |
| 41 const TransformPaintPropertyNode* rootTransform() | 51 const TransformPaintPropertyNode* rootTransform() |
| 42 { | 52 { |
| 43 FrameView* frameView = document().view(); | 53 FrameView* frameView = document().view(); |
| 44 if (rootLayerScrolls()) | 54 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) |
| 45 return frameView->layoutView()->objectPaintProperties()->paintOffset Translation(); | 55 return frameView->layoutView()->objectPaintProperties()->paintOffset Translation(); |
| 46 return frameView->rootTransform(); | 56 return frameView->rootTransform(); |
| 47 } | 57 } |
| 48 | 58 |
| 49 const ClipPaintPropertyNode* rootClip() | 59 const ClipPaintPropertyNode* rootClip() |
| 50 { | 60 { |
| 51 if (rootLayerScrolls()) | 61 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) |
| 52 return document().view()->layoutView()->objectPaintProperties()->loc alBorderBoxProperties()->propertyTreeState.clip.get(); | 62 return document().view()->layoutView()->objectPaintProperties()->loc alBorderBoxProperties()->propertyTreeState.clip.get(); |
| 53 return document().view()->rootClip(); | 63 return document().view()->rootClip(); |
| 54 } | 64 } |
| 55 | 65 |
| 56 const TransformPaintPropertyNode* framePreTranslation() | 66 const TransformPaintPropertyNode* framePreTranslation() |
| 57 { | 67 { |
| 58 FrameView* frameView = document().view(); | 68 FrameView* frameView = document().view(); |
| 59 if (rootLayerScrolls()) | 69 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) |
| 60 return frameView->layoutView()->objectPaintProperties()->paintOffset Translation(); | 70 return frameView->layoutView()->objectPaintProperties()->paintOffset Translation(); |
| 61 return frameView->preTranslation(); | 71 return frameView->preTranslation(); |
| 62 } | 72 } |
| 63 | 73 |
| 64 const TransformPaintPropertyNode* frameScrollTranslation() | 74 const TransformPaintPropertyNode* frameScrollTranslation() |
| 65 { | 75 { |
| 66 FrameView* frameView = document().view(); | 76 FrameView* frameView = document().view(); |
| 67 if (rootLayerScrolls()) | 77 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) |
| 68 return frameView->layoutView()->objectPaintProperties()->scrollTrans lation(); | 78 return frameView->layoutView()->objectPaintProperties()->scrollTrans lation(); |
| 69 return frameView->scrollTranslation(); | 79 return frameView->scrollTranslation(); |
| 70 } | 80 } |
| 71 | 81 |
| 72 const ClipPaintPropertyNode* frameContentClip() | 82 const ClipPaintPropertyNode* frameContentClip() |
| 73 { | 83 { |
| 74 FrameView* frameView = document().view(); | 84 FrameView* frameView = document().view(); |
| 75 if (rootLayerScrolls()) | 85 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) |
| 76 return frameView->layoutView()->objectPaintProperties()->overflowCli p(); | 86 return frameView->layoutView()->objectPaintProperties()->overflowCli p(); |
| 77 return frameView->contentClip(); | 87 return frameView->contentClip(); |
| 78 } | 88 } |
| 79 | 89 |
| 80 FrameSettingOverrideFunction settingOverrider() const override { return GetP aram(); } | |
| 81 | |
| 82 private: | 90 private: |
| 83 void SetUp() override | 91 void SetUp() override |
| 84 { | 92 { |
| 85 RuntimeEnabledFeatures::setSlimmingPaintV2Enabled(true); | |
| 86 Settings::setMockScrollbarsEnabled(true); | 93 Settings::setMockScrollbarsEnabled(true); |
| 87 | 94 |
| 88 RenderingTest::SetUp(); | 95 RenderingTest::SetUp(); |
| 89 enableCompositing(); | 96 enableCompositing(); |
| 90 } | 97 } |
| 91 | 98 |
| 92 void TearDown() override | 99 void TearDown() override |
| 93 { | 100 { |
| 94 RenderingTest::TearDown(); | 101 RenderingTest::TearDown(); |
| 95 | 102 |
| 96 Settings::setMockScrollbarsEnabled(false); | 103 Settings::setMockScrollbarsEnabled(false); |
| 97 RuntimeEnabledFeatures::setSlimmingPaintV2Enabled(m_originalSlimmingPain tV2Enabled); | |
| 98 } | 104 } |
| 99 | 105 |
| 100 bool m_originalSlimmingPaintV2Enabled; | 106 bool m_originalSlimmingPaintV2Enabled; |
| 107 bool m_originalRootLayerScrollingEnabled; | |
| 108 bool m_enableRootLayerScrolling; | |
| 101 }; | 109 }; |
| 102 | 110 |
| 103 #define CHECK_VISUAL_RECT(expected, sourceLayoutObject, ancestorLayoutObject, sl opFactor) \ | 111 #define CHECK_VISUAL_RECT(expected, sourceLayoutObject, ancestorLayoutObject, sl opFactor) \ |
| 104 do { \ | 112 do { \ |
| 105 GeometryMapper geometryMapper; \ | 113 GeometryMapper geometryMapper; \ |
| 106 LayoutRect source((sourceLayoutObject)->localOverflowRectForPaintInvalidatio n()); \ | 114 LayoutRect source((sourceLayoutObject)->localOverflowRectForPaintInvalidatio n()); \ |
| 107 source.moveBy((sourceLayoutObject)->objectPaintProperties()->localBorderBoxP roperties()->paintOffset); \ | 115 source.moveBy((sourceLayoutObject)->objectPaintProperties()->localBorderBoxP roperties()->paintOffset); \ |
| 108 bool success = false; \ | 116 bool success = false; \ |
| 109 FloatRect actual = geometryMapper.mapToVisualRectInDestinationSpace( \ | 117 FloatRect actual = geometryMapper.mapToVisualRectInDestinationSpace( \ |
| 110 FloatRect(source), \ | 118 FloatRect(source), \ |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 123 SCOPED_TRACE(String::format("Old path rect: %s, Actual: %s, Inflated act ual: %s", slowPathRect.toString().ascii().data(), actual.toString().ascii().data (), inflatedActual.toString().ascii().data())); \ | 131 SCOPED_TRACE(String::format("Old path rect: %s, Actual: %s, Inflated act ual: %s", slowPathRect.toString().ascii().data(), actual.toString().ascii().data (), inflatedActual.toString().ascii().data())); \ |
| 124 EXPECT_TRUE(slowPathRect.contains(LayoutRect(actual))); \ | 132 EXPECT_TRUE(slowPathRect.contains(LayoutRect(actual))); \ |
| 125 EXPECT_TRUE(inflatedActual.contains(slowPathRect)); \ | 133 EXPECT_TRUE(inflatedActual.contains(slowPathRect)); \ |
| 126 } else { \ | 134 } else { \ |
| 127 EXPECT_EQ(slowPathRect, LayoutRect(actual)); \ | 135 EXPECT_EQ(slowPathRect, LayoutRect(actual)); \ |
| 128 } \ | 136 } \ |
| 129 } while (0) | 137 } while (0) |
| 130 | 138 |
| 131 #define CHECK_EXACT_VISUAL_RECT(expected, sourceLayoutObject, ancestorLayoutObje ct) CHECK_VISUAL_RECT(expected, sourceLayoutObject, ancestorLayoutObject, 0) | 139 #define CHECK_EXACT_VISUAL_RECT(expected, sourceLayoutObject, ancestorLayoutObje ct) CHECK_VISUAL_RECT(expected, sourceLayoutObject, ancestorLayoutObject, 0) |
| 132 | 140 |
| 133 INSTANTIATE_TEST_CASE_P(All, PaintPropertyTreeBuilderTest, ::testing::Values(nul lptr, &RootLayerScrollsFrameSettingOverride)); | 141 INSTANTIATE_TEST_CASE_P(All, PaintPropertyTreeBuilderTest, ::testing::Bool()); |
| 134 | 142 |
| 135 TEST_P(PaintPropertyTreeBuilderTest, FixedPosition) | 143 TEST_P(PaintPropertyTreeBuilderTest, FixedPosition) |
| 136 { | 144 { |
| 137 loadTestData("fixed-position.html"); | 145 loadTestData("fixed-position.html"); |
| 138 | 146 |
| 139 FrameView* frameView = document().view(); | 147 FrameView* frameView = document().view(); |
| 140 | 148 |
| 141 // target1 is a fixed-position element inside an absolute-position scrolling element. | 149 // target1 is a fixed-position element inside an absolute-position scrolling element. |
| 142 // It should be attached under the viewport to skip scrolling and offset of the parent. | 150 // It should be attached under the viewport to skip scrolling and offset of the parent. |
| 143 Element* target1 = document().getElementById("target1"); | 151 Element* target1 = document().getElementById("target1"); |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 172 scroller->scrollTo(0, 100); | 180 scroller->scrollTo(0, 100); |
| 173 FrameView* frameView = document().view(); | 181 FrameView* frameView = document().view(); |
| 174 frameView->updateAllLifecyclePhases(); | 182 frameView->updateAllLifecyclePhases(); |
| 175 const ObjectPaintProperties* scrollerProperties = scroller->layoutObject()-> objectPaintProperties(); | 183 const ObjectPaintProperties* scrollerProperties = scroller->layoutObject()-> objectPaintProperties(); |
| 176 EXPECT_EQ(TransformationMatrix().translate(0, -100), scrollerProperties->scr ollTranslation()->matrix()); | 184 EXPECT_EQ(TransformationMatrix().translate(0, -100), scrollerProperties->scr ollTranslation()->matrix()); |
| 177 EXPECT_EQ(frameScrollTranslation(), scrollerProperties->scrollTranslation()- >parent()); | 185 EXPECT_EQ(frameScrollTranslation(), scrollerProperties->scrollTranslation()- >parent()); |
| 178 EXPECT_EQ(frameScrollTranslation(), scrollerProperties->overflowClip()->loca lTransformSpace()); | 186 EXPECT_EQ(frameScrollTranslation(), scrollerProperties->overflowClip()->loca lTransformSpace()); |
| 179 EXPECT_EQ(FloatRoundedRect(120, 340, 400, 300), scrollerProperties->overflow Clip()->clipRect()); | 187 EXPECT_EQ(FloatRoundedRect(120, 340, 400, 300), scrollerProperties->overflow Clip()->clipRect()); |
| 180 EXPECT_EQ(frameContentClip(), scrollerProperties->overflowClip()->parent()); | 188 EXPECT_EQ(frameContentClip(), scrollerProperties->overflowClip()->parent()); |
| 181 // http://crbug.com/638415 | 189 // http://crbug.com/638415 |
| 182 if (!rootLayerScrolls()) { | 190 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { |
| 183 CHECK_EXACT_VISUAL_RECT(LayoutRect(120, 340, 400, 300), scroller->layout Object(), frameView->layoutView()); | 191 CHECK_EXACT_VISUAL_RECT(LayoutRect(120, 340, 400, 300), scroller->layout Object(), frameView->layoutView()); |
| 184 } | 192 } |
| 185 | 193 |
| 186 // The relative-positioned element should have accumulated box offset (exclu de scrolling), | 194 // The relative-positioned element should have accumulated box offset (exclu de scrolling), |
| 187 // and should be affected by ancestor scroll transforms. | 195 // and should be affected by ancestor scroll transforms. |
| 188 Element* relPos = document().getElementById("rel-pos"); | 196 Element* relPos = document().getElementById("rel-pos"); |
| 189 const ObjectPaintProperties* relPosProperties = relPos->layoutObject()->obje ctPaintProperties(); | 197 const ObjectPaintProperties* relPosProperties = relPos->layoutObject()->obje ctPaintProperties(); |
| 190 EXPECT_EQ(TransformationMatrix().translate(680, 1120), relPosProperties->pai ntOffsetTranslation()->matrix()); | 198 EXPECT_EQ(TransformationMatrix().translate(680, 1120), relPosProperties->pai ntOffsetTranslation()->matrix()); |
| 191 EXPECT_EQ(scrollerProperties->scrollTranslation(), relPosProperties->paintOf fsetTranslation()->parent()); | 199 EXPECT_EQ(scrollerProperties->scrollTranslation(), relPosProperties->paintOf fsetTranslation()->parent()); |
| 192 EXPECT_EQ(relPosProperties->transform(), relPosProperties->overflowClip()->l ocalTransformSpace()); | 200 EXPECT_EQ(relPosProperties->transform(), relPosProperties->overflowClip()->l ocalTransformSpace()); |
| 193 EXPECT_EQ(FloatRoundedRect(0, 0, 100, 200), relPosProperties->overflowClip() ->clipRect()); | 201 EXPECT_EQ(FloatRoundedRect(0, 0, 100, 200), relPosProperties->overflowClip() ->clipRect()); |
| 194 EXPECT_EQ(scrollerProperties->overflowClip(), relPosProperties->overflowClip ()->parent()); | 202 EXPECT_EQ(scrollerProperties->overflowClip(), relPosProperties->overflowClip ()->parent()); |
| 195 CHECK_EXACT_VISUAL_RECT(LayoutRect(), relPos->layoutObject(), frameView->lay outView()); | 203 CHECK_EXACT_VISUAL_RECT(LayoutRect(), relPos->layoutObject(), frameView->lay outView()); |
| 196 | 204 |
| 197 // The absolute-positioned element should not be affected by non-positioned scroller at all. | 205 // The absolute-positioned element should not be affected by non-positioned scroller at all. |
| 198 Element* absPos = document().getElementById("abs-pos"); | 206 Element* absPos = document().getElementById("abs-pos"); |
| 199 const ObjectPaintProperties* absPosProperties = absPos->layoutObject()->obje ctPaintProperties(); | 207 const ObjectPaintProperties* absPosProperties = absPos->layoutObject()->obje ctPaintProperties(); |
| 200 EXPECT_EQ(TransformationMatrix().translate(123, 456), absPosProperties->pain tOffsetTranslation()->matrix()); | 208 EXPECT_EQ(TransformationMatrix().translate(123, 456), absPosProperties->pain tOffsetTranslation()->matrix()); |
| 201 EXPECT_EQ(frameScrollTranslation(), absPosProperties->paintOffsetTranslation ()->parent()); | 209 EXPECT_EQ(frameScrollTranslation(), absPosProperties->paintOffsetTranslation ()->parent()); |
| 202 EXPECT_EQ(absPosProperties->transform(), absPosProperties->overflowClip()->l ocalTransformSpace()); | 210 EXPECT_EQ(absPosProperties->transform(), absPosProperties->overflowClip()->l ocalTransformSpace()); |
| 203 EXPECT_EQ(FloatRoundedRect(0, 0, 300, 400), absPosProperties->overflowClip() ->clipRect()); | 211 EXPECT_EQ(FloatRoundedRect(0, 0, 300, 400), absPosProperties->overflowClip() ->clipRect()); |
| 204 EXPECT_EQ(frameContentClip(), absPosProperties->overflowClip()->parent()); | 212 EXPECT_EQ(frameContentClip(), absPosProperties->overflowClip()->parent()); |
| 205 // http://crbug.com/638415 | 213 // http://crbug.com/638415 |
| 206 if (!rootLayerScrolls()) { | 214 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { |
| 207 CHECK_EXACT_VISUAL_RECT(LayoutRect(123, 456, 300, 400), absPos->layoutOb ject(), frameView->layoutView()); | 215 CHECK_EXACT_VISUAL_RECT(LayoutRect(123, 456, 300, 400), absPos->layoutOb ject(), frameView->layoutView()); |
| 208 } | 216 } |
| 209 } | 217 } |
| 210 | 218 |
| 211 TEST_P(PaintPropertyTreeBuilderTest, FrameScrollingTraditional) | 219 TEST_P(PaintPropertyTreeBuilderTest, FrameScrollingTraditional) |
| 212 { | 220 { |
| 213 setBodyInnerHTML("<style> body { height: 10000px; } </style>"); | 221 setBodyInnerHTML("<style> body { height: 10000px; } </style>"); |
| 214 | 222 |
| 215 document().domWindow()->scrollTo(0, 100); | 223 document().domWindow()->scrollTo(0, 100); |
| 216 | 224 |
| 217 FrameView* frameView = document().view(); | 225 FrameView* frameView = document().view(); |
| 218 frameView->updateAllLifecyclePhases(); | 226 frameView->updateAllLifecyclePhases(); |
| 219 EXPECT_EQ(TransformationMatrix(), framePreTranslation()->matrix()); | 227 EXPECT_EQ(TransformationMatrix(), framePreTranslation()->matrix()); |
| 220 if (!rootLayerScrolls()) | 228 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) |
| 221 EXPECT_EQ(rootTransform(), framePreTranslation()->parent()); | 229 EXPECT_EQ(rootTransform(), framePreTranslation()->parent()); |
| 222 EXPECT_EQ(nullptr, rootTransform()->parent()); | 230 EXPECT_EQ(nullptr, rootTransform()->parent()); |
| 223 EXPECT_EQ(TransformationMatrix().translate(0, -100), frameScrollTranslation( )->matrix()); | 231 EXPECT_EQ(TransformationMatrix().translate(0, -100), frameScrollTranslation( )->matrix()); |
| 224 EXPECT_EQ(framePreTranslation(), frameScrollTranslation()->parent()); | 232 EXPECT_EQ(framePreTranslation(), frameScrollTranslation()->parent()); |
| 225 EXPECT_EQ(framePreTranslation(), frameContentClip()->localTransformSpace()); | 233 EXPECT_EQ(framePreTranslation(), frameContentClip()->localTransformSpace()); |
| 226 EXPECT_EQ(FloatRoundedRect(0, 0, 800, 600), frameContentClip()->clipRect()); | 234 EXPECT_EQ(FloatRoundedRect(0, 0, 800, 600), frameContentClip()->clipRect()); |
| 227 EXPECT_EQ(rootClip(), frameContentClip()->parent()); | 235 EXPECT_EQ(rootClip(), frameContentClip()->parent()); |
| 228 if (!rootLayerScrolls()) | 236 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) |
| 229 EXPECT_EQ(nullptr, rootClip()->parent()); | 237 EXPECT_EQ(nullptr, rootClip()->parent()); |
| 230 | 238 |
| 231 LayoutViewItem layoutViewItem = document().layoutViewItem(); | 239 LayoutViewItem layoutViewItem = document().layoutViewItem(); |
| 232 const ObjectPaintProperties* layoutViewProperties = layoutViewItem.objectPai ntProperties(); | 240 const ObjectPaintProperties* layoutViewProperties = layoutViewItem.objectPai ntProperties(); |
| 233 // http://crbug.com/638415 | 241 // http://crbug.com/638415 |
| 234 if (!rootLayerScrolls()) { | 242 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { |
| 235 EXPECT_EQ(nullptr, layoutViewProperties->scrollTranslation()); | 243 EXPECT_EQ(nullptr, layoutViewProperties->scrollTranslation()); |
| 236 CHECK_EXACT_VISUAL_RECT(LayoutRect(8, 8, 784, 10000), document().body()- >layoutObject(), frameView->layoutView()); | 244 CHECK_EXACT_VISUAL_RECT(LayoutRect(8, 8, 784, 10000), document().body()- >layoutObject(), frameView->layoutView()); |
| 237 } | 245 } |
| 238 } | 246 } |
| 239 | 247 |
| 240 TEST_P(PaintPropertyTreeBuilderTest, Perspective) | 248 TEST_P(PaintPropertyTreeBuilderTest, Perspective) |
| 241 { | 249 { |
| 242 loadTestData("perspective.html"); | 250 loadTestData("perspective.html"); |
| 243 | 251 |
| 244 Element* perspective = document().getElementById("perspective"); | 252 Element* perspective = document().getElementById("perspective"); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 261 loadTestData("transform.html"); | 269 loadTestData("transform.html"); |
| 262 | 270 |
| 263 Element* transform = document().getElementById("transform"); | 271 Element* transform = document().getElementById("transform"); |
| 264 const ObjectPaintProperties* transformProperties = transform->layoutObject() ->objectPaintProperties(); | 272 const ObjectPaintProperties* transformProperties = transform->layoutObject() ->objectPaintProperties(); |
| 265 EXPECT_EQ(TransformationMatrix().translate3d(123, 456, 789), transformProper ties->transform()->matrix()); | 273 EXPECT_EQ(TransformationMatrix().translate3d(123, 456, 789), transformProper ties->transform()->matrix()); |
| 266 EXPECT_EQ(FloatPoint3D(200, 150, 0), transformProperties->transform()->origi n()); | 274 EXPECT_EQ(FloatPoint3D(200, 150, 0), transformProperties->transform()->origi n()); |
| 267 EXPECT_EQ(transformProperties->paintOffsetTranslation(), transformProperties ->transform()->parent()); | 275 EXPECT_EQ(transformProperties->paintOffsetTranslation(), transformProperties ->transform()->parent()); |
| 268 EXPECT_EQ(TransformationMatrix().translate(50, 100), transformProperties->pa intOffsetTranslation()->matrix()); | 276 EXPECT_EQ(TransformationMatrix().translate(50, 100), transformProperties->pa intOffsetTranslation()->matrix()); |
| 269 EXPECT_EQ(frameScrollTranslation(), transformProperties->paintOffsetTranslat ion()->parent()); | 277 EXPECT_EQ(frameScrollTranslation(), transformProperties->paintOffsetTranslat ion()->parent()); |
| 270 // http://crbug.com/638415 | 278 // http://crbug.com/638415 |
| 271 if (!rootLayerScrolls()) { | 279 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { |
| 272 CHECK_EXACT_VISUAL_RECT(LayoutRect(173, 556, 400, 300), transform->layou tObject(), document().view()->layoutView()); | 280 CHECK_EXACT_VISUAL_RECT(LayoutRect(173, 556, 400, 300), transform->layou tObject(), document().view()->layoutView()); |
| 273 } | 281 } |
| 274 } | 282 } |
| 275 | 283 |
| 276 TEST_P(PaintPropertyTreeBuilderTest, RelativePositionInline) | 284 TEST_P(PaintPropertyTreeBuilderTest, RelativePositionInline) |
| 277 { | 285 { |
| 278 loadTestData("relative-position-inline.html"); | 286 loadTestData("relative-position-inline.html"); |
| 279 | 287 |
| 280 Element* inlineBlock = document().getElementById("inline-block"); | 288 Element* inlineBlock = document().getElementById("inline-block"); |
| 281 const ObjectPaintProperties* inlineBlockProperties = inlineBlock->layoutObje ct()->objectPaintProperties(); | 289 const ObjectPaintProperties* inlineBlockProperties = inlineBlock->layoutObje ct()->objectPaintProperties(); |
| (...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 741 "</div>"); | 749 "</div>"); |
| 742 Document& frameDocument = setupChildIframe("frame", | 750 Document& frameDocument = setupChildIframe("frame", |
| 743 "<style>body { margin: 0; }</style><div id='transform' style='transform: translate3d(4px, 5px, 6px); width: 100px; height: 200px'></div>"); | 751 "<style>body { margin: 0; }</style><div id='transform' style='transform: translate3d(4px, 5px, 6px); width: 100px; height: 200px'></div>"); |
| 744 FrameView* frameView = document().view(); | 752 FrameView* frameView = document().view(); |
| 745 frameView->updateAllLifecyclePhases(); | 753 frameView->updateAllLifecyclePhases(); |
| 746 | 754 |
| 747 LayoutObject* divWithTransform = document().getElementById("divWithTransform ")->layoutObject(); | 755 LayoutObject* divWithTransform = document().getElementById("divWithTransform ")->layoutObject(); |
| 748 const ObjectPaintProperties* divWithTransformProperties = divWithTransform-> objectPaintProperties(); | 756 const ObjectPaintProperties* divWithTransformProperties = divWithTransform-> objectPaintProperties(); |
| 749 EXPECT_EQ(TransformationMatrix().translate3d(1, 2, 3), divWithTransformPrope rties->transform()->matrix()); | 757 EXPECT_EQ(TransformationMatrix().translate3d(1, 2, 3), divWithTransformPrope rties->transform()->matrix()); |
| 750 // http://crbug.com/638415 | 758 // http://crbug.com/638415 |
| 751 if (!rootLayerScrolls()) { | 759 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { |
| 752 CHECK_EXACT_VISUAL_RECT(LayoutRect(1, 2, 800, 164), divWithTransform, fr ameView->layoutView()); | 760 CHECK_EXACT_VISUAL_RECT(LayoutRect(1, 2, 800, 164), divWithTransform, fr ameView->layoutView()); |
| 753 } | 761 } |
| 754 | 762 |
| 755 LayoutObject* innerDivWithTransform = frameDocument.getElementById("transfor m")->layoutObject(); | 763 LayoutObject* innerDivWithTransform = frameDocument.getElementById("transfor m")->layoutObject(); |
| 756 const ObjectPaintProperties* innerDivWithTransformProperties = innerDivWithT ransform->objectPaintProperties(); | 764 const ObjectPaintProperties* innerDivWithTransformProperties = innerDivWithT ransform->objectPaintProperties(); |
| 757 auto* innerDivTransform = innerDivWithTransformProperties->transform(); | 765 auto* innerDivTransform = innerDivWithTransformProperties->transform(); |
| 758 EXPECT_EQ(TransformationMatrix().translate3d(4, 5, 6), innerDivTransform->ma trix()); | 766 EXPECT_EQ(TransformationMatrix().translate3d(4, 5, 6), innerDivTransform->ma trix()); |
| 759 CHECK_EXACT_VISUAL_RECT(LayoutRect(12, 14, 100, 145), innerDivWithTransform, frameView->layoutView()); | 767 CHECK_EXACT_VISUAL_RECT(LayoutRect(12, 14, 100, 145), innerDivWithTransform, frameView->layoutView()); |
| 760 | 768 |
| 761 // Ensure that the inner div's transform is correctly rooted in the root fra me's transform tree. | 769 // Ensure that the inner div's transform is correctly rooted in the root fra me's transform tree. |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 808 auto* iframeTransform = iframePreTranslation->parent(); | 816 auto* iframeTransform = iframePreTranslation->parent(); |
| 809 EXPECT_EQ(TransformationMatrix().translate3d(4, 5, 6), iframeTransform->matr ix()); | 817 EXPECT_EQ(TransformationMatrix().translate3d(4, 5, 6), iframeTransform->matr ix()); |
| 810 auto* iframePaintOffsetTranslation = iframeTransform->parent(); | 818 auto* iframePaintOffsetTranslation = iframeTransform->parent(); |
| 811 EXPECT_EQ(TransformationMatrix().translate3d(7, 7, 0), iframePaintOffsetTran slation->matrix()); | 819 EXPECT_EQ(TransformationMatrix().translate3d(7, 7, 0), iframePaintOffsetTran slation->matrix()); |
| 812 auto* divWithTransformTransform = iframePaintOffsetTranslation->parent(); | 820 auto* divWithTransformTransform = iframePaintOffsetTranslation->parent(); |
| 813 EXPECT_EQ(TransformationMatrix().translate3d(1, 2, 3), divWithTransformTrans form->matrix()); | 821 EXPECT_EQ(TransformationMatrix().translate3d(1, 2, 3), divWithTransformTrans form->matrix()); |
| 814 | 822 |
| 815 LayoutObject* divWithTransform = document().getElementById("divWithTransform ")->layoutObject(); | 823 LayoutObject* divWithTransform = document().getElementById("divWithTransform ")->layoutObject(); |
| 816 EXPECT_EQ(divWithTransformTransform, divWithTransform->objectPaintProperties ()->transform()); | 824 EXPECT_EQ(divWithTransformTransform, divWithTransform->objectPaintProperties ()->transform()); |
| 817 // http://crbug.com/638415 | 825 // http://crbug.com/638415 |
| 818 if (!rootLayerScrolls()) { | 826 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { |
| 819 CHECK_EXACT_VISUAL_RECT(LayoutRect(1, 2, 800, 248), divWithTransform, fr ameView->layoutView()); | 827 CHECK_EXACT_VISUAL_RECT(LayoutRect(1, 2, 800, 248), divWithTransform, fr ameView->layoutView()); |
| 820 } | 828 } |
| 821 } | 829 } |
| 822 | 830 |
| 823 TEST_P(PaintPropertyTreeBuilderTest, TreeContextClipByNonStackingContext) | 831 TEST_P(PaintPropertyTreeBuilderTest, TreeContextClipByNonStackingContext) |
| 824 { | 832 { |
| 825 // This test verifies the tree builder correctly computes and records the pr operty tree context | 833 // This test verifies the tree builder correctly computes and records the pr operty tree context |
| 826 // for a (pseudo) stacking context that is scrolled by a containing block th at is not one of | 834 // for a (pseudo) stacking context that is scrolled by a containing block th at is not one of |
| 827 // the painting ancestors. | 835 // the painting ancestors. |
| 828 setBodyInnerHTML( | 836 setBodyInnerHTML( |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 861 ); | 869 ); |
| 862 | 870 |
| 863 LayoutObject& scroller = *document().getElementById("scroller")->layoutObjec t(); | 871 LayoutObject& scroller = *document().getElementById("scroller")->layoutObjec t(); |
| 864 const ObjectPaintProperties* scrollerProperties = scroller.objectPaintProper ties(); | 872 const ObjectPaintProperties* scrollerProperties = scroller.objectPaintProper ties(); |
| 865 LayoutObject& child = *document().getElementById("child")->layoutObject(); | 873 LayoutObject& child = *document().getElementById("child")->layoutObject(); |
| 866 const ObjectPaintProperties* childProperties = child.objectPaintProperties() ; | 874 const ObjectPaintProperties* childProperties = child.objectPaintProperties() ; |
| 867 | 875 |
| 868 EXPECT_EQ(frameContentClip(), childProperties->localBorderBoxProperties()->p ropertyTreeState.clip); | 876 EXPECT_EQ(frameContentClip(), childProperties->localBorderBoxProperties()->p ropertyTreeState.clip); |
| 869 EXPECT_EQ(frameScrollTranslation(), childProperties->localBorderBoxPropertie s()->propertyTreeState.transform); | 877 EXPECT_EQ(frameScrollTranslation(), childProperties->localBorderBoxPropertie s()->propertyTreeState.transform); |
| 870 EXPECT_EQ(scrollerProperties->effect(), childProperties->localBorderBoxPrope rties()->propertyTreeState.effect); | 878 EXPECT_EQ(scrollerProperties->effect(), childProperties->localBorderBoxPrope rties()->propertyTreeState.effect); |
| 871 if (!rootLayerScrolls()) { | 879 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { |
| 872 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 800, 10000), &scroller, documen t().view()->layoutView()); | 880 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 800, 10000), &scroller, documen t().view()->layoutView()); |
| 873 } | 881 } |
| 874 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 100, 200), &child, document().view( )->layoutView()); | 882 CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 100, 200), &child, document().view( )->layoutView()); |
| 875 } | 883 } |
| 876 | 884 |
| 877 TEST_P(PaintPropertyTreeBuilderTest, TableCellLayoutLocation) | 885 TEST_P(PaintPropertyTreeBuilderTest, TableCellLayoutLocation) |
| 878 { | 886 { |
| 879 // This test verifies that the border box space of a table cell is being cor rectly computed. | 887 // This test verifies that the border box space of a table cell is being cor rectly computed. |
| 880 // Table cells have weird location adjustment in our layout/paint implementa tion. | 888 // Table cells have weird location adjustment in our layout/paint implementa tion. |
| 881 setBodyInnerHTML( | 889 setBodyInnerHTML( |
| (...skipping 706 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1588 EXPECT_EQ(cProperties, c->layoutObject()->objectPaintProperties()); | 1596 EXPECT_EQ(cProperties, c->layoutObject()->objectPaintProperties()); |
| 1589 EXPECT_EQ(cTransformNode, cProperties->transform()); | 1597 EXPECT_EQ(cTransformNode, cProperties->transform()); |
| 1590 EXPECT_EQ(bTransformNode, cTransformNode->parent()); | 1598 EXPECT_EQ(bTransformNode, cTransformNode->parent()); |
| 1591 | 1599 |
| 1592 CHECK_EXACT_VISUAL_RECT(LayoutRect(33, 44, 50, 60), a->layoutObject(), frame View->layoutView()); | 1600 CHECK_EXACT_VISUAL_RECT(LayoutRect(33, 44, 50, 60), a->layoutObject(), frame View->layoutView()); |
| 1593 CHECK_EXACT_VISUAL_RECT(LayoutRect(37, 49, 50, 20), b->layoutObject(), frame View->layoutView()); | 1601 CHECK_EXACT_VISUAL_RECT(LayoutRect(37, 49, 50, 20), b->layoutObject(), frame View->layoutView()); |
| 1594 CHECK_EXACT_VISUAL_RECT(LayoutRect(114, 137, 10, 20), c->layoutObject(), fra meView->layoutView()); | 1602 CHECK_EXACT_VISUAL_RECT(LayoutRect(114, 137, 10, 20), c->layoutObject(), fra meView->layoutView()); |
| 1595 } | 1603 } |
| 1596 | 1604 |
| 1597 } // namespace blink | 1605 } // namespace blink |
| OLD | NEW |