Chromium Code Reviews| Index: third_party/WebKit/Source/core/dom/ElementTest.cpp |
| diff --git a/third_party/WebKit/Source/core/dom/ElementTest.cpp b/third_party/WebKit/Source/core/dom/ElementTest.cpp |
| index 30064c67ba3ee38b3cfacc842460acaf28119ddd..d1c2f6aac314ecc356d9d84de3ac6d082fe462c4 100644 |
| --- a/third_party/WebKit/Source/core/dom/ElementTest.cpp |
| +++ b/third_party/WebKit/Source/core/dom/ElementTest.cpp |
| @@ -23,4 +23,72 @@ TEST(ElementTest, SupportsFocus) { |
| << "<html> with designMode=on should be focusable."; |
| } |
| +// Verifies that calling getBoundingClientRect cleans compositor inputs. |
| +// Cleaning the compositor inputs is required so that position:sticky elements |
| +// and their descendants have the correct location. |
| +TEST(ElementTest, GetBoundingClientRectUpdatesCompositorInputs) { |
| + std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create(); |
| + Document& document = pageHolder->document(); |
| + |
| + document.view()->updateAllLifecyclePhases(); |
| + EXPECT_EQ(DocumentLifecycle::PaintClean, document.lifecycle().state()); |
| + |
| + document.body()->setInnerHTML("<div id='test'></div>"); |
| + EXPECT_EQ(DocumentLifecycle::VisualUpdatePending, |
| + document.lifecycle().state()); |
| + |
| + document.body()->getBoundingClientRect(); |
| + EXPECT_EQ(DocumentLifecycle::CompositingClean, document.lifecycle().state()); |
| +} |
| + |
| +// Verifies that calling scrollIntoView* cleans compositor inputs. Cleaning the |
| +// compositor inputs is required so that position:sticky elements and their |
| +// descendants have the correct location. |
| +TEST(ElementTest, ScrollIntoViewUpdatesCompositorInputs) { |
| + std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create(); |
| + Document& document = pageHolder->document(); |
| + |
| + document.view()->updateAllLifecyclePhases(); |
| + EXPECT_EQ(DocumentLifecycle::PaintClean, document.lifecycle().state()); |
| + |
| + document.body()->setInnerHTML("<div id='test'></div>"); |
| + EXPECT_EQ(DocumentLifecycle::VisualUpdatePending, |
| + document.lifecycle().state()); |
| + |
| + document.body()->scrollIntoView(); |
| + EXPECT_EQ(DocumentLifecycle::CompositingClean, document.lifecycle().state()); |
| + |
| + document.body()->setInnerHTML("<div id='test2'></div>"); |
| + EXPECT_EQ(DocumentLifecycle::VisualUpdatePending, |
| + document.lifecycle().state()); |
| + |
| + document.body()->scrollIntoViewIfNeeded(); |
| + EXPECT_EQ(DocumentLifecycle::CompositingClean, document.lifecycle().state()); |
| +} |
| + |
| +// Verifies that calling offsetTop/offsetLeft cleans compositor inputs. |
| +// Cleaning the compositor inputs is required so that position:sticky elements |
| +// and their descendants have the correct location. |
| +TEST(ElementTest, OffsetTopAndLeftUpdateCompositorInputs) { |
| + std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create(); |
| + Document& document = pageHolder->document(); |
| + |
| + document.view()->updateAllLifecyclePhases(); |
| + EXPECT_EQ(DocumentLifecycle::PaintClean, document.lifecycle().state()); |
| + |
| + document.body()->setInnerHTML("<div id='test'></div>"); |
| + EXPECT_EQ(DocumentLifecycle::VisualUpdatePending, |
| + document.lifecycle().state()); |
| + |
| + document.body()->offsetTop(); |
| + EXPECT_EQ(DocumentLifecycle::CompositingClean, document.lifecycle().state()); |
| + |
| + document.body()->setInnerHTML("<div id='test2'></div>"); |
| + EXPECT_EQ(DocumentLifecycle::VisualUpdatePending, |
| + document.lifecycle().state()); |
| + |
| + document.body()->offsetLeft(); |
|
flackr
2017/01/23 16:43:50
It might be worth unit testing that the correct of
smcgruer
2017/01/24 15:26:30
Tried this, however for reasons I don't yet unders
flackr
2017/01/24 17:00:21
I think I know what's happening. This normally get
flackr
2017/01/24 18:20:54
I guess remove the assertion that compositing inpu
smcgruer
2017/01/24 20:09:42
Added a partially-complete test to make sure that
flackr
2017/01/24 20:22:28
Acknowledged. That's exactly what I was suggesting
|
| + EXPECT_EQ(DocumentLifecycle::CompositingClean, document.lifecycle().state()); |
| +} |
| + |
| } // namespace blink |