From e5d3f5db5251eefb5c0f720597db29c5c977dccc Mon Sep 17 00:00:00 2001 From: "peterv%propagandism.org" Date: Mon, 19 Mar 2007 09:19:16 +0000 Subject: [PATCH] Fix for bug 373035 (Make content/dom code get nsDOMClassInfo without going through nsIDOMScriptObjectFactory). r/sr=jst. --- content/base/public/nsContentUtils.h | 9 +-------- content/base/src/nsContentUtils.cpp | 9 --------- content/html/content/src/nsGenericHTMLElement.h | 5 ++--- content/xml/content/src/nsXMLElement.cpp | 2 +- content/xtf/src/nsXTFElementWrapper.cpp | 7 +++---- content/xul/content/src/nsXULElement.cpp | 2 +- dom/public/nsDOMClassInfoID.h | 16 ++++++++++++++++ dom/src/base/nsDOMClassInfo.cpp | 8 ++++---- dom/src/base/nsDOMClassInfo.h | 17 ++--------------- dom/src/base/nsDOMScriptObjectFactory.cpp | 2 +- 10 files changed, 31 insertions(+), 46 deletions(-) diff --git a/content/base/public/nsContentUtils.h b/content/base/public/nsContentUtils.h index 0a306e867b83..11ccb447b55d 100644 --- a/content/base/public/nsContentUtils.h +++ b/content/base/public/nsContentUtils.h @@ -1110,14 +1110,7 @@ private: (ptr, result) #define NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(_class) \ - if (aIID.Equals(NS_GET_IID(nsIClassInfo))) { \ - foundInterface = \ - nsContentUtils::GetClassInfoInstance(eDOMClassInfo_##_class##_id); \ - if (!foundInterface) { \ - *aInstancePtr = nsnull; \ - return NS_ERROR_OUT_OF_MEMORY; \ - } \ - } else + NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(_class) #define NS_INTERFACE_MAP_ENTRY_TEAROFF(_interface, _allocator) \ if (aIID.Equals(NS_GET_IID(_interface))) { \ diff --git a/content/base/src/nsContentUtils.cpp b/content/base/src/nsContentUtils.cpp index 1a612c1ed876..85511b0718ae 100644 --- a/content/base/src/nsContentUtils.cpp +++ b/content/base/src/nsContentUtils.cpp @@ -588,15 +588,6 @@ nsContentUtils::Shutdown() } } -// static -nsISupports * -nsContentUtils::GetClassInfoInstance(nsDOMClassInfoID aID) -{ - nsIDOMScriptObjectFactory *factory = GetDOMScriptObjectFactory(); - - return factory ? factory->GetClassInfoInstance(aID) : nsnull; -} - /** * Checks whether two nodes come from the same origin. aTrustedNode is * considered 'safe' in that a user can operate on it and that it isn't diff --git a/content/html/content/src/nsGenericHTMLElement.h b/content/html/content/src/nsGenericHTMLElement.h index 82d14ff0f6d5..1187eb028ad2 100644 --- a/content/html/content/src/nsGenericHTMLElement.h +++ b/content/html/content/src/nsGenericHTMLElement.h @@ -1101,10 +1101,9 @@ NS_NewHTML##_elementName##Element(nsINodeInfo *aNodeInfo, PRBool aFromParser)\ #define NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO_IF_TAG(_class, _tag) \ - if (mNodeInfo->Equals(nsGkAtoms::_tag) && \ + if (mNodeInfo->Equals(nsGkAtoms::_tag) && \ aIID.Equals(NS_GET_IID(nsIClassInfo))) { \ - foundInterface = \ - nsContentUtils::GetClassInfoInstance(eDOMClassInfo_##_class##_id); \ + foundInterface = NS_GetDOMClassInfoInstance(eDOMClassInfo_##_class##_id); \ if (!foundInterface) { \ *aInstancePtr = nsnull; \ return NS_ERROR_OUT_OF_MEMORY; \ diff --git a/content/xml/content/src/nsXMLElement.cpp b/content/xml/content/src/nsXMLElement.cpp index f62e2522eeaf..9e08d1b546fa 100644 --- a/content/xml/content/src/nsXMLElement.cpp +++ b/content/xml/content/src/nsXMLElement.cpp @@ -82,7 +82,7 @@ nsXMLElement::QueryInterface(REFNSIID aIID, void** aInstancePtr) } else if (aIID.Equals(NS_GET_IID(nsIDOMElement))) { inst = NS_STATIC_CAST(nsIDOMElement *, this); } else if (aIID.Equals(NS_GET_IID(nsIClassInfo))) { - inst = nsContentUtils::GetClassInfoInstance(eDOMClassInfo_Element_id); + inst = NS_GetDOMClassInfoInstance(eDOMClassInfo_Element_id); NS_ENSURE_TRUE(inst, NS_ERROR_OUT_OF_MEMORY); } else { return PostQueryInterface(aIID, aInstancePtr); diff --git a/content/xtf/src/nsXTFElementWrapper.cpp b/content/xtf/src/nsXTFElementWrapper.cpp index 9e27f32e745d..2e568fff8084 100644 --- a/content/xtf/src/nsXTFElementWrapper.cpp +++ b/content/xtf/src/nsXTFElementWrapper.cpp @@ -654,9 +654,8 @@ nsXTFElementWrapper::GetInterfaces(PRUint32* aCount, nsIID*** aArray) PRUint32 xtfCount = 0; nsIID** xtfArray = nsnull; - nsCOMPtr ci = - nsContentUtils::GetClassInfoInstance(eDOMClassInfo_Element_id); - nsCOMPtr baseCi = do_QueryInterface(ci); + nsCOMPtr baseCi = + NS_GetDOMClassInfoInstance(eDOMClassInfo_Element_id); if (baseCi) { baseCi->GetInterfaces(&baseCount, &baseArray); } @@ -715,7 +714,7 @@ nsXTFElementWrapper::GetHelperForLanguage(PRUint32 language, { *aHelper = nsnull; nsCOMPtr ci = - do_QueryInterface(nsContentUtils::GetClassInfoInstance(eDOMClassInfo_Element_id)); + NS_GetDOMClassInfoInstance(eDOMClassInfo_Element_id); return ci ? ci->GetHelperForLanguage(language, aHelper) : NS_ERROR_NOT_AVAILABLE; } diff --git a/content/xul/content/src/nsXULElement.cpp b/content/xul/content/src/nsXULElement.cpp index 01cbe077947b..24187206e6fe 100644 --- a/content/xul/content/src/nsXULElement.cpp +++ b/content/xul/content/src/nsXULElement.cpp @@ -462,7 +462,7 @@ nsXULElement::QueryInterface(REFNSIID aIID, void** aInstancePtr) new nsXULElementTearoff(this)); NS_ENSURE_TRUE(inst, NS_ERROR_OUT_OF_MEMORY); } else if (aIID.Equals(NS_GET_IID(nsIClassInfo))) { - inst = nsContentUtils::GetClassInfoInstance(eDOMClassInfo_XULElement_id); + inst = NS_GetDOMClassInfoInstance(eDOMClassInfo_XULElement_id); NS_ENSURE_TRUE(inst, NS_ERROR_OUT_OF_MEMORY); } else { return PostQueryInterface(aIID, aInstancePtr); diff --git a/dom/public/nsDOMClassInfoID.h b/dom/public/nsDOMClassInfoID.h index 6980c061f0eb..4be95f420f8c 100644 --- a/dom/public/nsDOMClassInfoID.h +++ b/dom/public/nsDOMClassInfoID.h @@ -395,4 +395,20 @@ enum nsDOMClassInfoID { eDOMClassInfoIDCount }; +/** + * nsIClassInfo helper macros + */ + +extern nsIClassInfo* +NS_GetDOMClassInfoInstance(nsDOMClassInfoID aID); + +#define NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(_class) \ + if (aIID.Equals(NS_GET_IID(nsIClassInfo))) { \ + foundInterface = NS_GetDOMClassInfoInstance(eDOMClassInfo_##_class##_id); \ + if (!foundInterface) { \ + *aInstancePtr = nsnull; \ + return NS_ERROR_OUT_OF_MEMORY; \ + } \ + } else + #endif // nsDOMClassInfoID_h__ diff --git a/dom/src/base/nsDOMClassInfo.cpp b/dom/src/base/nsDOMClassInfo.cpp index 4276d35eb058..281ae5cca2ab 100644 --- a/dom/src/base/nsDOMClassInfo.cpp +++ b/dom/src/base/nsDOMClassInfo.cpp @@ -3720,7 +3720,7 @@ nsDOMClassInfo::InnerObject(nsIXPConnectWrappedNative *wrapper, JSContext * cx, // static nsIClassInfo * -nsDOMClassInfo::GetClassInfoInstance(nsDOMClassInfoID aID) +NS_GetDOMClassInfoInstance(nsDOMClassInfoID aID) { if (aID >= eDOMClassInfoIDCount) { NS_ERROR("Bad ID!"); @@ -3728,8 +3728,8 @@ nsDOMClassInfo::GetClassInfoInstance(nsDOMClassInfoID aID) return nsnull; } - if (!sIsInitialized) { - nsresult rv = Init(); + if (!nsDOMClassInfo::sIsInitialized) { + nsresult rv = nsDOMClassInfo::Init(); NS_ENSURE_SUCCESS(rv, nsnull); } @@ -5324,7 +5324,7 @@ nsWindowSH::GlobalResolve(nsGlobalWindow *aWin, JSContext *cx, nsDOMClassInfoID ci_id = (nsDOMClassInfoID)id; - nsCOMPtr ci(GetClassInfoInstance(ci_id)); + nsCOMPtr ci(NS_GetDOMClassInfoInstance(ci_id)); NS_ENSURE_TRUE(ci, NS_ERROR_UNEXPECTED); nsCOMPtr proto_holder; diff --git a/dom/src/base/nsDOMClassInfo.h b/dom/src/base/nsDOMClassInfo.h index 1c67d662d8e5..8d6d74986bf8 100644 --- a/dom/src/base/nsDOMClassInfo.h +++ b/dom/src/base/nsDOMClassInfo.h @@ -119,7 +119,6 @@ public: // GetClassInfoA so I can't, those $%#@^! bastards!!! What gives // them the right to do that? - static nsIClassInfo* GetClassInfoInstance(nsDOMClassInfoID aID); static nsIClassInfo* GetClassInfoInstance(nsDOMClassInfoData* aData); static void ShutDown(); @@ -176,6 +175,8 @@ public: static nsresult PreserveNodeWrapper(nsIXPConnectWrappedNative *aWrapper); protected: + friend nsIClassInfo* NS_GetDOMClassInfoInstance(nsDOMClassInfoID aID); + const nsDOMClassInfoData* mData; static nsresult Init(); @@ -1581,18 +1582,4 @@ public: void InvalidateContextAndWrapperCache(); -/** - * nsIClassInfo helper macros - */ - -#define NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(_class) \ - if (aIID.Equals(NS_GET_IID(nsIClassInfo))) { \ - foundInterface = \ - nsDOMClassInfo::GetClassInfoInstance(eDOMClassInfo_##_class##_id); \ - if (!foundInterface) { \ - *aInstancePtr = nsnull; \ - return NS_ERROR_OUT_OF_MEMORY; \ - } \ - } else - #endif /* nsDOMClassInfo_h___ */ diff --git a/dom/src/base/nsDOMScriptObjectFactory.cpp b/dom/src/base/nsDOMScriptObjectFactory.cpp index 86144c50fc34..df3958a7e02c 100644 --- a/dom/src/base/nsDOMScriptObjectFactory.cpp +++ b/dom/src/base/nsDOMScriptObjectFactory.cpp @@ -220,7 +220,7 @@ nsDOMScriptObjectFactory::NewScriptGlobalObject(PRBool aIsChrome, NS_IMETHODIMP_(nsISupports *) nsDOMScriptObjectFactory::GetClassInfoInstance(nsDOMClassInfoID aID) { - return nsDOMClassInfo::GetClassInfoInstance(aID); + return NS_GetDOMClassInfoInstance(aID); } NS_IMETHODIMP_(nsISupports *)