From 4abaf2e1226e22a0a8adfc9b24ebd066fe610096 Mon Sep 17 00:00:00 2001 From: "jst%mozilla.org" Date: Thu, 9 Aug 2007 22:30:30 +0000 Subject: [PATCH] Fixing bug 389911. Removing nsIScriptGlobalObject::Get/SetGlobalObjectOwner() as it's not needed any more. r+sr=peterv@propagandism.org git-svn-id: svn://10.0.0.236/trunk@231758 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/content/xbl/src/nsXBLDocumentInfo.cpp | 32 ++++------- mozilla/content/xbl/src/nsXBLDocumentInfo.h | 4 +- .../document/src/nsXULPrototypeDocument.cpp | 56 ++++++++----------- .../xul/document/src/nsXULPrototypeDocument.h | 6 +- mozilla/docshell/base/nsDocShell.cpp | 3 - mozilla/dom/public/nsIScriptGlobalObject.h | 23 +------- mozilla/dom/src/base/nsGlobalWindow.cpp | 17 ------ mozilla/dom/src/base/nsGlobalWindow.h | 3 - .../plugin/base/src/nsPluginHostImpl.cpp | 4 +- 9 files changed, 46 insertions(+), 102 deletions(-) diff --git a/mozilla/content/xbl/src/nsXBLDocumentInfo.cpp b/mozilla/content/xbl/src/nsXBLDocumentInfo.cpp index f3bbe1ee0f4..9fa254c1cc6 100644 --- a/mozilla/content/xbl/src/nsXBLDocumentInfo.cpp +++ b/mozilla/content/xbl/src/nsXBLDocumentInfo.cpp @@ -63,7 +63,7 @@ class nsXBLDocGlobalObject : public nsIScriptGlobalObject, public nsIScriptObjectPrincipal { public: - nsXBLDocGlobalObject(); + nsXBLDocGlobalObject(nsIScriptGlobalObjectOwner *aGlobalObjectOwner); // nsISupports interface NS_DECL_CYCLE_COLLECTING_ISUPPORTS @@ -73,8 +73,6 @@ public: virtual nsresult SetScriptContext(PRUint32 lang_id, nsIScriptContext *aContext); virtual nsIScriptContext *GetContext(); - virtual void SetGlobalObjectOwner(nsIScriptGlobalObjectOwner* aOwner); - virtual nsIScriptGlobalObjectOwner *GetGlobalObjectOwner(); virtual JSObject *GetGlobalJSObject(); virtual void OnFinalize(PRUint32 aLangID, void *aScriptGlobal); virtual void SetScriptsEnabled(PRBool aEnabled, PRBool aFireTimeouts); @@ -89,6 +87,8 @@ public: NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsXBLDocGlobalObject, nsIScriptGlobalObject) + void ClearGlobalObjectOwner(); + protected: virtual ~nsXBLDocGlobalObject(); @@ -195,9 +195,9 @@ JSClass nsXBLDocGlobalObject::gSharedGlobalClass = { // nsXBLDocGlobalObject // -nsXBLDocGlobalObject::nsXBLDocGlobalObject() +nsXBLDocGlobalObject::nsXBLDocGlobalObject(nsIScriptGlobalObjectOwner *aGlobalObjectOwner) : mJSObject(nsnull), - mGlobalObjectOwner(nsnull) + mGlobalObjectOwner(aGlobalObjectOwner) // weak reference { } @@ -352,15 +352,9 @@ nsXBLDocGlobalObject::GetContext() } void -nsXBLDocGlobalObject::SetGlobalObjectOwner(nsIScriptGlobalObjectOwner* aOwner) +nsXBLDocGlobalObject::ClearGlobalObjectOwner() { - mGlobalObjectOwner = aOwner; // weak reference -} - -nsIScriptGlobalObjectOwner * -nsXBLDocGlobalObject::GetGlobalObjectOwner() -{ - return mGlobalObjectOwner; + mGlobalObjectOwner = nsnull; } JSObject * @@ -458,7 +452,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsXBLDocumentInfo) if (tmp->mBindingTable) { tmp->mBindingTable->Enumerate(TraverseProtos, &cb); } - NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mGlobalObject) + cb.NoteXPCOMChild(static_cast(tmp->mGlobalObject)); NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXBLDocumentInfo) @@ -498,7 +492,7 @@ nsXBLDocumentInfo::~nsXBLDocumentInfo() if (mGlobalObject) { // remove circular reference mGlobalObject->SetScriptContext(nsIProgrammingLanguage::JAVASCRIPT, nsnull); - mGlobalObject->SetGlobalObjectOwner(nsnull); // just in case + mGlobalObject->ClearGlobalObjectOwner(); // just in case } delete mBindingTable; } @@ -577,13 +571,11 @@ nsIScriptGlobalObject* nsXBLDocumentInfo::GetScriptGlobalObject() { if (!mGlobalObject) { - - mGlobalObject = new nsXBLDocGlobalObject(); - - if (!mGlobalObject) + nsXBLDocGlobalObject *global = new nsXBLDocGlobalObject(this); + if (!global) return nsnull; - mGlobalObject->SetGlobalObjectOwner(this); // does not refcount + mGlobalObject = global; } return mGlobalObject; diff --git a/mozilla/content/xbl/src/nsXBLDocumentInfo.h b/mozilla/content/xbl/src/nsXBLDocumentInfo.h index dba724780a0..1f65e7168d6 100644 --- a/mozilla/content/xbl/src/nsXBLDocumentInfo.h +++ b/mozilla/content/xbl/src/nsXBLDocumentInfo.h @@ -35,6 +35,7 @@ * ***** END LICENSE BLOCK ***** */ #include "nsCOMPtr.h" +#include "nsAutoPtr.h" #include "nsIXBLDocumentInfo.h" #include "nsIScriptGlobalObjectOwner.h" #include "nsWeakReference.h" @@ -43,6 +44,7 @@ class nsXBLPrototypeBinding; class nsObjectHashtable; +class nsXBLDocGlobalObject; class nsXBLDocumentInfo : public nsIXBLDocumentInfo, public nsIScriptGlobalObjectOwner, public nsSupportsWeakReference { @@ -82,5 +84,5 @@ private: // non-owning pointer to the first binding in the table nsXBLPrototypeBinding* mFirstBinding; - nsCOMPtr mGlobalObject; + nsRefPtr mGlobalObject; }; diff --git a/mozilla/content/xul/document/src/nsXULPrototypeDocument.cpp b/mozilla/content/xul/document/src/nsXULPrototypeDocument.cpp index 39da88de5ea..6bc0815018c 100644 --- a/mozilla/content/xul/document/src/nsXULPrototypeDocument.cpp +++ b/mozilla/content/xul/document/src/nsXULPrototypeDocument.cpp @@ -79,8 +79,6 @@ public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS // nsIScriptGlobalObject methods - virtual void SetGlobalObjectOwner(nsIScriptGlobalObjectOwner* aOwner); - virtual nsIScriptGlobalObjectOwner *GetGlobalObjectOwner(); virtual void OnFinalize(PRUint32 aLangID, void *aGlobal); virtual void SetScriptsEnabled(PRBool aEnabled, PRBool aFireTimeouts); virtual nsresult SetNewArguments(nsIArray *aArguments); @@ -97,6 +95,8 @@ public: NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsXULPDGlobalObject, nsIScriptGlobalObject) + void ClearGlobalObjectOwner(); + protected: virtual ~nsXULPDGlobalObject(); @@ -109,7 +109,7 @@ protected: }; nsIPrincipal* nsXULPrototypeDocument::gSystemPrincipal; -nsIScriptGlobalObject* nsXULPrototypeDocument::gSystemGlobal; +nsXULPDGlobalObject* nsXULPrototypeDocument::gSystemGlobal; PRUint32 nsXULPrototypeDocument::gRefCnt; @@ -155,7 +155,6 @@ JSClass nsXULPDGlobalObject::gSharedGlobalClass = { nsXULPrototypeDocument::nsXULPrototypeDocument() : mRoot(nsnull), - mGlobalObject(nsnull), mLoaded(PR_FALSE) { ++gRefCnt; @@ -175,7 +174,7 @@ nsXULPrototypeDocument::~nsXULPrototypeDocument() { if (mGlobalObject) { // cleaup cycles etc. - mGlobalObject->SetGlobalObjectOwner(nsnull); + mGlobalObject->ClearGlobalObjectOwner(); } PRUint32 count = mProcessingInstructions.Length(); @@ -198,13 +197,13 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_0(nsXULPrototypeDocument) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsXULPrototypeDocument) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NATIVE_MEMBER(mRoot, nsXULPrototypeElement) - NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mGlobalObject) + cb.NoteXPCOMChild(static_cast(tmp->mGlobalObject)); NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXULPrototypeDocument) - NS_INTERFACE_MAP_ENTRY(nsIScriptGlobalObjectOwner) - NS_INTERFACE_MAP_ENTRY(nsISerializable) - NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIScriptGlobalObjectOwner) + NS_INTERFACE_MAP_ENTRY(nsIScriptGlobalObjectOwner) + NS_INTERFACE_MAP_ENTRY(nsISerializable) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIScriptGlobalObjectOwner) NS_INTERFACE_MAP_END NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsXULPrototypeDocument, @@ -237,29 +236,27 @@ NS_NewXULPrototypeDocument(nsXULPrototypeDocument** aResult) // This method greatly reduces the number of nsXULPDGlobalObjects and their // nsIScriptContexts in apps that load many XUL documents via chrome: URLs. -nsresult -nsXULPrototypeDocument::NewXULPDGlobalObject(nsIScriptGlobalObject** aResult) +nsXULPDGlobalObject * +nsXULPrototypeDocument::NewXULPDGlobalObject() { // Now compare DocumentPrincipal() to gSystemPrincipal, in order to create // gSystemGlobal if the two pointers are equal. Thus, gSystemGlobal // implies gSystemPrincipal. - nsCOMPtr global; + nsXULPDGlobalObject *global; if (DocumentPrincipal() == gSystemPrincipal) { if (!gSystemGlobal) { gSystemGlobal = new nsXULPDGlobalObject(nsnull); if (! gSystemGlobal) - return NS_ERROR_OUT_OF_MEMORY; + return nsnull; NS_ADDREF(gSystemGlobal); } global = gSystemGlobal; } else { global = new nsXULPDGlobalObject(this); // does not refcount if (! global) - return NS_ERROR_OUT_OF_MEMORY; + return nsnull; } - *aResult = global; - NS_ADDREF(*aResult); - return NS_OK; + return global; } //---------------------------------------------------------------------- @@ -292,8 +289,9 @@ nsXULPrototypeDocument::Read(nsIObjectInputStream* aStream) // Better safe than sorry.... mNodeInfoManager->SetDocumentPrincipal(principal); + // nsIScriptGlobalObject mGlobalObject - NewXULPDGlobalObject(getter_AddRefs(mGlobalObject)); + mGlobalObject = NewXULPDGlobalObject(); if (! mGlobalObject) return NS_ERROR_OUT_OF_MEMORY; @@ -603,7 +601,7 @@ nsIScriptGlobalObject* nsXULPrototypeDocument::GetScriptGlobalObject() { if (!mGlobalObject) - NewXULPDGlobalObject(getter_AddRefs(mGlobalObject)); + mGlobalObject = NewXULPDGlobalObject(); return mGlobalObject; } @@ -759,25 +757,15 @@ nsXULPDGlobalObject::GetScriptGlobal(PRUint32 lang_id) void -nsXULPDGlobalObject::SetGlobalObjectOwner(nsIScriptGlobalObjectOwner* aOwner) +nsXULPDGlobalObject::ClearGlobalObjectOwner() { - if (!aOwner) { PRUint32 lang_ndx; NS_STID_FOR_INDEX(lang_ndx) { - if (mScriptContexts[lang_ndx]) { - mScriptContexts[lang_ndx]->FinalizeContext(); - mScriptContexts[lang_ndx] = nsnull; - } + if (mScriptContexts[lang_ndx]) { + mScriptContexts[lang_ndx]->FinalizeContext(); + mScriptContexts[lang_ndx] = nsnull; + } } - } else { - NS_NOTREACHED("You can only set an owner when constructing the object."); - } -} - -nsIScriptGlobalObjectOwner * -nsXULPDGlobalObject::GetGlobalObjectOwner() -{ - return mGlobalObjectOwner; } diff --git a/mozilla/content/xul/document/src/nsXULPrototypeDocument.h b/mozilla/content/xul/document/src/nsXULPrototypeDocument.h index 0e1fb593b65..dbfd50ff514 100644 --- a/mozilla/content/xul/document/src/nsXULPrototypeDocument.h +++ b/mozilla/content/xul/document/src/nsXULPrototypeDocument.h @@ -155,7 +155,7 @@ protected: nsTArray mProcessingInstructions; nsCOMArray mStyleSheetReferences; - nsCOMPtr mGlobalObject; + nsRefPtr mGlobalObject; PRPackedBool mLoaded; nsTArray< nsRefPtr > mPrototypeWaiters; @@ -169,10 +169,10 @@ protected: friend NS_IMETHODIMP NS_NewXULPrototypeDocument(nsXULPrototypeDocument** aResult); - nsresult NewXULPDGlobalObject(nsIScriptGlobalObject** aResult); + nsXULPDGlobalObject *NewXULPDGlobalObject(); static nsIPrincipal* gSystemPrincipal; - static nsIScriptGlobalObject* gSystemGlobal; + static nsXULPDGlobalObject* gSystemGlobal; static PRUint32 gRefCnt; friend class nsXULPDGlobalObject; diff --git a/mozilla/docshell/base/nsDocShell.cpp b/mozilla/docshell/base/nsDocShell.cpp index 962410a183a..198c69a45ef 100644 --- a/mozilla/docshell/base/nsDocShell.cpp +++ b/mozilla/docshell/base/nsDocShell.cpp @@ -3531,7 +3531,6 @@ nsDocShell::Destroy() nsCOMPtr win(do_QueryInterface(mScriptGlobal)); win->SetDocShell(nsnull); - mScriptGlobal->SetGlobalObjectOwner(nsnull); mScriptGlobal = nsnull; } @@ -8521,8 +8520,6 @@ nsDocShell::EnsureScriptEnvironment() nsCOMPtr win(do_QueryInterface(mScriptGlobal)); win->SetDocShell(static_cast(this)); - mScriptGlobal-> - SetGlobalObjectOwner(static_cast(this)); // Ensure the script object is set to run javascript - other languages // setup on demand. diff --git a/mozilla/dom/public/nsIScriptGlobalObject.h b/mozilla/dom/public/nsIScriptGlobalObject.h index ee1010993b3..ccf5e21ccd5 100644 --- a/mozilla/dom/public/nsIScriptGlobalObject.h +++ b/mozilla/dom/public/nsIScriptGlobalObject.h @@ -102,9 +102,9 @@ NS_HandleScriptError(nsIScriptGlobalObject *aScriptGlobal, #define NS_ISCRIPTGLOBALOBJECT_IID \ -{ /* {6E7EF978-47D0-47c9-9649-CDCDB1E4CCEC} */ \ - 0x6e7ef978, 0x47d0, 0x47c9, \ - { 0x96, 0x49, 0xcd, 0xcd, 0xb1, 0xe4, 0xcc, 0xec } } +{ /* {6afecd40-0b9a-4cfd-8c42-0f645cd91829} */ \ + 0x6afecd40, 0x0b9a, 0x4cfd, \ + { 0x8c, 0x42, 0x0f, 0x64, 0x5c, 0xd9, 0x18, 0x29 } } /** + * The global object which keeps a script context for each supported script @@ -116,23 +116,6 @@ class nsIScriptGlobalObject : public nsISupports public: NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISCRIPTGLOBALOBJECT_IID) - - /** - * Let the script global object know who its owner is. - * The script global object should not addref the owner. It - * will be told when the owner goes away. - * @return NS_OK if the method is successful - */ - virtual void SetGlobalObjectOwner(nsIScriptGlobalObjectOwner* aOwner) = 0; - - /** - * Get the owner of the script global object. The method - * addrefs the returned reference according to regular - * XPCOM rules, even though the internal reference itself - * is a "weak" reference. - */ - virtual nsIScriptGlobalObjectOwner *GetGlobalObjectOwner() = 0; - /** * Ensure that the script global object is initialized for working with the * specified script language ID. This will set up the nsIScriptContext diff --git a/mozilla/dom/src/base/nsGlobalWindow.cpp b/mozilla/dom/src/base/nsGlobalWindow.cpp index e52e1e9e1c9..2bbc9df7892 100644 --- a/mozilla/dom/src/base/nsGlobalWindow.cpp +++ b/mozilla/dom/src/base/nsGlobalWindow.cpp @@ -446,7 +446,6 @@ nsGlobalWindow::nsGlobalWindow(nsGlobalWindow *aOuterWindow) mFireOfflineStatusChangeEventOnThaw(PR_FALSE), mCreatingInnerWindow(PR_FALSE), mIsChrome(PR_FALSE), - mGlobalObjectOwner(nsnull), mTimeoutInsertionPoint(nsnull), mTimeoutPublicIdCounter(1), mTimeoutFiringDepth(0), @@ -1891,22 +1890,6 @@ nsGlobalWindow::SetOpenerWindow(nsIDOMWindowInternal* aOpener, #endif } -void -nsGlobalWindow::SetGlobalObjectOwner(nsIScriptGlobalObjectOwner* aOwner) -{ - FORWARD_TO_OUTER_VOID(SetGlobalObjectOwner, (aOwner)); - - mGlobalObjectOwner = aOwner; // Note this is supposed to be a weak ref. -} - -nsIScriptGlobalObjectOwner * -nsGlobalWindow::GetGlobalObjectOwner() -{ - FORWARD_TO_OUTER(GetGlobalObjectOwner, (), nsnull); - - return mGlobalObjectOwner; -} - nsresult nsGlobalWindow::PreHandleEvent(nsEventChainPreVisitor& aVisitor) { diff --git a/mozilla/dom/src/base/nsGlobalWindow.h b/mozilla/dom/src/base/nsGlobalWindow.h index ed4cda4d926..ceb98f62735 100644 --- a/mozilla/dom/src/base/nsGlobalWindow.h +++ b/mozilla/dom/src/base/nsGlobalWindow.h @@ -253,8 +253,6 @@ public: // for the context is created by the context's GetNativeGlobal() method. virtual nsresult SetScriptContext(PRUint32 lang, nsIScriptContext *aContext); - virtual void SetGlobalObjectOwner(nsIScriptGlobalObjectOwner* aOwner); - virtual nsIScriptGlobalObjectOwner *GetGlobalObjectOwner(); virtual void OnFinalize(PRUint32 aLangID, void *aScriptGlobal); virtual void SetScriptsEnabled(PRBool aEnabled, PRBool aFireTimeouts); virtual nsresult SetNewArguments(nsIArray *aArguments); @@ -676,7 +674,6 @@ protected: void * mScriptGlobals[NS_STID_ARRAY_UBOUND]; nsGlobalWindowObserver* mObserver; - nsIScriptGlobalObjectOwner* mGlobalObjectOwner; // Weak Reference nsCOMPtr mCrypto; nsCOMPtr mPkcs11; diff --git a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp index 2a825c325b8..08bb459b5e4 100644 --- a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp +++ b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp @@ -5941,7 +5941,9 @@ NS_IMETHODIMP nsPluginHostImpl::NewPluginURLStream(const nsString& aURL, if (global) { - callbacks = do_QueryInterface(global->GetGlobalObjectOwner()); + nsCOMPtr webNav = do_GetInterface(global); + + callbacks = do_QueryInterface(webNav); } }