mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 724284, cleanup XBL proto setup, r=bz
This commit is contained in:
parent
3565957a55
commit
23494816a3
@ -1470,6 +1470,28 @@ nsXBLPrototypeBinding::CreateKeyHandlers()
|
||||
}
|
||||
}
|
||||
|
||||
class XBLPrototypeSetupCleanup
|
||||
{
|
||||
public:
|
||||
XBLPrototypeSetupCleanup(nsXBLDocumentInfo* aDocInfo, const nsACString& aID)
|
||||
: mDocInfo(aDocInfo), mID(aID) {}
|
||||
|
||||
~XBLPrototypeSetupCleanup()
|
||||
{
|
||||
if (mDocInfo) {
|
||||
mDocInfo->RemovePrototypeBinding(mID);
|
||||
}
|
||||
}
|
||||
|
||||
void Disconnect()
|
||||
{
|
||||
mDocInfo = nsnull;
|
||||
}
|
||||
|
||||
nsXBLDocumentInfo* mDocInfo;
|
||||
nsCAutoString mID;
|
||||
};
|
||||
|
||||
nsresult
|
||||
nsXBLPrototypeBinding::Read(nsIObjectInputStream* aStream,
|
||||
nsXBLDocumentInfo* aDocInfo,
|
||||
@ -1554,6 +1576,8 @@ nsXBLPrototypeBinding::Read(nsIObjectInputStream* aStream,
|
||||
rv = aDocInfo->SetPrototypeBinding(id, this);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
XBLPrototypeSetupCleanup cleanup(aDocInfo, id);
|
||||
|
||||
nsCAutoString className;
|
||||
rv = aStream->ReadCString(className);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
@ -1567,10 +1591,7 @@ nsXBLPrototypeBinding::Read(nsIObjectInputStream* aStream,
|
||||
// occurs, the mapping should be removed again so that we don't keep an
|
||||
// invalid binding around.
|
||||
rv = mImplementation->Read(context, aStream, this, globalObject);
|
||||
if (NS_FAILED(rv)) {
|
||||
aDocInfo->RemovePrototypeBinding(id);
|
||||
return rv;
|
||||
}
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
// Next read in the handlers.
|
||||
@ -1627,6 +1648,7 @@ nsXBLPrototypeBinding::Read(nsIObjectInputStream* aStream,
|
||||
aDocInfo->SetFirstPrototypeBinding(this);
|
||||
}
|
||||
|
||||
cleanup.Disconnect();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user