Bug 1613380 - Use FlexboxAxisTracker's main axis to initialize strut FlexItem's mMainAxis. r=dholbert

Annotate optiontext.html for Android as slightly fuzzy, to account for
reftest rebucketing fuzzy-failure fallout. It has 0 in the lower bound
of the fuzzy annotation because not every Android has this
fuzzy-failure.

Meanwhile, bug453105.html no longer fails due to reftest rebucketing, so
I remove its fuzzy annotation.

Differential Revision: https://phabricator.services.mozilla.com/D61877

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Ting-Yu Lin 2020-02-07 18:53:28 +00:00
parent 2b24c55e89
commit c26c7aeb90
5 changed files with 33 additions and 7 deletions

View File

@ -1,5 +1,5 @@
fuzzy-if(Android,0-4,0-1) == bug453105.html bug453105-ref.html # bug 1600534
== optiontext.html optiontext-ref.html
== bug453105.html bug453105-ref.html
fuzzy-if(Android,0-4,0-1) == optiontext.html optiontext-ref.html
== bug456008.xhtml bug456008-ref.html
fuzzy-if(skiaContent,0-2,0-3) == bug439965.html bug439965-ref.html
== bug427779.xml bug427779-ref.xml

View File

@ -415,7 +415,8 @@ class nsFlexContainerFrame::FlexItem : public LinkedListElement<FlexItem> {
// we'll use on this FlexItem instead of the child frame's real writing mode.
// This is fine - it doesn't matter what writing mode we use for a
// strut, since it won't render any content and we already know its size.)
FlexItem(nsIFrame* aChildFrame, nscoord aCrossSize, WritingMode aContainerWM);
FlexItem(nsIFrame* aChildFrame, nscoord aCrossSize, WritingMode aContainerWM,
const FlexboxAxisTracker& aAxisTracker);
// Accessors
nsIFrame* Frame() const { return mFrame; }
@ -827,7 +828,7 @@ class nsFlexContainerFrame::FlexItem : public LinkedListElement<FlexItem> {
const WritingMode mCBWM;
// The flex container's main axis in flex container's writing mode.
const LogicalAxis mMainAxis = eLogicalAxisInline;
const LogicalAxis mMainAxis;
// Stored in flex container's writing mode.
const LogicalMargin mBorderPadding;
@ -2011,10 +2012,12 @@ FlexItem::FlexItem(ReflowInput& aFlexItemReflowInput, float aFlexGrow,
// with visibility:collapse. The strut has 0 main-size, and it only exists to
// impose a minimum cross size on whichever FlexLine it ends up in.
FlexItem::FlexItem(nsIFrame* aChildFrame, nscoord aCrossSize,
WritingMode aContainerWM)
WritingMode aContainerWM,
const FlexboxAxisTracker& aAxisTracker)
: mFrame(aChildFrame),
mWM(aContainerWM),
mCBWM(aContainerWM),
mMainAxis(aAxisTracker.MainAxis()),
mBorderPadding(mCBWM),
mMargin(mCBWM),
mCrossSize(aCrossSize),
@ -3796,13 +3799,14 @@ void nsFlexContainerFrame::GenerateFlexLines(
childFrame->StyleVisibility()->mVisible)) {
// Legacy visibility:collapse behavior: make a 0-sized strut. (No need to
// bother with aStruts and remembering cross size.)
item = MakeUnique<FlexItem>(childFrame, 0, aReflowInput.GetWritingMode());
item = MakeUnique<FlexItem>(childFrame, 0, aReflowInput.GetWritingMode(),
aAxisTracker);
} else if (nextStrutIdx < aStruts.Length() &&
aStruts[nextStrutIdx].mItemIdx == itemIdxInContainer) {
// Use the simplified "strut" FlexItem constructor:
item = MakeUnique<FlexItem>(childFrame,
aStruts[nextStrutIdx].mStrutCrossSize,
aReflowInput.GetWritingMode());
aReflowInput.GetWritingMode(), aAxisTracker);
nextStrutIdx++;
} else {
item = GenerateFlexItemForChild(aPresContext, childFrame, aReflowInput,

View File

@ -0,0 +1,8 @@
<!DOCTYPE html>
<style>
.item { background: pink; margin-top: auto}
</style>
<div style="display:flex; flex-direction: column;
height: 100px; border: 1px solid black">
<div class="item">This text should be bottom-aligned</div>
</div>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<style>
.item { background: pink; margin-top: auto}
.strut {
visibility: collapse;
margin-left: auto; /* This should have no effect (but it does!) */
}
</style>
<div style="display:flex; flex-direction: column;
height: 100px; border: 1px solid black">
<div class="item">This text should be bottom-aligned</div>
<div class="strut"></div>
</div>

View File

@ -2089,3 +2089,4 @@ fuzzy-if(gtkWidget,0-255,0-42) == 1599841-1.html 1599841-1-ref.html
pref(layout.css.xul-box-display-values.content.enabled,true) == 1606130.html 1606130-ref.html
== 1608124-1.html 1608124-1-ref.html
skip-if(!OSX) != 1608124-2.html 1608124-2-notref.html
== 1613380.html 1613380-ref.html