Commit 4567d59b authored by cbiesinger's avatar cbiesinger Committed by Commit bot

[css-flexbox] Fix size comparison when scrollbars are present

BUG=646288

Review-Url: https://codereview.chromium.org/2342663002
Cr-Commit-Position: refs/heads/master@{#418846}
parent 3b022272
<!DOCTYPE html>
<style>
body { width: 800px; }
* { min-width: 0; min-height: 0; }
#list-wrapper {
display: flex;
flex-direction: column;
}
#player-list-wrapper {
flex-grow: 1;
overflow: auto;
}
</style>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../../resources/check-layout-th.js"></script>
<p>Tests that there's no vertical scrollbar for this content</p>
<body onload="checkLayout('#list-wrapper')">
<div id="list-wrapper" data-expected-width="800">
<div id="player-list-wrapper" data-expected-width="800">
<div data-expected-width="800">http://www.ispeech.org/p/generic/getaudio?text=http%3A%2F%2Fwww.ispeech.org%2Ftext.to.speech%3Flink%3Dhttp%253A%252F%252Fwww.ispeech.org%252Ftext.to.speech%253Fvoice%253Dusenglishfemale%2526action%253Dconvert%2526speed%253D0%2526text%253DType%252520some%252520text%252520and%252520click%252520play%2C&amp;voice=usenglishfemale&amp;speed=0&amp;action=convert</div>
</div>
</div>
</body>
......@@ -521,9 +521,9 @@ LayoutUnit LayoutFlexibleBox::mainAxisExtentForChild(const LayoutBox& child) con
return isHorizontalFlow() ? child.size().width() : child.size().height();
}
LayoutUnit LayoutFlexibleBox::mainAxisContentExtentForChild(const LayoutBox& child) const
LayoutUnit LayoutFlexibleBox::mainAxisContentExtentForChildIncludingScrollbar(const LayoutBox& child) const
{
return isHorizontalFlow() ? child.contentWidth() : child.contentHeight();
return isHorizontalFlow() ? child.contentWidth() + child.verticalScrollbarWidth() : child.contentHeight() + child.horizontalScrollbarHeight();
}
LayoutUnit LayoutFlexibleBox::crossAxisExtent() const
......@@ -1662,7 +1662,10 @@ void LayoutFlexibleBox::layoutAndPlaceChildren(LayoutUnit& crossAxisOffset, cons
child->setMayNeedPaintInvalidation();
setOverrideMainAxisContentSizeForChild(*child, flexItem.flexedContentSize);
if (flexItem.flexedContentSize != mainAxisContentExtentForChild(*child)) {
// The flexed content size and the override size include the scrollbar
// width, so we need to compare to the size including the scrollbar.
// TODO(cbiesinger): Should it include the scrollbar?
if (flexItem.flexedContentSize != mainAxisContentExtentForChildIncludingScrollbar(*child)) {
child->setChildNeedsLayout(MarkOnlyThis);
} else {
// To avoid double applying margin changes in updateAutoMarginsInCrossAxis, we reset the margins here.
......
......@@ -121,7 +121,7 @@ private:
LayoutUnit childIntrinsicLogicalHeight(const LayoutBox& child) const;
LayoutUnit childIntrinsicLogicalWidth(const LayoutBox& child) const;
LayoutUnit mainAxisExtentForChild(const LayoutBox& child) const;
LayoutUnit mainAxisContentExtentForChild(const LayoutBox& child) const;
LayoutUnit mainAxisContentExtentForChildIncludingScrollbar(const LayoutBox& child) const;
LayoutUnit crossAxisExtent() const;
LayoutUnit mainAxisExtent() const;
LayoutUnit crossAxisContentExtent() const;
......
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