зеркало из https://github.com/mozilla/gecko-dev.git
Bug 524447 - Make the HTML5 parser tokenize on document.close(). (Spec svn r4241.) r=bnewman.
--HG-- extra : rebase_source : 5c67523de012c36e4327a37e3b1b29b43b745f0d
This commit is contained in:
Родитель
a712081a1d
Коммит
d1c2785f51
|
@ -211,7 +211,7 @@ nsHtml5Parser::ContinueInterruptedParsing()
|
|||
nsRefPtr<nsHtml5StreamParser> streamKungFuDeathGrip(mStreamParser);
|
||||
nsRefPtr<nsHtml5TreeOpExecutor> treeOpKungFuDeathGrip(mExecutor);
|
||||
CancelParsingEvents(); // If the executor caused us to continue, ignore event
|
||||
ParseUntilScript();
|
||||
ParseUntilBlocked();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -301,8 +301,9 @@ nsHtml5Parser::Parse(const nsAString& aSourceBuffer,
|
|||
NS_ASSERTION(!mStreamParser,
|
||||
"Had stream parser but got document.close().");
|
||||
mDocumentClosed = PR_TRUE;
|
||||
// TODO: Try to tokenize: http://www.w3.org/Bugs/Public/show_bug.cgi?id=7917
|
||||
MaybePostContinueEvent();
|
||||
if (!mBlocked) {
|
||||
ParseUntilBlocked();
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -576,9 +577,9 @@ nsHtml5Parser::HandleParserContinueEvent(nsHtml5ParserContinueEvent* ev)
|
|||
}
|
||||
|
||||
void
|
||||
nsHtml5Parser::ParseUntilScript()
|
||||
nsHtml5Parser::ParseUntilBlocked()
|
||||
{
|
||||
NS_PRECONDITION(!mFragmentMode, "ParseUntilScript called in fragment mode.");
|
||||
NS_PRECONDITION(!mFragmentMode, "ParseUntilBlocked called in fragment mode.");
|
||||
|
||||
if (mBlocked) {
|
||||
return;
|
||||
|
|
|
@ -323,9 +323,9 @@ class nsHtml5Parser : public nsIParser,
|
|||
private:
|
||||
|
||||
/**
|
||||
* Parse until pending data is exhausted or a script end tag is seen
|
||||
* Parse until pending data is exhausted or a script blocks the parser
|
||||
*/
|
||||
void ParseUntilScript();
|
||||
void ParseUntilBlocked();
|
||||
|
||||
// State variables
|
||||
|
||||
|
|
|
@ -356,12 +356,19 @@ nsHtml5TreeOpExecutor::Flush()
|
|||
// The charset switch was unsuccessful.
|
||||
return (static_cast<nsHtml5Parser*> (mParser.get()))->ContinueAfterFailedCharsetSwitch();
|
||||
}
|
||||
} else if (mScriptElement) {
|
||||
NS_ASSERTION(!mCallDidBuildModel, "Had a script element and DidBuildModel call");
|
||||
RunScript();
|
||||
} else if (mCallDidBuildModel) {
|
||||
mCallDidBuildModel = PR_FALSE;
|
||||
// If we have a script element here, it must be malformed
|
||||
#ifdef DEBUG
|
||||
nsCOMPtr<nsIScriptElement> sele = do_QueryInterface(mScriptElement);
|
||||
if (sele) {
|
||||
NS_ASSERTION(sele->IsMalformed(), "Script wasn't marked as malformed.");
|
||||
}
|
||||
#endif
|
||||
mScriptElement = nsnull;
|
||||
DidBuildModel(PR_FALSE);
|
||||
} else if (mScriptElement) {
|
||||
RunScript();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче