mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 744366 - Assert about old readyState before readyState transitions. r=bzbarsky.
This commit is contained in:
parent
6984ac06d5
commit
c6c8e61892
@ -1439,6 +1439,8 @@ void
|
||||
nsContentSink::DidBuildModelImpl(bool aTerminated)
|
||||
{
|
||||
if (mDocument && !aTerminated) {
|
||||
MOZ_ASSERT(mDocument->GetReadyStateEnum() ==
|
||||
nsIDocument::READYSTATE_LOADING, "Bad readyState");
|
||||
mDocument->SetReadyStateInternal(nsIDocument::READYSTATE_INTERACTIVE);
|
||||
}
|
||||
|
||||
|
@ -4109,16 +4109,9 @@ nsContentUtils::CreateDocument(const nsAString& aNamespaceURI,
|
||||
DocumentFlavor aFlavor,
|
||||
nsIDOMDocument** aResult)
|
||||
{
|
||||
nsresult rv = NS_NewDOMDocument(aResult, aNamespaceURI, aQualifiedName,
|
||||
aDoctype, aDocumentURI, aBaseURI, aPrincipal,
|
||||
true, aEventObject, aFlavor);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIDocument> document = do_QueryInterface(*aResult);
|
||||
|
||||
// created documents are immediately "complete" (ready to use)
|
||||
document->SetReadyStateInternal(nsIDocument::READYSTATE_COMPLETE);
|
||||
return NS_OK;
|
||||
return NS_NewDOMDocument(aResult, aNamespaceURI, aQualifiedName,
|
||||
aDoctype, aDocumentURI, aBaseURI, aPrincipal,
|
||||
true, aEventObject, aFlavor);
|
||||
}
|
||||
|
||||
/* static */
|
||||
|
@ -1442,12 +1442,21 @@ nsDOMImplementation::CreateDocument(const nsAString& aNamespaceURI,
|
||||
|
||||
NS_ENSURE_STATE(!mScriptObject || scriptHandlingObject);
|
||||
|
||||
return nsContentUtils::CreateDocument(aNamespaceURI, aQualifiedName, aDoctype,
|
||||
mDocumentURI, mBaseURI,
|
||||
mOwner->NodePrincipal(),
|
||||
scriptHandlingObject,
|
||||
nsCOMPtr<nsIDOMDocument> document;
|
||||
|
||||
rv = nsContentUtils::CreateDocument(aNamespaceURI, aQualifiedName, aDoctype,
|
||||
mDocumentURI, mBaseURI,
|
||||
mOwner->NodePrincipal(),
|
||||
scriptHandlingObject,
|
||||
DocumentFlavorLegacyGuess,
|
||||
aReturn);
|
||||
getter_AddRefs(document));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIDocument> doc = do_QueryInterface(document);
|
||||
doc->SetReadyStateInternal(nsIDocument::READYSTATE_COMPLETE);
|
||||
|
||||
document.forget(aReturn);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
@ -1519,6 +1528,8 @@ nsDOMImplementation::CreateHTMLDocument(const nsAString& aTitle,
|
||||
rv = root->AppendChildTo(body, false);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
doc->SetReadyStateInternal(nsIDocument::READYSTATE_COMPLETE);
|
||||
|
||||
document.forget(aReturn);
|
||||
|
||||
return NS_OK;
|
||||
@ -2366,6 +2377,8 @@ nsDocument::StartDocumentLoad(const char* aCommand, nsIChannel* aChannel,
|
||||
}
|
||||
#endif
|
||||
|
||||
MOZ_ASSERT(GetReadyStateEnum() == nsIDocument::READYSTATE_UNINITIALIZED,
|
||||
"Bad readyState");
|
||||
SetReadyStateInternal(READYSTATE_LOADING);
|
||||
|
||||
if (nsCRT::strcmp(kLoadAsData, aCommand) == 0) {
|
||||
@ -7646,6 +7659,12 @@ void
|
||||
nsDocument::SetReadyStateInternal(ReadyState rs)
|
||||
{
|
||||
mReadyState = rs;
|
||||
if (rs == READYSTATE_UNINITIALIZED) {
|
||||
// Transition back to uninitialized happens only to keep assertions happy
|
||||
// right before readyState transitions to something else. Make this
|
||||
// transition undetectable by Web content.
|
||||
return;
|
||||
}
|
||||
if (mTiming) {
|
||||
switch (rs) {
|
||||
case READYSTATE_LOADING:
|
||||
|
@ -1578,6 +1578,8 @@ nsHTMLDocument::Open(const nsAString& aContentTypeOrUrl,
|
||||
|
||||
--mWriteLevel;
|
||||
|
||||
SetReadyStateInternal(nsIDocument::READYSTATE_LOADING);
|
||||
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
return CallQueryInterface(this, aReturn);
|
||||
}
|
||||
|
@ -457,6 +457,14 @@ nsXMLDocument::Load(const nsAString& aUrl, bool *aReturn)
|
||||
return rv;
|
||||
}
|
||||
|
||||
// StartDocumentLoad asserts that readyState is uninitialized, so
|
||||
// uninitialize it. SetReadyStateInternal make this transition invisible to
|
||||
// Web content. But before doing that, assert that the current readyState
|
||||
// is complete as it should be after the call to ResetToURI() above.
|
||||
MOZ_ASSERT(GetReadyStateEnum() == nsIDocument::READYSTATE_COMPLETE,
|
||||
"Bad readyState");
|
||||
SetReadyStateInternal(nsIDocument::READYSTATE_UNINITIALIZED);
|
||||
|
||||
// Prepare for loading the XML document "into oneself"
|
||||
nsCOMPtr<nsIStreamListener> listener;
|
||||
if (NS_FAILED(rv = StartDocumentLoad(kLoadAsData, channel,
|
||||
|
@ -258,6 +258,8 @@ txMozillaXMLOutput::endDocument(nsresult aResult)
|
||||
|
||||
if (mCreatingNewDocument) {
|
||||
// This should really be handled by nsIDocument::EndLoad
|
||||
MOZ_ASSERT(mDocument->GetReadyStateEnum() ==
|
||||
nsIDocument::READYSTATE_LOADING, "Bad readyState");
|
||||
mDocument->SetReadyStateInternal(nsIDocument::READYSTATE_INTERACTIVE);
|
||||
nsScriptLoader* loader = mDocument->ScriptLoader();
|
||||
if (loader) {
|
||||
@ -837,6 +839,8 @@ txMozillaXMLOutput::createResultDocument(const nsSubstring& aName, PRInt32 aNsID
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
// This should really be handled by nsIDocument::BeginLoad
|
||||
MOZ_ASSERT(mDocument->GetReadyStateEnum() ==
|
||||
nsIDocument::READYSTATE_UNINITIALIZED, "Bad readyState");
|
||||
mDocument->SetReadyStateInternal(nsIDocument::READYSTATE_LOADING);
|
||||
nsCOMPtr<nsIDocument> source = do_QueryInterface(aSourceDocument);
|
||||
NS_ENSURE_STATE(source);
|
||||
|
@ -687,6 +687,8 @@ txMozillaXSLTProcessor::TransformToDoc(nsIDOMDocument **aResult)
|
||||
static_cast<txAOutputXMLEventHandler*>(es.mOutputHandler);
|
||||
handler->getOutputDocument(aResult);
|
||||
nsCOMPtr<nsIDocument> doc = do_QueryInterface(*aResult);
|
||||
MOZ_ASSERT(doc->GetReadyStateEnum() ==
|
||||
nsIDocument::READYSTATE_INTERACTIVE, "Bad readyState");
|
||||
doc->SetReadyStateInternal(nsIDocument::READYSTATE_COMPLETE);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user