Bug 1381017 - Set NODE_DESCENDANTS_NEED_FRAMES from flatten tree parent.
MozReview-Commit-ID: 3CBP8vc6OxB
--- a/layout/base/nsCSSFrameConstructor.cpp
+++ b/layout/base/nsCSSFrameConstructor.cpp
@@ -7196,40 +7196,44 @@ nsCSSFrameConstructor::MaybeConstructLaz
}
}
}
// We can construct lazily; just need to set suitable bits in the content
// tree.
// Walk up the tree setting the NODE_DESCENDANTS_NEED_FRAMES bit as we go.
- nsIContent* content = aContainer;
+ nsIContent* content = aChild->GetFlattenedTreeParent();
#ifdef DEBUG
// If we hit a node with no primary frame, or the NODE_NEEDS_FRAME bit set
// we want to assert, but leaf frames that process their own children and may
// ignore anonymous children (eg framesets) make this complicated. So we set
// these two booleans if we encounter these situations and unset them if we
// hit a node with a leaf frame.
//
+ // It's fine if one of node without primary frame is in a display:none
+ // subtree.
+ //
// Also, it's fine if one of the nodes without primary frame is a display:
// contents node except if it's the direct ancestor of the children we're
// recreating frames for.
bool noPrimaryFrame = false;
bool needsFrameBitSet = false;
#endif
while (content &&
!content->HasFlag(NODE_DESCENDANTS_NEED_FRAMES)) {
#ifdef DEBUG
if (content->GetPrimaryFrame() && content->GetPrimaryFrame()->IsLeaf()) {
noPrimaryFrame = needsFrameBitSet = false;
}
- if (!noPrimaryFrame && !content->GetPrimaryFrame() &&
- !GetDisplayContentsStyleFor(content)) {
- noPrimaryFrame = true;
+ if (!noPrimaryFrame && !content->GetPrimaryFrame()) {
+ nsStyleContext* sc = GetUndisplayedContent(content);
+ noPrimaryFrame = !GetDisplayContentsStyleFor(content) &&
+ (sc && !sc->IsInDisplayNoneSubtree());
}
if (!needsFrameBitSet && content->HasFlag(NODE_NEEDS_FRAME)) {
needsFrameBitSet = true;
}
#endif
content->SetFlags(NODE_DESCENDANTS_NEED_FRAMES);
content = content->GetFlattenedTreeParent();
}
--- a/layout/reftests/bugs/reftest.list
+++ b/layout/reftests/bugs/reftest.list
@@ -461,17 +461,17 @@ fuzzy-if(skiaContent,2,3) == 339289-1.ht
== 345267-1d.html 345267-1-ref.html
!= 345563-sub.xhtml 345563-sup.xhtml
fuzzy-if(skiaContent,4,2) == 346774-1a.html 346774-1-ref.html
fuzzy-if(skiaContent,4,2) == 346774-1b.html 346774-1-ref.html
fuzzy-if(skiaContent,4,2) == 346774-1c.html 346774-1-ref.html
== 347348-1.xhtml 347348-1-ref.xhtml
== 347496-1.xhtml 347496-1-ref.xhtml
== 347912-1.html 347912-1-ref.html
-fails-if(styloVsGecko||stylo) == 348049-1.xhtml 348049-1-ref.xhtml
+== 348049-1.xhtml 348049-1-ref.xhtml
== 348516-1.html 348516-1-ref.html
== 348516-2.html 348516-2-ref.html
!= 348516-2.html 348516-2-notref.html
!= 348516-3.html 348516-3-notref.html
== 348597-1.html 348597-ref.html
== 348809-1a.html 348809-1-ref.html
== 348809-1b.html 348809-1-ref.html
== 348809-1c.html 348809-1-ref.html
@@ -1240,17 +1240,17 @@ fuzzy-if(skiaContent,1,12000) == 461512-
== 466258-1.html 466258-1-ref.html
== 466395-1.html 466395-1-ref.html
== 466395-2.html 466395-2-ref.html
== 467084-1.html 467084-1-ref.html
== 467084-2.html 467084-2-ref.html
== 467444-1.html 467444-1-ref.html
== 467460-1.html 467460-1-ref.html
== 468473-1.xul 468473-1-ref.xul
-fails-if(styloVsGecko||stylo) == 468546-1.xhtml 468546-1-ref.xhtml
+fails-if(styloVsGecko) == 468546-1.xhtml 468546-1-ref.xhtml
== 471356-1.html 471356-1-ref.html
== 471594-1.xhtml 471594-1-ref.html
fuzzy(255,15) == 472020-1a.xul 472020-1-ref.xul
fails-if(!styloVsGecko) == 472020-1b.xul 472020-1-ref.xul
fails-if(!styloVsGecko) == 472020-2.xul 472020-2-ref.xul
== 472500-1.xul 472500-1-ref.xul
== 472769-1a.html 472769-1-ref.html
== 472769-1b.html 472769-1-ref.html
@@ -1316,18 +1316,18 @@ fails-if(Android) == 481024-1a.html 4810
fails-if(Android) == 481024-1b.html 481024-1-ref.html
fails-if(Android) == 481024-1c.html 481024-1-ref.html
== 481024-1d.html 481024-1-ref.html
== 481024-1e.html 481024-1-ref.html
!= 481948-1.html 481948-1-ref.html
!= 481948-2.html 481948-2-ref.html
fails-if(Android) random-if(winWidget) fails-if(gtkWidget&&!styloVsGecko) == 481948-3.html 481948-3-ref.html # questionable test, see bug 488364
== 482398-1.html 482398-1-ref.html
-random-if(d2d) fails-if(styloVsGecko||stylo) == 482592-1a.xhtml 482592-1-ref.html # bug 586771
-random-if(d2d) fails-if(styloVsGecko||stylo) == 482592-1b.xhtml 482592-1-ref.html # bug 586771
+random-if(d2d) == 482592-1a.xhtml 482592-1-ref.html # bug 586771
+random-if(d2d) == 482592-1b.xhtml 482592-1-ref.html # bug 586771
random-if(winWidget) fuzzy-if(skiaContent,1,5) == 482659-1a.html 482659-1-ref.html
fuzzy-if(skiaContent,1,5) == 482659-1b.html 482659-1-ref.html
fuzzy-if(skiaContent,1,5) == 482659-1c.html 482659-1-ref.html
fuzzy-if(skiaContent,1,5) == 482659-1d.html 482659-1-ref.html
== 483565.xul 483565-ref.xul
== 484256-1.html 484256-1-ref.html
== 484256-2.html 484256-1-ref.html
== 485012-1.html 485012-1-ref.html
@@ -1359,18 +1359,18 @@ pref(browser.display.focus_ring_width,1)
pref(browser.display.focus_ring_width,1) == 491180-2.html 491180-2-ref.html
== 491323-1.xul 491323-1-ref.xul
== 492239-1.xul 492239-1-ref.xul
== 492661-1.html 492661-1-ref.html
== 493968-1.html 493968-1-ref.html
== 494667-1.html 494667-1-ref.html
== 494667-2.html 494667-2-ref.html
== 495274-1.html 495274-1-ref.html
-fails-if(styloVsGecko||stylo) == 495354-1a.xhtml 495354-1-ref.xhtml
-fails-if(styloVsGecko||stylo) == 495354-1b.xhtml 495354-1-ref.xhtml
+== 495354-1a.xhtml 495354-1-ref.xhtml
+== 495354-1b.xhtml 495354-1-ref.xhtml
== 495385-1a.html 495385-1-ref.html
== 495385-1b.html 495385-1-ref.html
== 495385-1c.html 495385-1-ref.html
== 495385-1d.html 495385-1-ref.html
== 495385-1e.html 495385-1-ref.html
== 495385-1f.html 495385-1-ref.html
== 495385-2a.html 495385-2-ref.html
== 495385-2b.html 495385-2-ref.html
--- a/layout/reftests/css-display/reftest.list
+++ b/layout/reftests/css-display/reftest.list
@@ -14,20 +14,20 @@ fuzzy-if(winWidget,12,100) skip-if(stylo
== display-contents-tables-2.xhtml display-contents-tables-ref.xhtml
== display-contents-tables-3.xhtml display-contents-tables-3-ref.xhtml
== display-contents-visibility-hidden.html display-contents-visibility-hidden-ref.html
== display-contents-visibility-hidden-2.html display-contents-visibility-hidden-ref.html
== display-contents-495385-2d.html display-contents-495385-2d-ref.html
fuzzy-if(Android,7,3935) == display-contents-xbl.xhtml display-contents-xbl-ref.html
fuzzy-if(Android,7,1186) fails-if(stylo||styloVsGecko) pref(dom.webcomponents.enabled,true) pref(layout.css.scoped-style.enabled,true) == display-contents-shadow-dom-1.html display-contents-shadow-dom-1-ref.html
== display-contents-xbl-2.xul display-contents-xbl-2-ref.xul
-asserts(1) asserts-if(styloVsGecko,2) == display-contents-xbl-3.xul display-contents-xbl-3-ref.xul # bug 1089223
+== display-contents-xbl-3.xul display-contents-xbl-3-ref.xul
skip == display-contents-xbl-4.xul display-contents-xbl-4-ref.xul # fails (not just asserts) due to bug 1089223
asserts(0-1) fuzzy-if(Android,8,3216) == display-contents-fieldset.html display-contents-fieldset-ref.html # bug 1089223
-asserts(1) asserts-if(styloVsGecko,2) == display-contents-xbl-5.xul display-contents-xbl-3-ref.xul # bug 1089223
+== display-contents-xbl-5.xul display-contents-xbl-3-ref.xul
fails-if(!stylo) == display-contents-xbl-6.xhtml display-contents-xbl-6-ref.html # bug 1345809
== display-contents-xbl-7.xhtml display-contents-xbl-7-ref.html
== display-contents-list-item-child.html display-contents-list-item-child-ref.html
== display-contents-dyn-insert-text.html display-contents-dyn-insert-text-ref.html
== display-contents-writing-mode-1.html display-contents-writing-mode-1-ref.html
== display-contents-writing-mode-2.html display-contents-writing-mode-2-ref.html
needs-focus == display-contents-state-change.html display-contents-state-change-ref.html
== display-flow-root-001.html display-flow-root-001-ref.html