From 00a85b58115793617397cfc8ee6461b8c1394b0c Mon Sep 17 00:00:00 2001 From: "bent.mozilla%gmail.com" Date: Tue, 29 Jan 2008 06:15:25 +0000 Subject: [PATCH] =?UTF-8?q?Bug=20413447=20=C3=A2=C2=80=C2=93=20"nsXBLDocum?= =?UTF-8?q?entInfo=20can=20keep=20closed=20global=20window=20alive".=20r+s?= =?UTF-8?q?r=3Dsicking,=20a=3Dblocking1.9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://10.0.0.236/trunk@244306 18797224-902f-48f8-a5cc-f745e15eee43 --- .../content/xbl/src/nsXBLPrototypeBinding.cpp | 6 ----- .../content/xbl/src/nsXBLPrototypeHandler.cpp | 24 +++++++++---------- .../content/xbl/src/nsXBLPrototypeHandler.h | 3 +-- 3 files changed, 12 insertions(+), 21 deletions(-) diff --git a/mozilla/content/xbl/src/nsXBLPrototypeBinding.cpp b/mozilla/content/xbl/src/nsXBLPrototypeBinding.cpp index 3ea85265a8c..9adf836decf 100644 --- a/mozilla/content/xbl/src/nsXBLPrototypeBinding.cpp +++ b/mozilla/content/xbl/src/nsXBLPrototypeBinding.cpp @@ -361,12 +361,6 @@ nsXBLPrototypeBinding::Traverse(nsCycleCollectionTraversalCallback &cb) const mInsertionPointTable->Enumerate(TraverseInsertionPoint, &cb); if (mInterfaceTable) mInterfaceTable->Enumerate(TraverseBinding, &cb); - - nsXBLPrototypeHandler* curr = mPrototypeHandler; - while (curr) { - curr->Traverse(cb); - curr = curr->GetNextHandler(); - } } void diff --git a/mozilla/content/xbl/src/nsXBLPrototypeHandler.cpp b/mozilla/content/xbl/src/nsXBLPrototypeHandler.cpp index ed4b8f4d59b..fbaf584d272 100644 --- a/mozilla/content/xbl/src/nsXBLPrototypeHandler.cpp +++ b/mozilla/content/xbl/src/nsXBLPrototypeHandler.cpp @@ -161,12 +161,6 @@ nsXBLPrototypeHandler::~nsXBLPrototypeHandler() delete mNextHandler; } -void -nsXBLPrototypeHandler::Traverse(nsCycleCollectionTraversalCallback &cb) const -{ - cb.NoteXPCOMChild(mGlobalForCachedHandler); -} - void nsXBLPrototypeHandler::Trace(TraceCallback aCallback, void *aClosure) const { @@ -375,12 +369,16 @@ nsXBLPrototypeHandler::EnsureEventHandler(nsIScriptGlobalObject* aGlobal, nsScriptObjectHolder &aHandler) { // Check to see if we've already compiled this - if (mCachedHandler && mGlobalForCachedHandler == aGlobal) { - aHandler.set(mCachedHandler); - if (!aHandler) - return NS_ERROR_FAILURE; - - return NS_OK; + if (mCachedHandler) { + nsCOMPtr cachedGlobal = + do_QueryReferent(mGlobalForCachedHandler); + if (cachedGlobal == aGlobal) { + aHandler.set(mCachedHandler); + if (!aHandler) + return NS_ERROR_FAILURE; + + return NS_OK; + } } // Ensure that we have something to compile @@ -401,7 +399,7 @@ nsXBLPrototypeHandler::EnsureEventHandler(nsIScriptGlobalObject* aGlobal, NS_ENSURE_SUCCESS(rv, rv); mCachedHandler = aHandler; - mGlobalForCachedHandler = aGlobal; + mGlobalForCachedHandler = do_GetWeakReference(aGlobal); return NS_OK; } diff --git a/mozilla/content/xbl/src/nsXBLPrototypeHandler.h b/mozilla/content/xbl/src/nsXBLPrototypeHandler.h index ff664edb00b..3afa872abcc 100644 --- a/mozilla/content/xbl/src/nsXBLPrototypeHandler.h +++ b/mozilla/content/xbl/src/nsXBLPrototypeHandler.h @@ -153,7 +153,6 @@ public: return (mType & NS_HANDLER_ALLOW_UNTRUSTED) != 0; } - void Traverse(nsCycleCollectionTraversalCallback &cb) const; void Trace(TraceCallback aCallback, void *aClosure) const; void Unlink(); @@ -233,7 +232,7 @@ protected: // cache a handler to avoid compiling each time void *mCachedHandler; - nsCOMPtr mGlobalForCachedHandler; + nsWeakPtr mGlobalForCachedHandler; // Prototype handlers are chained. We own the next handler in the chain. nsXBLPrototypeHandler* mNextHandler;