diff --git a/mozilla/layout/base/nsCSSFrameConstructor.cpp b/mozilla/layout/base/nsCSSFrameConstructor.cpp index a790a484ddd..03f761827f9 100644 --- a/mozilla/layout/base/nsCSSFrameConstructor.cpp +++ b/mozilla/layout/base/nsCSSFrameConstructor.cpp @@ -2490,6 +2490,25 @@ ProcessPseudoFrame(nsPresContext* aPresContext, return rv; } +static nsresult +ProcessPseudoRowGroupFrame(nsPresContext* aPresContext, + nsPseudoFrameData& aPseudoData, + nsIFrame*& aParent) +{ + nsresult rv = NS_OK; + if (!aPresContext) return rv; + + aParent = aPseudoData.mFrame; + nsTableRowGroupFrame* rgFrame = nsTableFrame::GetRowGroupFrame(aParent); + nsFrameItems* items = &aPseudoData.mChildList; + if (items && items->childList) { + rv = rgFrame->SetInitialChildList(aPresContext, nsnull, items->childList); + if (NS_FAILED(rv)) return rv; + } + aPseudoData.Reset(); + return rv; +} + static nsresult ProcessPseudoTableFrame(nsPresContext* aPresContext, nsPseudoFrames& aPseudoFrames, @@ -2580,12 +2599,12 @@ ProcessPseudoFrames(nsFrameConstructorState& aState, if (nsLayoutAtoms::tableRowFrame == aHighestType) return rv; } if (pseudoFrames.mRowGroup.mFrame) { - rv = ProcessPseudoFrame(presContext, pseudoFrames.mRowGroup, aHighestFrame); + rv = ProcessPseudoRowGroupFrame(presContext, pseudoFrames.mRowGroup, aHighestFrame); if (nsLayoutAtoms::tableRowGroupFrame == aHighestType) return rv; } } else if (nsLayoutAtoms::tableRowGroupFrame == pseudoFrames.mLowestType) { - rv = ProcessPseudoFrame(presContext, pseudoFrames.mRowGroup, aHighestFrame); + rv = ProcessPseudoRowGroupFrame(presContext, pseudoFrames.mRowGroup, aHighestFrame); if (nsLayoutAtoms::tableRowGroupFrame == aHighestType) return rv; if (pseudoFrames.mTableOuter.mFrame) { @@ -2606,7 +2625,7 @@ ProcessPseudoFrames(nsFrameConstructorState& aState, if (nsLayoutAtoms::tableRowFrame == aHighestType) return rv; if (pseudoFrames.mRowGroup.mFrame) { - rv = ProcessPseudoFrame(presContext, pseudoFrames.mRowGroup, aHighestFrame); + rv = ProcessPseudoRowGroupFrame(presContext, pseudoFrames.mRowGroup, aHighestFrame); if (nsLayoutAtoms::tableRowGroupFrame == aHighestType) return rv; } if (pseudoFrames.mTableOuter.mFrame) { @@ -2627,7 +2646,7 @@ ProcessPseudoFrames(nsFrameConstructorState& aState, if (nsLayoutAtoms::tableRowFrame == aHighestType) return rv; } if (pseudoFrames.mRowGroup.mFrame) { - rv = ProcessPseudoFrame(presContext, pseudoFrames.mRowGroup, aHighestFrame); + rv = ProcessPseudoRowGroupFrame(presContext, pseudoFrames.mRowGroup, aHighestFrame); if (nsLayoutAtoms::tableRowGroupFrame == aHighestType) return rv; } if (pseudoFrames.mTableOuter.mFrame) { @@ -2864,8 +2883,10 @@ nsCSSFrameConstructor::CreatePseudoRowFrame(nsTableCreator& aTableCreat { nsresult rv = NS_OK; - nsIFrame* parentFrame = (aState.mPseudoFrames.mRowGroup.mFrame) - ? aState.mPseudoFrames.mRowGroup.mFrame : aParentFrameIn; + nsIFrame* parentFrame = aParentFrameIn; + if (aState.mPseudoFrames.mRowGroup.mFrame) { + parentFrame = (nsIFrame*) nsTableFrame::GetRowGroupFrame(aState.mPseudoFrames.mRowGroup.mFrame); + } if (!parentFrame) return rv; nsStyleContext *parentStyle;