From b87b2c1649e45068286e85943a457c0be44ec487 Mon Sep 17 00:00:00 2001 From: Ting-Yu Lin Date: Mon, 17 Jul 2017 11:31:31 +0800 Subject: [PATCH] Bug 1381017 - Set NODE_DESCENDANTS_NEED_FRAMES from flatten tree parent. r=emilio,tnikkel MozReview-Commit-ID: 3CBP8vc6OxB --HG-- extra : rebase_source : edefbf78c564dc328b265496044171a71c77fb2f --- layout/base/nsCSSFrameConstructor.cpp | 12 ++++++++---- layout/reftests/bugs/reftest.list | 12 ++++++------ layout/reftests/css-display/reftest.list | 4 ++-- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/layout/base/nsCSSFrameConstructor.cpp b/layout/base/nsCSSFrameConstructor.cpp index 97ebe2fa003a..aeba6a75da21 100644 --- a/layout/base/nsCSSFrameConstructor.cpp +++ b/layout/base/nsCSSFrameConstructor.cpp @@ -7201,7 +7201,7 @@ nsCSSFrameConstructor::MaybeConstructLazily(Operation aOperation, // 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 @@ -7210,6 +7210,9 @@ nsCSSFrameConstructor::MaybeConstructLazily(Operation aOperation, // 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. @@ -7222,9 +7225,10 @@ nsCSSFrameConstructor::MaybeConstructLazily(Operation aOperation, 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; diff --git a/layout/reftests/bugs/reftest.list b/layout/reftests/bugs/reftest.list index c9befff58837..b9554cb74c66 100644 --- a/layout/reftests/bugs/reftest.list +++ b/layout/reftests/bugs/reftest.list @@ -466,7 +466,7 @@ 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 @@ -1245,7 +1245,7 @@ fuzzy-if(skiaContent,1,12000) == 461512-1.html 461512-1-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 @@ -1321,8 +1321,8 @@ fails-if(Android) == 481024-1c.html 481024-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 @@ -1364,8 +1364,8 @@ pref(browser.display.focus_ring_width,1) == 491180-2.html 491180-2-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 diff --git a/layout/reftests/css-display/reftest.list b/layout/reftests/css-display/reftest.list index 7de11cc76227..e8acc6f50412 100644 --- a/layout/reftests/css-display/reftest.list +++ b/layout/reftests/css-display/reftest.list @@ -19,10 +19,10 @@ fuzzy-if(winWidget,12,100) skip-if(styloVsGecko||stylo) pref(layout.css.scoped-s 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