From 857f96fac46eb0e9175a442d124b962993a18069 Mon Sep 17 00:00:00 2001 From: Olli Pettay Date: Wed, 21 Apr 2010 14:54:40 +0300 Subject: [PATCH] Bug 559311 - [HTML5] nsContentUtils::CreateContextualFragment doesn't cache HTML5 parser properly, r=smaug --- parser/html/nsHtml5Parser.cpp | 1 + parser/html/nsHtml5TreeOpExecutor.cpp | 1 + parser/html/nsHtml5TreeOpExecutor.h | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/parser/html/nsHtml5Parser.cpp b/parser/html/nsHtml5Parser.cpp index 0847f72a514..40d5353b321 100644 --- a/parser/html/nsHtml5Parser.cpp +++ b/parser/html/nsHtml5Parser.cpp @@ -487,6 +487,7 @@ nsHtml5Parser::ParseFragment(const nsAString& aSourceBuffer, mExecutor->FlushDocumentWrite(); mTokenizer->end(); mExecutor->DropParserAndPerfHint(); + mExecutor->DropHeldElements(); mAtomTable.Clear(); return NS_OK; } diff --git a/parser/html/nsHtml5TreeOpExecutor.cpp b/parser/html/nsHtml5TreeOpExecutor.cpp index f6b957c88ba..8ce26943ebe 100644 --- a/parser/html/nsHtml5TreeOpExecutor.cpp +++ b/parser/html/nsHtml5TreeOpExecutor.cpp @@ -826,6 +826,7 @@ nsHtml5TreeOpExecutor::GetTokenizer() void nsHtml5TreeOpExecutor::Reset() { + DropHeldElements(); mHasProcessedBase = PR_FALSE; mReadingFromStage = PR_FALSE; mOpQueue.Clear(); diff --git a/parser/html/nsHtml5TreeOpExecutor.h b/parser/html/nsHtml5TreeOpExecutor.h index 74fce31f104..cb47eb531d0 100644 --- a/parser/html/nsHtml5TreeOpExecutor.h +++ b/parser/html/nsHtml5TreeOpExecutor.h @@ -368,6 +368,10 @@ class nsHtml5TreeOpExecutor : public nsContentSink, mOwnedElements.AppendObject(aContent); } + void DropHeldElements() { + mOwnedElements.Clear(); + } + /** * Flush the operations from the tree operations from the argument * queue unconditionally. (This is for the main thread case.)