--- a/layout/base/nsCSSFrameConstructor.cpp
+++ b/layout/base/nsCSSFrameConstructor.cpp
@@ -9863,24 +9863,22 @@ nsCSSFrameConstructor::CreateNeededAnonF
FrameConstructionItemList& aItems,
nsIFrame* aParentFrame)
{
if (aItems.IsEmpty() ||
!::IsFlexOrGridContainer(aParentFrame)) {
return;
}
- nsIAtom* containerType = aParentFrame->GetType();
const bool isWebkitBox = nsFlexContainerFrame::IsLegacyBox(aParentFrame);
FCItemIterator iter(aItems);
do {
// Advance iter past children that don't want to be wrapped
- if (iter.SkipItemsThatDontNeedAnonFlexOrGridItem(aState, containerType,
- isWebkitBox)) {
+ if (iter.SkipItemsThatDontNeedAnonFlexOrGridItem(aState, isWebkitBox)) {
// Hit the end of the items without finding any remaining children that
// need to be wrapped. We're finished!
return;
}
// If our next potentially-wrappable child is whitespace, then see if
// there's anything wrappable immediately after it. If not, we just drop
// the whitespace and move on. (We're not supposed to create any anonymous
@@ -9893,52 +9891,48 @@ nsCSSFrameConstructor::CreateNeededAnonF
// the CSS grid & flexbox specs. I'm not bothering with that at this point,
// since it's a pretty extreme edge case.
if (!aParentFrame->IsGeneratedContentFrame() &&
iter.item().IsWhitespace(aState)) {
FCItemIterator afterWhitespaceIter(iter);
bool hitEnd = afterWhitespaceIter.SkipWhitespace(aState);
bool nextChildNeedsAnonItem =
!hitEnd &&
- afterWhitespaceIter.item().NeedsAnonFlexOrGridItem(aState,
- containerType,
- isWebkitBox);
+ afterWhitespaceIter.item().NeedsAnonFlexOrGridItem(aState, isWebkitBox);
if (!nextChildNeedsAnonItem) {
// There's nothing after the whitespace that we need to wrap, so we
// just drop this run of whitespace.
iter.DeleteItemsTo(afterWhitespaceIter);
if (hitEnd) {
// Nothing left to do -- we're finished!
return;
}
// else, we have a next child and it does not want to be wrapped. So,
// we jump back to the beginning of the loop to skip over that child
// (and anything else non-wrappable after it)
MOZ_ASSERT(!iter.IsDone() &&
- !iter.item().NeedsAnonFlexOrGridItem(aState, containerType,
- isWebkitBox),
+ !iter.item().NeedsAnonFlexOrGridItem(aState, isWebkitBox),
"hitEnd and/or nextChildNeedsAnonItem lied");
continue;
}
}
// Now |iter| points to the first child that needs to be wrapped in an
// anonymous flex/grid item. Now we see how many children after it also want
// to be wrapped in an anonymous flex/grid item.
FCItemIterator endIter(iter); // iterator to find the end of the group
- endIter.SkipItemsThatNeedAnonFlexOrGridItem(aState, containerType,
- isWebkitBox);
+ endIter.SkipItemsThatNeedAnonFlexOrGridItem(aState, isWebkitBox);
NS_ASSERTION(iter != endIter,
"Should've had at least one wrappable child to seek past");
// Now, we create the anonymous flex or grid item to contain the children
// between |iter| and |endIter|.
- nsIAtom* pseudoType = containerType == nsGkAtoms::flexContainerFrame ?
+ nsIAtom* pseudoType = (aParentFrame->GetType() == nsGkAtoms::flexContainerFrame) ?
nsCSSAnonBoxes::anonymousFlexItem : nsCSSAnonBoxes::anonymousGridItem;
nsStyleContext* parentStyle = aParentFrame->StyleContext();
nsIContent* parentContent = aParentFrame->GetContent();
already_AddRefed<nsStyleContext> wrapperStyle =
mPresShell->StyleSet()->ResolveAnonymousBoxStyle(pseudoType, parentStyle);
static const FrameConstructionData sBlockFormattingContextFCData =
FCDATA_DECL(FCDATA_SKIP_FRAMESET | FCDATA_USE_CHILD_ITEMS,
@@ -12166,34 +12160,31 @@ nsCSSFrameConstructor::WipeContainingBlo
// Situation #2 is a flex or grid container frame into which we're inserting
// new inline non-replaced children, adjacent to an existing anonymous
// flex or grid item.
if (::IsFlexOrGridContainer(aFrame)) {
FCItemIterator iter(aItems);
// Check if we're adding to-be-wrapped content right *after* an existing
// anonymous flex or grid item (which would need to absorb this content).
- nsIAtom* containerType = aFrame->GetType();
const bool isWebkitBox = nsFlexContainerFrame::IsLegacyBox(aFrame);
if (aPrevSibling && IsAnonymousFlexOrGridItem(aPrevSibling) &&
- iter.item().NeedsAnonFlexOrGridItem(aState, containerType,
- isWebkitBox)) {
+ iter.item().NeedsAnonFlexOrGridItem(aState, isWebkitBox)) {
RecreateFramesForContent(aFrame->GetContent(), true,
REMOVE_FOR_RECONSTRUCTION, nullptr);
return true;
}
// Check if we're adding to-be-wrapped content right *before* an existing
// anonymous flex or grid item (which would need to absorb this content).
if (nextSibling && IsAnonymousFlexOrGridItem(nextSibling)) {
// Jump to the last entry in the list
iter.SetToEnd();
iter.Prev();
- if (iter.item().NeedsAnonFlexOrGridItem(aState, containerType,
- isWebkitBox)) {
+ if (iter.item().NeedsAnonFlexOrGridItem(aState, isWebkitBox)) {
RecreateFramesForContent(aFrame->GetContent(), true,
REMOVE_FOR_RECONSTRUCTION, nullptr);
return true;
}
}
}
// Situation #3 is an anonymous flex or grid item that's getting new children
@@ -12211,17 +12202,16 @@ nsCSSFrameConstructor::WipeContainingBlo
aState.PushFloatContainingBlock(nullptr, floatSaveState);
FCItemIterator iter(aItems);
// Skip over things that _do_ need an anonymous flex item, because
// they're perfectly happy to go here -- they won't cause a reframe.
nsIFrame* containerFrame = aFrame->GetParent();
const bool isWebkitBox = nsFlexContainerFrame::IsLegacyBox(containerFrame);
if (!iter.SkipItemsThatNeedAnonFlexOrGridItem(aState,
- containerFrame->GetType(),
isWebkitBox)) {
// We hit something that _doesn't_ need an anonymous flex item!
// Rebuild the flex container to bust it out.
RecreateFramesForContent(containerFrame->GetContent(), true,
REMOVE_FOR_RECONSTRUCTION, nullptr);
return true;
}
@@ -12670,17 +12660,16 @@ Iterator::SkipItemsNotWantingParentType(
}
// Note: we implement -webkit-box & -webkit-inline-box using
// nsFlexContainerFrame, but we use different rules for what gets wrapped in an
// anonymous flex item.
bool
nsCSSFrameConstructor::FrameConstructionItem::
NeedsAnonFlexOrGridItem(const nsFrameConstructorState& aState,
- nsIAtom* aContainerType,
bool aIsWebkitBox)
{
if (mFCData->mBits & FCDATA_IS_LINE_PARTICIPANT) {
// This will be an inline non-replaced box.
return true;
}
if (aIsWebkitBox &&
@@ -12691,40 +12680,36 @@ nsCSSFrameConstructor::FrameConstruction
return false;
}
inline bool
nsCSSFrameConstructor::FrameConstructionItemList::
Iterator::SkipItemsThatNeedAnonFlexOrGridItem(
const nsFrameConstructorState& aState,
- nsIAtom* aContainerType,
bool aIsWebkitBox)
{
NS_PRECONDITION(!IsDone(), "Shouldn't be done yet");
- while (item().NeedsAnonFlexOrGridItem(aState, aContainerType,
- aIsWebkitBox)) {
+ while (item().NeedsAnonFlexOrGridItem(aState, aIsWebkitBox)) {
Next();
if (IsDone()) {
return true;
}
}
return false;
}
inline bool
nsCSSFrameConstructor::FrameConstructionItemList::
Iterator::SkipItemsThatDontNeedAnonFlexOrGridItem(
const nsFrameConstructorState& aState,
- nsIAtom* aContainerType,
bool aIsWebkitBox)
{
NS_PRECONDITION(!IsDone(), "Shouldn't be done yet");
- while (!(item().NeedsAnonFlexOrGridItem(aState, aContainerType,
- aIsWebkitBox))) {
+ while (!(item().NeedsAnonFlexOrGridItem(aState, aIsWebkitBox))) {
Next();
if (IsDone()) {
return true;
}
}
return false;
}
--- a/layout/base/nsCSSFrameConstructor.h
+++ b/layout/base/nsCSSFrameConstructor.h
@@ -951,24 +951,24 @@ private:
// one. Return whether the iterator is done after doing that. The
// iterator must not be done when this is called.
inline bool SkipItemsNotWantingParentType(ParentType aParentType);
// Skip over non-replaced inline frames and positioned frames.
// Return whether the iterator is done after doing that.
// The iterator must not be done when this is called.
inline bool SkipItemsThatNeedAnonFlexOrGridItem(
- const nsFrameConstructorState& aState, nsIAtom* aContainerType,
+ const nsFrameConstructorState& aState,
bool aIsWebkitBox);
// Skip to the first frame that is a non-replaced inline or is
// positioned. Return whether the iterator is done after doing that.
// The iterator must not be done when this is called.
inline bool SkipItemsThatDontNeedAnonFlexOrGridItem(
- const nsFrameConstructorState& aState, nsIAtom* aContainerType,
+ const nsFrameConstructorState& aState,
bool aIsWebkitBox);
// Skip over all items that do not want a ruby parent. Return whether
// the iterator is done after doing that. The iterator must not be done
// when this is called.
inline bool SkipItemsNotWantingRubyParent();
// Skip over whitespace. Return whether the iterator is done after doing
@@ -1094,17 +1094,16 @@ private:
}
// Indicates whether (when in a flex or grid container) this item needs
// to be wrapped in an anonymous block. (Note that we implement
// -webkit-box/-webkit-inline-box using our standard flexbox frame class,
// but we use different rules for what gets wrapped. The aIsWebkitBox
// parameter here tells us whether to use those different rules.)
bool NeedsAnonFlexOrGridItem(const nsFrameConstructorState& aState,
- nsIAtom* aContainerType,
bool aIsWebkitBox);
// Don't call this unless the frametree really depends on the answer!
// Especially so for generated content, where we don't want to reframe
// things.
bool IsWhitespace(nsFrameConstructorState& aState) const;
bool IsLineBoundary() const {