Commit 32717cbf authored by Ian Kilpatrick's avatar Ian Kilpatrick Committed by Commit Bot

[LayoutNG] Fix margins on html element.

Existing layout is bizarre. Margins for a child are calculated inside the
childs layout. This includes the auto margins calculation as far as we
can tell.

This just does the "simple" margin calculation (no auto etc) as auto margins
etc only occur within block layout, which we now control.

We may have to refine this to include more behaviour if we discover other
cases we don't cover.

Bug: 635619
Change-Id: I944ae3435074441f06e118c59f8d2ad317227b32
Reviewed-on: https://chromium-review.googlesource.com/580291
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: default avatarEmil A Eklund <eae@chromium.org>
Reviewed-by: default avatarChristian Biesinger <cbiesinger@chromium.org>
Cr-Commit-Position: refs/heads/master@{#488451}
parent 0bdb3d64
......@@ -290,10 +290,6 @@ crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/float/overhanging-tall-blo
### virtual/layout_ng Mac 1px glyph difference.
crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/basic/015.html [ Failure ]
### virtual/layout_ng/external/wpt/css/CSS2/abspos
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-001.xht [ Failure ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/abspos/abspos-containing-block-initial-009a.xht [ Failure ]
### virtual/layout_ng/external/wpt/css/CSS2/floats
crbug.com/719620 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-001a.xht [ Failure ]
crbug.com/719620 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-001b.xht [ Failure ]
......@@ -400,9 +396,7 @@ crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inline-repl
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inline-replaced-width-015.xht [ Failure ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/root-box-001.xht [ Failure ]
# Margin collapsing quirks
# https://html.spec.whatwg.org/multipage/rendering.html#margin-collapsing-quirks
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/blocks-025.xht [ Failure ]
# Missing refs, these are also skipped for existing layout.
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inline-block-002.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inline-block-003.xht [ Skip ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/normal-flow/inline-block-004.xht [ Skip ]
......@@ -453,8 +447,6 @@ crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/absolute-re
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-007.xht [ Failure ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-011.xht [ Failure ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-012.xht [ Failure ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-019.xht [ Failure ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-020.xht [ Failure ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-containing-block-001.xht [ Failure ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-containing-block-002.xht [ Failure ]
crbug.com/635619 virtual/layout_ng/external/wpt/css/CSS2/positioning/abspos-containing-block-007.xht [ Failure ]
......
......@@ -8,6 +8,7 @@
#include "core/layout/ng/ng_constraint_space.h"
#include "core/layout/ng/ng_fragment.h"
#include "core/layout/ng/ng_layout_result.h"
#include "core/layout/ng/ng_length_utils.h"
namespace blink {
......@@ -41,11 +42,30 @@ void LayoutNGBlockFlow::UpdateBlockLayout(bool relayout_children) {
SetLogicalTop(computed_values.position_);
}
// We need to update our margins as these are calculated once and stored in
// LayoutBox::margin_box_outsets_. Typically this happens within
// UpdateLogicalWidth and UpdateLogicalHeight.
//
// This primarily fixes cases where we are embedded inside another layout,
// for example LayoutView, LayoutFlexibleBox, etc.
UpdateMargins(*constraint_space);
for (NGOutOfFlowPositionedDescendant descendant :
result->OutOfFlowPositionedDescendants())
descendant.node.UseOldOutOfFlowPositioning();
}
void LayoutNGBlockFlow::UpdateMargins(
const NGConstraintSpace& constraint_space) {
NGBoxStrut margins =
ComputeMargins(constraint_space, StyleRef(),
constraint_space.WritingMode(), StyleRef().Direction());
SetMarginBefore(margins.block_start);
SetMarginAfter(margins.block_end);
SetMarginStart(margins.inline_start);
SetMarginEnd(margins.inline_end);
}
NGInlineNodeData& LayoutNGBlockFlow::GetNGInlineNodeData() const {
DCHECK(ng_inline_node_data_);
return *ng_inline_node_data_.get();
......
......@@ -32,6 +32,8 @@ class CORE_EXPORT LayoutNGBlockFlow final : public LayoutBlockFlow {
private:
bool IsOfType(LayoutObjectType) const override;
void UpdateMargins(const NGConstraintSpace&);
std::unique_ptr<NGInlineNodeData> ng_inline_node_data_;
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment