Commit c3fb6332 authored by Mats Palmgren's avatar Mats Palmgren
Browse files

Bug 233463, patch 3 - Make Destroy/RemoveFrame() methods void and assert that...

Bug 233463, patch 3 - Make Destroy/RemoveFrame() methods void and assert that the frame to remove is present.  r=bzbarsky
parent 1a7f096a
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -1340,11 +1340,8 @@ AdjustFloatParentPtrs(nsIFrame* aFrame,
      NS_ASSERTION(outOfFlowFrame->GetParent() == aOuterState.mFloatedItems.containingBlock,
                   "expected the float to be a child of the outer CB");

      if (aOuterState.mFloatedItems.RemoveFrame(outOfFlowFrame, nsnull)) {
      aOuterState.mFloatedItems.RemoveFrame(outOfFlowFrame);
      aState.mFloatedItems.AddChild(outOfFlowFrame);
      } else {
        NS_NOTREACHED("float wasn't in the outer state float list");
      }

      outOfFlowFrame->SetParent(parent);
      if (outOfFlowFrame->GetStateBits() &
+2 −5
Original line number Diff line number Diff line
@@ -109,7 +109,7 @@ nsAbsoluteContainingBlock::InsertFrames(nsIFrame* aDelegatingFrame,
                     NS_FRAME_HAS_DIRTY_CHILDREN);
}

nsresult
void
nsAbsoluteContainingBlock::RemoveFrame(nsIFrame*       aDelegatingFrame,
                                       nsIAtom*        aListName,
                                       nsIFrame*       aOldFrame)
@@ -121,10 +121,7 @@ nsAbsoluteContainingBlock::RemoveFrame(nsIFrame* aDelegatingFrame,
      ->DeleteNextInFlowChild(aOldFrame->PresContext(), nif, PR_FALSE);
  }

  PRBool result = mAbsoluteFrames.DestroyFrame(aOldFrame);
  NS_ASSERTION(result, "didn't find frame to delete");

  return result ? NS_OK : NS_ERROR_FAILURE;
  mAbsoluteFrames.DestroyFrame(aOldFrame);
}

nsresult
+3 −3
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ public:
                        nsIAtom*       aListName,
                        nsIFrame*      aPrevFrame,
                        nsFrameList&   aFrameList);
  nsresult RemoveFrame(nsIFrame*      aDelegatingFrame,
  void RemoveFrame(nsIFrame*      aDelegatingFrame,
                   nsIAtom*       aListName,
                   nsIFrame*      aOldFrame);

+7 −6
Original line number Diff line number Diff line
@@ -4809,14 +4809,14 @@ nsBlockFrame::RemoveFloat(nsIFrame* aFloat) {
  }

  // Try to destroy if it's in mFloats.
  if (mFloats.DestroyFrame(aFloat)) {
  if (mFloats.DestroyFrameIfPresent(aFloat)) {
    return line;
  }

  // Try our overflow list
  {
    nsAutoOOFFrameList oofs(this);
    if (oofs.mList.DestroyFrame(aFloat)) {
    if (oofs.mList.DestroyFrameIfPresent(aFloat)) {
      return line_end;
    }
  }
@@ -4885,7 +4885,8 @@ nsBlockFrame::RemoveFrame(nsIAtom* aListName,
    }
  }
  else if (nsGkAtoms::absoluteList == aListName) {
    return mAbsoluteContainer.RemoveFrame(this, aListName, aOldFrame);
    mAbsoluteContainer.RemoveFrame(this, aListName, aOldFrame);
    return NS_OK;
  }
  else if (nsGkAtoms::floatList == aListName) {
    // Make sure to mark affected lines dirty for the float frame
@@ -5378,15 +5379,15 @@ nsBlockFrame::StealFrame(nsPresContext* aPresContext,

  if ((aChild->GetStateBits() & NS_FRAME_OUT_OF_FLOW) &&
      aChild->GetStyleDisplay()->IsFloating()) {
    PRBool removed = mFloats.RemoveFrame(aChild);
    PRBool removed = mFloats.RemoveFrameIfPresent(aChild);
    if (!removed) {
      nsFrameList* list = GetPropTableFrames(aPresContext,
                                          nsGkAtoms::floatContinuationProperty);
      if (list) {
        removed = list->RemoveFrame(aChild);
        removed = list->RemoveFrameIfPresent(aChild);
      }
    }
    return (removed) ? NS_OK : NS_ERROR_UNEXPECTED;
    return removed ? NS_OK : NS_ERROR_UNEXPECTED;
  }

  if ((aChild->GetStateBits() & NS_FRAME_IS_OVERFLOW_CONTAINER)
+9 −10
Original line number Diff line number Diff line
@@ -228,14 +228,10 @@ nsContainerFrame::RemoveFrame(nsIAtom* aListName,
      //      for overflow containers once we can split abspos elements with
      //      inline containing blocks.
      if (parent == this) {
        if (!parent->mFrames.DestroyFrame(aOldFrame)) {
        if (!parent->mFrames.DestroyFrameIfPresent(aOldFrame)) {
          // Try to remove it from our overflow list, if we have one.
          // The simplest way is to reuse StealFrame.
#ifdef DEBUG
          nsresult rv =
#endif
          StealFrame(PresContext(), aOldFrame, PR_TRUE);
          NS_ASSERTION(NS_SUCCEEDED(rv), "Could not find frame to remove!");
          aOldFrame->Destroy();
        }
      } else {
@@ -1084,19 +1080,22 @@ nsContainerFrame::StealFrame(nsPresContext* aPresContext,
    }
  }
  else {
    if (!mFrames.RemoveFrame(aChild)) {
    if (!mFrames.RemoveFrameIfPresent(aChild)) {
      removed = PR_FALSE;
      // We didn't find the child in the parent's principal child list.
      // Maybe it's on the overflow list?
      nsFrameList* frameList = GetOverflowFrames();
      if (frameList) {
        removed = frameList->RemoveFrame(aChild);
        removed = frameList->RemoveFrameIfPresent(aChild);
        if (frameList->IsEmpty()) {
          DestroyOverflowList(aPresContext);
        }
      }
    }
  }
  return (removed) ? NS_OK : NS_ERROR_UNEXPECTED;

  NS_POSTCONDITION(removed, "StealFrame: can't find aChild");
  return removed ? NS_OK : NS_ERROR_UNEXPECTED;
}

nsFrameList
@@ -1261,7 +1260,7 @@ nsContainerFrame::RemovePropTableFrame(nsPresContext* aPresContext,
    // No such list
    return PR_FALSE;
  }
  if (!frameList->RemoveFrame(aFrame)) {
  if (!frameList->RemoveFrameIfPresent(aFrame)) {
    // Found list, but it doesn't have the frame. Put list back.
    SetPropTableFrames(aPresContext, frameList, aPropID);
    return PR_FALSE;
Loading