Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(441)

Unified Diff: third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc

Issue 2700683002: [LayoutNG] Fix incorrectly positioned empty blocks inside of new BFC (Closed)
Patch Set: Fix comments and some crashes in FloatingObjects Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc
index c7a1baad2d18e62f2f405de4a7b95cb403ac0265..ce6ba4f414bfd67be91f3631856216e19fb44b94 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm_test.cc
@@ -2004,5 +2004,64 @@ TEST_F(NGBlockLayoutAlgorithmTest, DISABLED_TwoFloatsInTwoColumns) {
EXPECT_FALSE(iterator.NextChild());
}
+// Verifies that we position empty blocks and floats correctly inside of the
+// block that establishes new BFC.
+TEST_F(NGBlockLayoutAlgorithmTest, PositionEmptyBlocksInNewBfc) {
+ setBodyInnerHTML(R"HTML(
+ <style>
+ #container {
+ overflow: hidden;
+ }
+ #empty-block1 {
+ margin: 8px;
+ }
+ #left-float {
+ float: left;
+ background: red;
+ height: 20px;
+ width: 10px;
+ margin: 15px;
+ }
+ #empty-block2 {
+ margin-top: 50px;
+ }
+ </style>
+ <div id="container">
+ <div id="left-float"></div>
+ <div id="empty-block1"></div>
+ <div id="empty-block2"></div>
+ </div>
+ )HTML");
+ Element* body = document().getElementsByTagName("body")->item(0);
+ auto& floating_objects =
+ const_cast<FloatingObjects*>(
+ toLayoutBlockFlow(body->layoutObject())->floatingObjects())
+ ->mutableSet();
+ ASSERT_EQ(1UL, floating_objects.size());
+ auto floating_object = floating_objects.takeFirst();
+ // left-float's margin = 15.
+ EXPECT_THAT(LayoutUnit(15), floating_object->x());
+ EXPECT_THAT(LayoutUnit(15), floating_object->y());
+
+ RefPtr<const NGPhysicalBoxFragment> html_fragment;
+ std::tie(html_fragment, std::ignore) = RunBlockLayoutAlgorithmForElement(
+ document().getElementsByTagName("html")->item(0));
+ auto* body_fragment =
+ toNGPhysicalBoxFragment(html_fragment->Children()[0].get());
+ auto* container_fragment =
+ toNGPhysicalBoxFragment(body_fragment->Children()[0].get());
+ auto* empty_block1 =
+ toNGPhysicalBoxFragment(container_fragment->Children()[0].get());
+ // empty-block1's margin == 8
+ EXPECT_THAT(NGPhysicalOffset(LayoutUnit(8), LayoutUnit(8)),
+ empty_block1->Offset());
+
+ auto* empty_block2 =
+ toNGPhysicalBoxFragment(container_fragment->Children()[1].get());
+ // empty-block2's margin == 50
+ EXPECT_THAT(NGPhysicalOffset(LayoutUnit(0), LayoutUnit(50)),
+ empty_block2->Offset());
+}
+
} // namespace
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698