Commit a340aadc authored by Koji Ishii's avatar Koji Ishii Committed by Commit Bot

[FragmentItem] Two fixes for outline

This patch fixes:
1. |LayoutNGBlockFlowMixin<Base>::AddOutlineRects| to call
   |NGPhysicalContainerFragment::AddSelfOutlineRects| if it
   has |NGFragmentItems|. This is needed to include inline
   continuation when FragmentItem is enabled.
2. |NGPhysicalContainerFragment::AddOutlineRectsForNormalChildren|
   to include child boxes of line boxes.

Fixes two failures.

Bug: 982194
Change-Id: I9d4f73caa2f7f7e063a8db667aeb88f1dce7ac62
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1967096Reviewed-by: default avatarAleks Totic <atotic@chromium.org>
Reviewed-by: default avatarIan Kilpatrick <ikilpatrick@chromium.org>
Commit-Queue: Koji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#747757}
parent 85fc2bb4
......@@ -110,9 +110,18 @@ void LayoutNGBlockFlowMixin<Base>::AddOutlineRects(
To<NGPhysicalBoxFragment>(PaintFragment()->PhysicalFragment())
.AddSelfOutlineRects(additional_offset, include_block_overflows,
&rects);
} else {
Base::AddOutlineRects(rects, additional_offset, include_block_overflows);
return;
}
if (const NGPhysicalBoxFragment* fragment = CurrentFragment()) {
if (fragment->HasItems()) {
fragment->AddSelfOutlineRects(additional_offset, include_block_overflows,
&rects);
return;
}
}
Base::AddOutlineRects(rects, additional_offset, include_block_overflows);
}
// Retrieve NGBaseline from the current fragment.
......
......@@ -90,6 +90,40 @@ void NGPhysicalContainerFragment::AddOutlineRectsForNormalChildren(
const PhysicalOffset& additional_offset,
NGOutlineType outline_type,
const LayoutBoxModelObject* containing_block) const {
if (const auto* box = DynamicTo<NGPhysicalBoxFragment>(this)) {
if (const NGFragmentItems* items = box->Items()) {
for (NGInlineCursor cursor(*items); cursor; cursor.MoveToNext()) {
DCHECK(cursor.Current().Item());
const NGFragmentItem& item = *cursor.Current().Item();
if (item.Type() == NGFragmentItem::kLine) {
AddOutlineRectsForDescendant(
{item.LineBoxFragment(), item.OffsetInContainerBlock()},
outline_rects, additional_offset, outline_type, containing_block);
continue;
}
if (item.Type() == NGFragmentItem::kBox) {
if (const NGPhysicalBoxFragment* child_box = item.BoxFragment()) {
DCHECK(!child_box->IsOutOfFlowPositioned());
AddOutlineRectsForDescendant(
{child_box, item.OffsetInContainerBlock()}, outline_rects,
additional_offset, outline_type, containing_block);
}
continue;
}
DCHECK(item.IsText());
}
// Don't add |Children()|. If |this| has |NGFragmentItems|, children are
// either line box, which we already handled in items, or OOF, which we
// should ignore.
DCHECK(std::all_of(PostLayoutChildren().begin(),
PostLayoutChildren().end(), [](const NGLink& child) {
return child->IsLineBox() ||
child->IsOutOfFlowPositioned();
}));
return;
}
}
for (const auto& child : PostLayoutChildren()) {
// Outlines of out-of-flow positioned descendants are handled in
// NGPhysicalBoxFragment::AddSelfOutlineRects().
......
......@@ -279,7 +279,6 @@ crbug.com/718155 virtual/android/fullscreen/full-screen-iframe-not-allowed.html
crbug.com/982194 virtual/audio-service/http/tests/media/video-frame-size-change.html [ Failure Pass ]
crbug.com/874695 crbug.com/936165 virtual/audio-service/media/autoplay-muted.html [ Crash Pass Timeout ]
crbug.com/982194 compositing/gestures/gesture-tapHighlight-simple-nested.html [ Failure ]
crbug.com/982194 compositing/gestures/gesture-tapHighlight-with-squashing.html [ Failure ]
crbug.com/982194 compositing/overflow/composited-scroll-with-fractional-translation.html [ Pass ]
crbug.com/982194 css2.1/t100801-c544-valgn-00-a-ag.html [ Failure ]
crbug.com/982194 css2.1/t100801-c544-valgn-03-d-agi.html [ Failure ]
......@@ -985,7 +984,6 @@ crbug.com/982194 external/wpt/webvtt/rendering/cues-with-video/processing-model/
crbug.com/982194 fast/backgrounds/quirks-mode-line-box-backgrounds.html [ Failure ]
crbug.com/982194 fast/borders/border-image-outset-split-inline-vertical-lr.html [ Failure ]
crbug.com/982194 fast/borders/inline-mask-overlay-image-outset-vertical-rl.html [ Failure ]
crbug.com/982194 fast/css/outline-auto-empty-rects.html [ Failure ]
crbug.com/982194 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-under.html [ Failure ]
crbug.com/982194 fast/dom/SelectorAPI/resig-SelectorsAPI-test.xhtml [ Pass ]
crbug.com/982194 fast/dom/rtl-scroll-to-leftmost-and-resize.html [ Pass Timeout ]
......
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