WebKit Bugzilla
Attachment 348492 Details for
Bug 189150
: [LFC][Floating] Block formatting context roots avoid floats.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
Patch.txt (text/plain), 20.85 KB, created by
zalan
on 2018-08-30 01:51:16 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
zalan
Created:
2018-08-30 01:51:16 PDT
Size:
20.85 KB
patch
obsolete
>diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 6ff035f50b3..b3abb033a35 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,19 @@ >+2018-08-30 Zalan Bujtas <zalan@apple.com> >+ >+ [LFC][Floating] Formatting context roots avoid floats. >+ https://bugs.webkit.org/show_bug.cgi?id=189150 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * fast/block/block-only/float-avoider-multiple-roots-expected.txt: Added. >+ * fast/block/block-only/float-avoider-multiple-roots.html: Added. >+ * fast/block/block-only/float-avoider-simple-left-expected.txt: Added. >+ * fast/block/block-only/float-avoider-simple-left.html: Added. >+ * fast/block/block-only/float-avoider-simple-right-expected.txt: Added. >+ * fast/block/block-only/float-avoider-simple-right.html: Added. >+ * fast/block/block-only/float-avoider-with-margins-expected.txt: Added. >+ * fast/block/block-only/float-avoider-with-margins.html: Added. >+ > 2018-08-28 Ryosuke Niwa <rniwa@webkit.org> > > Changes to slot children should trigger slotchange >diff --git a/LayoutTests/fast/block/block-only/float-avoider-multiple-roots-expected.txt b/LayoutTests/fast/block/block-only/float-avoider-multiple-roots-expected.txt >new file mode 100644 >index 00000000000..8ad9c5eeed9 >--- /dev/null >+++ b/LayoutTests/fast/block/block-only/float-avoider-multiple-roots-expected.txt >@@ -0,0 +1,24 @@ >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x220 >+ RenderBlock {HTML} at (0,0) size 800x220 >+ RenderBody {BODY} at (8,8) size 784x204 >+ RenderBlock {DIV} at (0,0) size 202x102 [border: (1px solid #FF0000)] >+ RenderBlock (floating) {DIV} at (1,1) size 12x52 [border: (1px solid #0000FF)] >+ RenderBlock (floating) {DIV} at (13,1) size 12x32 [border: (1px solid #0000FF)] >+ RenderBlock (floating) {DIV} at (1,57) size 12x32 [border: (1px solid #0000FF)] >+ RenderBlock {DIV} at (0,102) size 202x102 [border: (1px solid #FF0000)] >+ RenderBlock (floating) {DIV} at (1,1) size 12x52 [border: (1px solid #0000FF)] >+ RenderBlock (floating) {DIV} at (13,1) size 12x32 [border: (1px solid #0000FF)] >+layer at (21,41) size 182x12 clip at (22,42) size 180x10 >+ RenderBlock {DIV} at (13,33) size 182x12 [border: (1px solid #008000)] >+layer at (21,53) size 182x12 clip at (22,54) size 180x10 >+ RenderBlock {DIV} at (13,45) size 182x12 [border: (1px solid #008000)] >+layer at (21,65) size 182x12 clip at (22,66) size 180x10 >+ RenderBlock {DIV} at (13,57) size 182x12 [border: (1px solid #008000)] >+layer at (27,143) size 182x12 clip at (28,144) size 180x10 >+ RenderBlock {DIV} at (19,33) size 182x12 [border: (1px solid #008000)] >+layer at (27,155) size 182x12 clip at (28,156) size 180x10 >+ RenderBlock {DIV} at (19,45) size 182x12 [border: (1px solid #008000)] >+layer at (27,167) size 182x12 clip at (28,168) size 180x10 >+ RenderBlock {DIV} at (19,57) size 182x12 [border: (1px solid #008000)] >diff --git a/LayoutTests/fast/block/block-only/float-avoider-multiple-roots.html b/LayoutTests/fast/block/block-only/float-avoider-multiple-roots.html >new file mode 100644 >index 00000000000..5bc3ae3e2b0 >--- /dev/null >+++ b/LayoutTests/fast/block/block-only/float-avoider-multiple-roots.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<style> >+</style> >+</head> >+<body> >+<div style="border: 1px solid red; height: 100px; width: 200px;"> >+ <div style="height: 50px; width: 10px; border: 1px solid blue; float: left;"></div> >+ <div style="height: 30px; width: 10px; border: 1px solid blue; float: left;"></div> >+ <div style="overflow: hidden; height: 10px; width: 180px; border: 1px solid green;"></div> >+ <div style="overflow: hidden; height: 10px; width: 180px; border: 1px solid green;"></div> >+ <div style="height: 30px; width: 10px; border: 1px solid blue; float: left;"></div> >+ <div style="overflow: hidden; height: 10px; width: 180px; border: 1px solid green;"></div> >+</div> >+ >+<div dir=rtl style="border: 1px solid red; height: 100px; width: 200px;"> >+ <div style="height: 50px; width: 10px; border: 1px solid blue; float: left;"></div> >+ <div style="height: 30px; width: 10px; border: 1px solid blue; float: left;"></div> >+ <div style="overflow: hidden; height: 10px; width: 180px; border: 1px solid green;"></div> >+ <div style="overflow: hidden; height: 10px; width: 180px; border: 1px solid green;"></div> >+ <div style="overflow: hidden; height: 10px; width: 180px; border: 1px solid green;"></div> >+</div> >+</body> >+</html> >diff --git a/LayoutTests/fast/block/block-only/float-avoider-simple-left-expected.txt b/LayoutTests/fast/block/block-only/float-avoider-simple-left-expected.txt >new file mode 100644 >index 00000000000..d3453a94ebe >--- /dev/null >+++ b/LayoutTests/fast/block/block-only/float-avoider-simple-left-expected.txt >@@ -0,0 +1,10 @@ >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x518 >+ RenderBlock {HTML} at (0,0) size 800x518 >+ RenderBody {BODY} at (8,8) size 784x502 >+ RenderBlock {DIV} at (0,0) size 202x502 [border: (1px solid #FF0000)] >+ RenderBlock (floating) {DIV} at (1,1) size 12x202 [border: (1px solid #0000FF)] >+ RenderBlock (floating) {DIV} at (13,1) size 12x172 [border: (1px solid #0000FF)] >+layer at (21,181) size 182x102 clip at (22,182) size 180x100 >+ RenderBlock {DIV} at (13,173) size 182x102 [border: (1px solid #008000)] >diff --git a/LayoutTests/fast/block/block-only/float-avoider-simple-left.html b/LayoutTests/fast/block/block-only/float-avoider-simple-left.html >new file mode 100644 >index 00000000000..e49608de326 >--- /dev/null >+++ b/LayoutTests/fast/block/block-only/float-avoider-simple-left.html >@@ -0,0 +1,14 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<style> >+</style> >+</head> >+<body> >+<div style="border: 1px solid red; height: 500px; width: 200px;"> >+<div style="height: 200px; width: 10px; border: 1px solid blue; float: left;"></div> >+<div style="height: 170px; width: 10px; border: 1px solid blue; float: left;"></div> >+<div style="overflow: hidden; height: 100px; width: 180px; border: 1px solid green;"></div> >+</div> >+</body> >+</html> >diff --git a/LayoutTests/fast/block/block-only/float-avoider-simple-right-expected.txt b/LayoutTests/fast/block/block-only/float-avoider-simple-right-expected.txt >new file mode 100644 >index 00000000000..2336686a296 >--- /dev/null >+++ b/LayoutTests/fast/block/block-only/float-avoider-simple-right-expected.txt >@@ -0,0 +1,10 @@ >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x518 >+ RenderBlock {HTML} at (0,0) size 800x518 >+ RenderBody {BODY} at (8,8) size 784x502 >+ RenderBlock {DIV} at (0,0) size 202x502 [border: (1px solid #FF0000)] >+ RenderBlock (floating) {DIV} at (1,1) size 12x202 [border: (1px solid #0000FF)] >+ RenderBlock (floating) {DIV} at (13,1) size 12x172 [border: (1px solid #0000FF)] >+layer at (27,181) size 182x102 clip at (28,182) size 180x100 >+ RenderBlock {DIV} at (19,173) size 182x102 [border: (1px solid #008000)] >diff --git a/LayoutTests/fast/block/block-only/float-avoider-simple-right.html b/LayoutTests/fast/block/block-only/float-avoider-simple-right.html >new file mode 100644 >index 00000000000..1d6b5449fb5 >--- /dev/null >+++ b/LayoutTests/fast/block/block-only/float-avoider-simple-right.html >@@ -0,0 +1,14 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<style> >+</style> >+</head> >+<body> >+<div dir=rtl style="border: 1px solid red; height: 500px; width: 200px;"> >+<div style="height: 200px; width: 10px; border: 1px solid blue; float: left;"></div> >+<div style="height: 170px; width: 10px; border: 1px solid blue; float: left;"></div> >+<div style="overflow: hidden; height: 100px; width: 180px; border: 1px solid green;"></div> >+</div> >+</body> >+</html> >diff --git a/LayoutTests/fast/block/block-only/float-avoider-with-margins-expected.txt b/LayoutTests/fast/block/block-only/float-avoider-with-margins-expected.txt >new file mode 100644 >index 00000000000..e8494af9e5e >--- /dev/null >+++ b/LayoutTests/fast/block/block-only/float-avoider-with-margins-expected.txt >@@ -0,0 +1,24 @@ >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x243 >+ RenderBlock {HTML} at (0,0) size 800x243 >+ RenderBody {BODY} at (8,8) size 784x204 >+ RenderBlock {DIV} at (0,0) size 302x102 [border: (1px solid #FF0000)] >+ RenderBlock (floating) {DIV} at (1,1) size 12x52 [border: (1px solid #0000FF)] >+ RenderBlock (floating) {DIV} at (13,1) size 12x32 [border: (1px solid #0000FF)] >+ RenderBlock (floating) {DIV} at (25,25) size 12x32 [border: (1px solid #0000FF)] >+ RenderBlock {DIV} at (0,102) size 302x102 [border: (1px solid #FF0000)] >+ RenderBlock (floating) {DIV} at (1,1) size 12x52 [border: (1px solid #0000FF)] >+ RenderBlock (floating) {DIV} at (289,1) size 12x132 [border: (1px solid #0000FF)] >+layer at (33,9) size 182x12 clip at (34,10) size 180x10 >+ RenderBlock {DIV} at (25,1) size 182x12 [border: (1px solid #008000)] >+layer at (59,21) size 182x12 clip at (60,22) size 180x10 >+ RenderBlock {DIV} at (51,13) size 182x12 [border: (1px solid #008000)] >+layer at (109,33) size 182x12 clip at (110,34) size 180x10 >+ RenderBlock {DIV} at (101,25) size 182x12 [border: (1px solid #008000)] >+layer at (77,111) size 182x12 clip at (78,112) size 180x10 >+ RenderBlock {DIV} at (69,1) size 182x12 [border: (1px solid #008000)] >+layer at (115,123) size 182x12 clip at (116,124) size 180x10 >+ RenderBlock {DIV} at (107,13) size 182x12 [border: (1px solid #008000)] >+layer at (-233,243) size 292x12 backgroundClip at (0,243) size 59x12 clip at (0,244) size 58x10 >+ RenderBlock {DIV} at (-241,133) size 292x12 [border: (1px solid #008000)] >diff --git a/LayoutTests/fast/block/block-only/float-avoider-with-margins.html b/LayoutTests/fast/block/block-only/float-avoider-with-margins.html >new file mode 100644 >index 00000000000..8f3de807596 >--- /dev/null >+++ b/LayoutTests/fast/block/block-only/float-avoider-with-margins.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<style> >+</style> >+</head> >+<body> >+<div style="border: 1px solid red; height: 100px; width: 300px;"> >+ <div style="height: 50px; width: 10px; border: 1px solid blue; float: left;"></div> >+ <div style="height: 30px; width: 10px; border: 1px solid blue; float: left;"></div> >+ <div style="overflow: hidden; height: 10px; width: 180px; border: 1px solid green;"></div> >+ <div style="overflow: hidden; height: 10px; width: 180px; border: 1px solid green; margin-left: 50px"></div> >+ <div style="height: 30px; width: 10px; border: 1px solid blue; float: left;"></div> >+ <div style="overflow: hidden; height: 10px; width: 180px; border: 1px solid green; margin-left: 100px"></div> >+</div> >+ >+<div dir=rtl style="border: 1px solid red; height: 100px; width: 300px;"> >+ <div style="height: 50px; width: 10px; border: 1px solid blue; float: left;"></div> >+ <div style="height: 130px; width: 10px; border: 1px solid blue; float: right;"></div> >+ <div style="overflow: hidden; height: 10px; width: 180px; border: 1px solid green; margin-right: 50px"></div> >+ <div style="overflow: hidden; height: 10px; width: 180px; border: 1px solid green; margin-right: 5px"></div> >+ <div style="overflow: hidden; height: 10px; width: 290px; border: 1px solid green; margin-right: 250px"></div> >+</div> >+</body> >+</html> >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 55f699f1d04..25d8c28d00d 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,32 @@ >+2018-08-30 Zalan Bujtas <zalan@apple.com> >+ >+ [LFC][Floating] Block formatting context roots avoid floats. >+ https://bugs.webkit.org/show_bug.cgi?id=189150 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ This patch implements the float avoiding behaviour for block formatting context roots. >+ >+ When a box establishes a block formatting context, floats from outside of the context can't interfere with content inside. In order >+ to achive this, such formatting root boxes need to be positioned so that they don't overlap with floats (floats that share the same >+ context with the formatting root). In ltr block direction, roots start with avoiding floats on the left, while in rtl on the right. >+ >+ Tests: fast/block/block-only/float-avoider-multiple-roots.html >+ fast/block/block-only/float-avoider-simple-left.html >+ fast/block/block-only/float-avoider-simple-right.html >+ fast/block/block-only/float-avoider-with-margins.html >+ >+ * layout/blockformatting/BlockFormattingContext.cpp: >+ (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const): >+ (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTopForAncestors const): >+ (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats const): >+ * layout/blockformatting/BlockFormattingContext.h: >+ * layout/floats/FloatAvoider.cpp: >+ (WebCore::Layout::FloatAvoider::FloatAvoider): >+ * layout/floats/FloatingContext.cpp: >+ (WebCore::Layout::FloatingContext::positionForFloatAvoiding const): >+ * layout/floats/FloatingContext.h: >+ > 2018-08-29 Zalan Bujtas <zalan@apple.com> > > [LFC][Floating] Move containing block constraint logic from FloatAvoider to FloatingContext >diff --git a/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp b/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp >index 27a1b4c2c4f..1118421a3d8 100644 >--- a/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp >+++ b/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp >@@ -145,8 +145,15 @@ void BlockFormattingContext::layoutFormattingContextRoot(LayoutContext& layoutCo > // Come back and finalize the root's geometry. > LOG_WITH_STREAM(FormattingContextLayout, stream << "[Compute] -> [Height][Margin] -> for layoutBox(" << &layoutBox << ")"); > computeHeightAndMargin(layoutContext, layoutBox, displayBox); >+ >+ // Float related final positioning. > if (layoutBox.isFloatingPositioned()) > computeFloatingPosition(layoutContext, floatingContext, layoutBox, displayBox); >+ else if (layoutBox.hasFloatClear()) >+ computeVerticalPositionForFloatClear(layoutContext, floatingContext, layoutBox, displayBox); >+ else >+ computePositionToAvoidFloats(layoutContext, floatingContext, layoutBox, displayBox); >+ > // Now that we computed the root's height, we can go back and layout the out-of-flow descedants (if any). > formattingContext->layoutOutOfFlowDescendants(layoutContext, layoutBox); > } >@@ -165,8 +172,8 @@ void BlockFormattingContext::computeEstimatedMarginTop(LayoutContext& layoutCont > > void BlockFormattingContext::computeEstimatedMarginTopForAncestors(LayoutContext& layoutContext, const Box& layoutBox) const > { >- // We only need to estimate margin top for float related layout. >- ASSERT(layoutBox.isFloatingPositioned() || layoutBox.hasFloatClear()); >+ // We only need to estimate margin top for float related layout (formatting context roots avoid floats). >+ ASSERT(layoutBox.isFloatingPositioned() || layoutBox.hasFloatClear() || layoutBox.establishesBlockFormattingContext()); > > // In order to figure out whether a box should avoid a float, we need to know the final positions of both (ignore relative positioning for now). > // In block formatting context the final position for a normal flow box includes >@@ -204,6 +211,21 @@ void BlockFormattingContext::computeFloatingPosition(LayoutContext& layoutContex > floatingContext.floatingState().append(layoutBox); > } > >+void BlockFormattingContext::computePositionToAvoidFloats(LayoutContext& layoutContext, FloatingContext& floatingContext, const Box& layoutBox, Display::Box& displayBox) const >+{ >+ // Formatting context roots avoid floats. >+ ASSERT(layoutBox.establishesBlockFormattingContext()); >+ ASSERT(!layoutBox.isFloatingPositioned()); >+ ASSERT(!layoutBox.hasFloatClear()); >+ >+ if (floatingContext.floatingState().isEmpty()) >+ return; >+ >+ computeEstimatedMarginTopForAncestors(layoutContext, layoutBox); >+ if (auto adjustedPosition = floatingContext.positionForFloatAvoiding(layoutBox)) >+ displayBox.setTopLeft(*adjustedPosition); >+} >+ > void BlockFormattingContext::computeVerticalPositionForFloatClear(LayoutContext& layoutContext, const FloatingContext& floatingContext, const Box& layoutBox, Display::Box& displayBox) const > { > ASSERT(layoutBox.hasFloatClear()); >diff --git a/Source/WebCore/layout/blockformatting/BlockFormattingContext.h b/Source/WebCore/layout/blockformatting/BlockFormattingContext.h >index e8687a3a44d..7d601a153eb 100644 >--- a/Source/WebCore/layout/blockformatting/BlockFormattingContext.h >+++ b/Source/WebCore/layout/blockformatting/BlockFormattingContext.h >@@ -57,6 +57,7 @@ private: > > void computeStaticPosition(LayoutContext&, const Box&, Display::Box&) const override; > void computeFloatingPosition(LayoutContext&, FloatingContext&, const Box&, Display::Box&) const; >+ void computePositionToAvoidFloats(LayoutContext&, FloatingContext&, const Box&, Display::Box&) const; > void computeVerticalPositionForFloatClear(LayoutContext&, const FloatingContext&, const Box&, Display::Box&) const; > void computeInFlowPositionedPosition(LayoutContext&, const Box&, Display::Box&) const override; > void computeInFlowWidthAndMargin(LayoutContext&, const Box&, Display::Box&) const; >diff --git a/Source/WebCore/layout/floats/FloatAvoider.cpp b/Source/WebCore/layout/floats/FloatAvoider.cpp >index e965df3a1f2..f07f40bc1d1 100644 >--- a/Source/WebCore/layout/floats/FloatAvoider.cpp >+++ b/Source/WebCore/layout/floats/FloatAvoider.cpp >@@ -45,6 +45,7 @@ FloatAvoider::FloatAvoider(const Box& layoutBox, const FloatingState& floatingSt > , m_containingBlockAbsoluteDisplayBox(FormattingContext::mapBoxToAncestor(layoutContext, *layoutBox.containingBlock(), downcast<Container>(floatingState.root()))) > , m_initialVerticalPosition(m_absoluteDisplayBox.top()) > { >+ ASSERT(m_layoutBox->establishesBlockFormattingContext()); > } > > void FloatAvoider::setHorizontalConstraints(HorizontalConstraints horizontalConstraints) >diff --git a/Source/WebCore/layout/floats/FloatingContext.cpp b/Source/WebCore/layout/floats/FloatingContext.cpp >index 24b55325fb6..05d444345c1 100644 >--- a/Source/WebCore/layout/floats/FloatingContext.cpp >+++ b/Source/WebCore/layout/floats/FloatingContext.cpp >@@ -143,6 +143,20 @@ PointInContainingBlock FloatingContext::positionForFloat(const Box& layoutBox) c > return floatBox.rectInContainingBlock().topLeft(); > } > >+std::optional<PointInContainingBlock> FloatingContext::positionForFloatAvoiding(const Box& layoutBox) const >+{ >+ ASSERT(layoutBox.establishesBlockFormattingContext()); >+ ASSERT(!layoutBox.isFloatingPositioned()); >+ ASSERT(!layoutBox.hasFloatClear()); >+ >+ if (m_floatingState.isEmpty()) >+ return { }; >+ >+ FloatAvoider floatAvoider = { layoutBox, m_floatingState, layoutContext() }; >+ floatingPosition(floatAvoider); >+ return { floatAvoider.rectInContainingBlock().topLeft() }; >+} >+ > std::optional<PositionInContainingBlock> FloatingContext::verticalPositionWithClearance(const Box& layoutBox) const > { > ASSERT(layoutBox.hasFloatClear()); >diff --git a/Source/WebCore/layout/floats/FloatingContext.h b/Source/WebCore/layout/floats/FloatingContext.h >index d28df594eae..d6e38ecf575 100644 >--- a/Source/WebCore/layout/floats/FloatingContext.h >+++ b/Source/WebCore/layout/floats/FloatingContext.h >@@ -51,6 +51,7 @@ public: > FloatingState& floatingState() const { return m_floatingState; } > > PointInContainingBlock positionForFloat(const Box&) const; >+ std::optional<PointInContainingBlock> positionForFloatAvoiding(const Box&) const; > std::optional<PositionInContainingBlock> verticalPositionWithClearance(const Box&) const; > > private: >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index f2e862370a4..ae7da281df1 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,12 @@ >+2018-08-30 Zalan Bujtas <zalan@apple.com> >+ >+ [LFC][Floating] Formatting context roots avoid floats. >+ https://bugs.webkit.org/show_bug.cgi?id=189150 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * LayoutReloaded/misc/LFC-passing-tests.txt: >+ > 2018-08-28 Daniel Bates <dabates@apple.com> > > lldb-webkit: KeyError thrown for OptionSet >diff --git a/Tools/LayoutReloaded/misc/LFC-passing-tests.txt b/Tools/LayoutReloaded/misc/LFC-passing-tests.txt >index 5d294a0c93b..506cf8a6dac 100644 >--- a/Tools/LayoutReloaded/misc/LFC-passing-tests.txt >+++ b/Tools/LayoutReloaded/misc/LFC-passing-tests.txt >@@ -50,3 +50,7 @@ fast/block/block-only/floating-and-next-previous-inflow-with-margin.html > fast/block/block-only/floating-left-and-right-with-clearance.html > fast/block/block-only/float-and-siblings-with-margins.html > fast/block/block-only/margin-collapse-with-clearance.html >+fast/block/block-only/float-avoider-simple-left.html >+fast/block/block-only/float-avoider-simple-right.html >+fast/block/block-only/float-avoider-multiple-roots.html >+fast/block/block-only/float-avoider-with-margins.html
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
koivisto
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 189150
:
348491
| 348492