diff options
author | Matt A. Tobin <email@mattatobin.com> | 2020-04-16 17:51:36 -0400 |
---|---|---|
committer | Matt A. Tobin <email@mattatobin.com> | 2020-04-16 17:52:30 -0400 |
commit | 1f5c67934f05d036de575c3d8172587fa6d398bc (patch) | |
tree | 2b9107c18edfe1752152febbc68f938050136d84 /layout/base | |
parent | 32c3ee92b8b9b1640d346761b36c642f9a968ce3 (diff) | |
download | UXP-1f5c67934f05d036de575c3d8172587fa6d398bc.tar UXP-1f5c67934f05d036de575c3d8172587fa6d398bc.tar.gz UXP-1f5c67934f05d036de575c3d8172587fa6d398bc.tar.lz UXP-1f5c67934f05d036de575c3d8172587fa6d398bc.tar.xz UXP-1f5c67934f05d036de575c3d8172587fa6d398bc.zip |
Bug 1343937 - Fix a crash in nsWrapperCache.h
* Implement and use GetInFlowParent
* Exempt scrollbar NAC from the new NAC semantics
Tag #1375
Diffstat (limited to 'layout/base')
-rw-r--r-- | layout/base/nsCSSFrameConstructor.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/layout/base/nsCSSFrameConstructor.cpp b/layout/base/nsCSSFrameConstructor.cpp index a2dec55e1..e88b2d62c 100644 --- a/layout/base/nsCSSFrameConstructor.cpp +++ b/layout/base/nsCSSFrameConstructor.cpp @@ -10730,6 +10730,12 @@ nsCSSFrameConstructor::AddFCItemsForAnonymousContent( // first element that is not itself NAC (distinct from whether it happens // to be in a NAC subtree). // + // The one exception to all of this is scrollbar content, which we parent + // directly to the scrollframe. This is because the special-snowflake + // construction of scroll frames doesn't result in the placeholder frame + // being constructed until later, which means that GetInFlowParent() doesn't + // work right in the case of out-of-flow scrollframes. + // // To implement all this, we need to pass the correct parent style context // here because SetPrimaryFrame() may not have been called on the content // yet and thus ResolveStyleContext can't find it otherwise. @@ -10739,9 +10745,12 @@ nsCSSFrameConstructor::AddFCItemsForAnonymousContent( // to worry about anonymous boxes, which CorrectStyleParentFrame handles // for us. nsIFrame* inheritFrame = aFrame; - while (inheritFrame->GetContent()->IsNativeAnonymous()) { - inheritFrame = inheritFrame->GetParent(); + if (!content->IsNativeScrollbarContent()) { + while (inheritFrame->GetContent()->IsNativeAnonymous()) { + inheritFrame = inheritFrame->GetInFlowParent(); + } } + if (inheritFrame->GetType() == nsGkAtoms::canvasFrame) { // CorrectStyleParentFrame returns nullptr if the prospective parent is // the canvas frame, so avoid calling it in that situation. |