From b6dec099580e69d6afdf970bf50ea6f5157aa2b7 Mon Sep 17 00:00:00 2001 From: "hyatt%netscape.com" Date: Fri, 31 Mar 2000 10:26:25 +0000 Subject: [PATCH] Fumbling around trying to fix 800K leak. --- content/xul/content/src/nsXULElement.cpp | 11 ++++++++++- rdf/content/src/nsXULElement.cpp | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/content/xul/content/src/nsXULElement.cpp b/content/xul/content/src/nsXULElement.cpp index 0064572fea1a..26147bf379a2 100644 --- a/content/xul/content/src/nsXULElement.cpp +++ b/content/xul/content/src/nsXULElement.cpp @@ -1923,7 +1923,14 @@ nsXULElement::GetScriptObject(nsIScriptContext* aContext, void** aScriptObject) aContext->AddNamedReference((void*) &mScriptObject, mScriptObject, rootname); } - *aScriptObject = mScriptObject; + void* object = nsnull; + if (Binding()) { + nsCOMPtr owner(do_QueryInterface(Binding())); + owner->GetScriptObject(aContext, &object); + } + + *aScriptObject = object ? object : mScriptObject; + return rv; } @@ -2156,6 +2163,8 @@ nsXULElement::SetDocument(nsIDocument* aDocument, PRBool aDeep) global->GetContext(getter_AddRefs(context)); if (context) { context->RemoveReference((void*) &mScriptObject, mScriptObject); + if (Binding()) + Binding()->RemoveScriptReferences(context); } } } diff --git a/rdf/content/src/nsXULElement.cpp b/rdf/content/src/nsXULElement.cpp index 0064572fea1a..26147bf379a2 100644 --- a/rdf/content/src/nsXULElement.cpp +++ b/rdf/content/src/nsXULElement.cpp @@ -1923,7 +1923,14 @@ nsXULElement::GetScriptObject(nsIScriptContext* aContext, void** aScriptObject) aContext->AddNamedReference((void*) &mScriptObject, mScriptObject, rootname); } - *aScriptObject = mScriptObject; + void* object = nsnull; + if (Binding()) { + nsCOMPtr owner(do_QueryInterface(Binding())); + owner->GetScriptObject(aContext, &object); + } + + *aScriptObject = object ? object : mScriptObject; + return rv; } @@ -2156,6 +2163,8 @@ nsXULElement::SetDocument(nsIDocument* aDocument, PRBool aDeep) global->GetContext(getter_AddRefs(context)); if (context) { context->RemoveReference((void*) &mScriptObject, mScriptObject); + if (Binding()) + Binding()->RemoveScriptReferences(context); } } }