forked from mirrors/gecko-dev
Bug 1880262 - Try to avoid YSOD when loading to XUL prototype fails and also if YSOD has been stored in the startup cache, r=Gijs,peterv,emilio
Differential Revision: https://phabricator.services.mozilla.com/D201820
This commit is contained in:
parent
001fa322b6
commit
3d03f7ad0a
3 changed files with 16 additions and 1 deletions
|
|
@ -669,7 +669,15 @@ nsresult PrototypeDocumentContentSink::DoneWalking() {
|
||||||
nsXULPrototypeCache::GetInstance()->HasPrototype(mDocumentURI,
|
nsXULPrototypeCache::GetInstance()->HasPrototype(mDocumentURI,
|
||||||
&isCachedOnDisk);
|
&isCachedOnDisk);
|
||||||
if (!isCachedOnDisk) {
|
if (!isCachedOnDisk) {
|
||||||
nsXULPrototypeCache::GetInstance()->WritePrototype(mCurrentPrototype);
|
if (!mDocument->GetDocumentElement() ||
|
||||||
|
(mDocument->GetDocumentElement()->NodeInfo()->Equals(
|
||||||
|
nsGkAtoms::parsererror) &&
|
||||||
|
mDocument->GetDocumentElement()->NodeInfo()->NamespaceEquals(
|
||||||
|
nsDependentAtomString(nsGkAtoms::nsuri_parsererror)))) {
|
||||||
|
nsXULPrototypeCache::GetInstance()->RemovePrototype(mDocumentURI);
|
||||||
|
} else {
|
||||||
|
nsXULPrototypeCache::GetInstance()->WritePrototype(mCurrentPrototype);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1283,6 +1283,12 @@ nsresult nsXULPrototypeElement::Deserialize(
|
||||||
return NS_ERROR_UNEXPECTED;
|
return NS_ERROR_UNEXPECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mNodeInfo->Equals(nsGkAtoms::parsererror) &&
|
||||||
|
mNodeInfo->NamespaceEquals(
|
||||||
|
nsDependentAtomString(nsGkAtoms::nsuri_parsererror))) {
|
||||||
|
return NS_ERROR_UNEXPECTED;
|
||||||
|
}
|
||||||
|
|
||||||
// Read Attributes
|
// Read Attributes
|
||||||
rv = aStream->Read32(&number);
|
rv = aStream->Read32(&number);
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) return rv;
|
if (NS_WARN_IF(NS_FAILED(rv))) return rv;
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ class nsXULPrototypeCache : public nsIObserver {
|
||||||
|
|
||||||
nsXULPrototypeDocument* GetPrototype(nsIURI* aURI);
|
nsXULPrototypeDocument* GetPrototype(nsIURI* aURI);
|
||||||
nsresult PutPrototype(nsXULPrototypeDocument* aDocument);
|
nsresult PutPrototype(nsXULPrototypeDocument* aDocument);
|
||||||
|
void RemovePrototype(nsIURI* aURI) { mPrototypeTable.Remove(aURI); }
|
||||||
|
|
||||||
JS::Stencil* GetStencil(nsIURI* aURI);
|
JS::Stencil* GetStencil(nsIURI* aURI);
|
||||||
nsresult PutStencil(nsIURI* aURI, JS::Stencil* aStencil);
|
nsresult PutStencil(nsIURI* aURI, JS::Stencil* aStencil);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue