Add asserts to catch dangerous cases. Bug 398108, r+sr+a=dbaron

This commit is contained in:
bzbarsky@mit.edu 2007-10-01 21:37:36 -07:00
Родитель d2ef3705ea
Коммит 96e7019482
3 изменённых файлов: 35 добавлений и 9 удалений

Просмотреть файл

@ -1864,6 +1864,9 @@ nsIXBLService * nsCSSFrameConstructor::GetXBLService()
void
nsCSSFrameConstructor::NotifyDestroyingFrame(nsIFrame* aFrame)
{
NS_PRECONDITION(mUpdateCount != 0,
"Should be in an update while destroying frames");
if (aFrame->GetStateBits() & NS_FRAME_GENERATED_CONTENT) {
if (mQuoteList.DestroyNodesFor(aFrame))
QuotesDirty();
@ -6672,6 +6675,9 @@ nsCSSFrameConstructor::InitAndRestoreFrame(const nsFrameConstructorState& aState
nsIFrame* aNewFrame,
PRBool aAllowCounters)
{
NS_PRECONDITION(mUpdateCount != 0,
"Should be in an update while creating frames");
nsresult rv = NS_OK;
NS_ASSERTION(aNewFrame, "Null frame cannot be initialized");
@ -8445,6 +8451,9 @@ nsCSSFrameConstructor::ContentAppended(nsIContent* aContainer,
PRInt32 aNewIndexInContainer)
{
AUTO_LAYOUT_PHASE_ENTRY_POINT(mPresShell->GetPresContext(), FrameC);
NS_PRECONDITION(mUpdateCount != 0,
"Should be in an update while creating frames");
#ifdef DEBUG
if (gNoisyContentUpdates) {
printf("nsCSSFrameConstructor::ContentAppended container=%p index=%d\n",
@ -8809,6 +8818,9 @@ nsCSSFrameConstructor::ContentInserted(nsIContent* aContainer,
nsILayoutHistoryState* aFrameState)
{
AUTO_LAYOUT_PHASE_ENTRY_POINT(mPresShell->GetPresContext(), FrameC);
NS_PRECONDITION(mUpdateCount != 0,
"Should be in an update while creating frames");
// XXXldb Do we need to re-resolve style to handle the CSS2 + combinator and
// the :empty pseudo-class?
#ifdef DEBUG
@ -9375,6 +9387,9 @@ nsCSSFrameConstructor::ContentRemoved(nsIContent* aContainer,
PRBool aInReinsertContent)
{
AUTO_LAYOUT_PHASE_ENTRY_POINT(mPresShell->GetPresContext(), FrameC);
NS_PRECONDITION(mUpdateCount != 0,
"Should be in an update while destroying frames");
// XXXldb Do we need to re-resolve style to handle the CSS2 + combinator and
// the :empty pseudo-class?
@ -13096,9 +13111,11 @@ nsCSSFrameConstructor::LazyGenerateChildrenEvent::Run()
menuPopupFrame->SetGeneratedChildren();
#endif
nsCSSFrameConstructor* fc = mPresShell->FrameConstructor();
fc->BeginUpdate();
nsFrameItems childItems;
nsFrameConstructorState state(mPresShell, nsnull, nsnull, nsnull);
nsCSSFrameConstructor* fc = mPresShell->FrameConstructor();
nsresult rv = fc->ProcessChildren(state, mContent, frame, PR_FALSE,
childItems, PR_FALSE);
if (NS_FAILED(rv))
@ -13108,6 +13125,8 @@ nsCSSFrameConstructor::LazyGenerateChildrenEvent::Run()
PR_FALSE, childItems);
frame->SetInitialChildList(nsnull, childItems.childList);
fc->EndUpdate();
if (mCallback)
mCallback(mContent, frame, mArg);

Просмотреть файл

@ -1024,17 +1024,13 @@ private:
PRUint8& aDisplay);
void QuotesDirty() {
if (mUpdateCount != 0)
mQuotesDirty = PR_TRUE;
else
mQuoteList.RecalcAll();
NS_PRECONDITION(mUpdateCount != 0, "Instant quote updates are bad news");
mQuotesDirty = PR_TRUE;
}
void CountersDirty() {
if (mUpdateCount != 0)
mCountersDirty = PR_TRUE;
else
mCounterManager.RecalcAll();
NS_PRECONDITION(mUpdateCount != 0, "Instant counter updates are bad news");
mCountersDirty = PR_TRUE;
}
public:

Просмотреть файл

@ -2365,6 +2365,9 @@ PresShell::InitialReflow(nscoord aWidth, nscoord aHeight)
MOZ_TIMER_RESET(mFrameCreationWatch);
MOZ_TIMER_START(mFrameCreationWatch);
WillCauseReflow();
mFrameConstructor->BeginUpdate();
if (!rootFrame) {
// Have style sheet processor construct a frame for the
// precursors to the root content object's frame
@ -2384,6 +2387,9 @@ PresShell::InitialReflow(nscoord aWidth, nscoord aHeight)
// Destroy() to get called, bug 337586.
NS_ENSURE_STATE(!mHaveShutDown);
mFrameConstructor->EndUpdate();
DidCauseReflow();
// Run the XBL binding constructors for any new frames we've constructed
mDocument->BindingManager()->ProcessAttachedQueue();
@ -6035,15 +6041,20 @@ void
PresShell::WillDoReflow()
{
// We just reflowed, tell the caret that its frame might have moved.
// XXXbz that comment makes no sense
if (mCaret) {
mCaret->InvalidateOutsideCaret();
mCaret->UpdateCaretPosition();
}
mFrameConstructor->BeginUpdate();
}
void
PresShell::DidDoReflow()
{
mFrameConstructor->EndUpdate();
HandlePostedReflowCallbacks();
// Null-check mViewManager in case this happens during Destroy. See
// bugs 244435 and 238546.