diff --git a/mozilla/content/html/document/src/nsHTMLContentSink.cpp b/mozilla/content/html/document/src/nsHTMLContentSink.cpp
index dc5a6e2409b..707b1975484 100644
--- a/mozilla/content/html/document/src/nsHTMLContentSink.cpp
+++ b/mozilla/content/html/document/src/nsHTMLContentSink.cpp
@@ -594,7 +594,7 @@ public:
PRBool IsCurrentContainer(nsHTMLTag mType);
PRBool IsAncestorContainer(nsHTMLTag mType);
- void DidAddContent(nsIContent* aContent, PRBool aDidNotify = PR_FALSE);
+ void DidAddContent(nsIContent* aContent);
void UpdateChildCounts();
private:
@@ -962,15 +962,8 @@ SinkContext::IsAncestorContainer(nsHTMLTag aTag)
}
void
-SinkContext::DidAddContent(nsIContent* aContent, PRBool aDidNotify)
+SinkContext::DidAddContent(nsIContent* aContent)
{
- // If there was a notification done for this content, update the
- // parent's notification count.
- if (aDidNotify && (0 < mStackPos)) {
- nsIContent* parent = mStack[mStackPos - 1].mContent;
- mStack[mStackPos - 1].mNumFlushed = parent->GetChildCount();
- }
-
if ((mStackPos == 2) && (mSink->mBody == mStack[1].mContent ||
mSink->mFrameset == mStack[1].mContent)) {
// We just finished adding something to the body
@@ -980,8 +973,10 @@ SinkContext::DidAddContent(nsIContent* aContent, PRBool aDidNotify)
// If we just added content to a node for which
// an insertion happen, we need to do an immediate
// notification for that insertion.
- if (!aDidNotify && (0 < mStackPos) &&
- (mStack[mStackPos - 1].mInsertionPoint != -1)) {
+ if (0 < mStackPos &&
+ mStack[mStackPos - 1].mInsertionPoint != -1 &&
+ mStack[mStackPos - 1].mNumFlushed <
+ mStack[mStackPos - 1].mContent->GetChildCount()) {
nsIContent* parent = mStack[mStackPos - 1].mContent;
#ifdef NS_DEBUG
@@ -1002,7 +997,7 @@ SinkContext::DidAddContent(nsIContent* aContent, PRBool aDidNotify)
mSink->NotifyInsert(parent, aContent,
mStack[mStackPos - 1].mInsertionPoint - 1);
mStack[mStackPos - 1].mNumFlushed = parent->GetChildCount();
- } else if (!aDidNotify && mSink->IsTimeToNotify()) {
+ } else if (mSink->IsTimeToNotify()) {
SINK_TRACE(SINK_TRACE_REFLOW,
("SinkContext::DidAddContent: Notification as a result of the "
"interval expiring; backoff count: %d", mSink->mBackoffCount));
@@ -1227,6 +1222,7 @@ SinkContext::CloseContainer(const nsHTMLTag aTag, PRBool aMalformed)
}
#endif
mSink->NotifyAppend(content, mStack[mStackPos].mNumFlushed);
+ mStack[mStackPos].mNumFlushed = content->GetChildCount();
}
// Indicate that notification has now happened at this level
@@ -1237,7 +1233,7 @@ SinkContext::CloseContainer(const nsHTMLTag aTag, PRBool aMalformed)
--mSink->mInMonolithicContainer;
}
- DidAddContent(content, PR_FALSE);
+ DidAddContent(content);
// Special handling for certain tags
switch (nodeType) {
@@ -1441,7 +1437,7 @@ SinkContext::AddLeaf(nsGenericHTMLElement* aContent)
parent->AppendChildTo(aContent, PR_FALSE);
}
- DidAddContent(aContent, PR_FALSE);
+ DidAddContent(aContent);
#ifdef DEBUG
if (SINK_LOG_TEST(gSinkLogModuleInfo, SINK_ALWAYS_REFLOW)) {
@@ -1482,6 +1478,8 @@ SinkContext::AddComment(const nsIParserNode& aNode)
nsGenericHTMLElement* parent;
if (!mSink->mBody && !mSink->mFrameset && mSink->mHead) {
+ // XXXbz but this will make DidAddContent use the wrong parent for
+ // the notification! That seems so bogus it's not even funny.
parent = mSink->mHead;
} else {
parent = mStack[mStackPos - 1].mContent;
@@ -1496,7 +1494,7 @@ SinkContext::AddComment(const nsIParserNode& aNode)
parent->AppendChildTo(comment, PR_FALSE);
}
- DidAddContent(comment, PR_FALSE);
+ DidAddContent(comment);
#ifdef DEBUG
if (SINK_LOG_TEST(gSinkLogModuleInfo, SINK_ALWAYS_REFLOW)) {
@@ -1747,7 +1745,7 @@ SinkContext::FlushText(PRBool* aDidFlush, PRBool aReleaseLast)
didFlush = PR_TRUE;
- DidAddContent(mLastTextNode, PR_FALSE);
+ DidAddContent(mLastTextNode);
}
}