mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-11 12:25:53 +00:00
Bug 780146 - Part c: Don't define constructors by contract ID; r=jst
This commit is contained in:
parent
9875b35b00
commit
4b7a38938e
@ -1707,24 +1707,30 @@ struct nsContractIDMapData
|
||||
const char *mContractID;
|
||||
};
|
||||
|
||||
#define NS_DEFINE_CONSTRUCTOR_DATA(_class, _contract_id) \
|
||||
{ eDOMClassInfo_##_class##_id, _contract_id },
|
||||
#define NS_DEFINE_CONTRACT_CTOR(_class, _contract_id) \
|
||||
nsresult \
|
||||
_class##Ctor(nsISupports** aInstancePtrResult) \
|
||||
{ \
|
||||
nsresult rv = NS_OK; \
|
||||
nsCOMPtr<nsISupports> native = do_CreateInstance(_contract_id, &rv); \
|
||||
native.forget(aInstancePtrResult); \
|
||||
return rv; \
|
||||
}
|
||||
|
||||
static const nsContractIDMapData kConstructorMap[] =
|
||||
{
|
||||
NS_DEFINE_CONSTRUCTOR_DATA(DOMParser, NS_DOMPARSER_CONTRACTID)
|
||||
NS_DEFINE_CONSTRUCTOR_DATA(FileReader, NS_FILEREADER_CONTRACTID)
|
||||
NS_DEFINE_CONSTRUCTOR_DATA(ArchiveReader, NS_ARCHIVEREADER_CONTRACTID)
|
||||
NS_DEFINE_CONSTRUCTOR_DATA(FormData, NS_FORMDATA_CONTRACTID)
|
||||
NS_DEFINE_CONSTRUCTOR_DATA(XMLSerializer, NS_XMLSERIALIZER_CONTRACTID)
|
||||
NS_DEFINE_CONSTRUCTOR_DATA(WebSocket, NS_WEBSOCKET_CONTRACTID)
|
||||
NS_DEFINE_CONSTRUCTOR_DATA(XPathEvaluator, NS_XPATH_EVALUATOR_CONTRACTID)
|
||||
NS_DEFINE_CONSTRUCTOR_DATA(XSLTProcessor,
|
||||
"@mozilla.org/document-transformer;1?type=xslt")
|
||||
NS_DEFINE_CONSTRUCTOR_DATA(EventSource, NS_EVENTSOURCE_CONTRACTID)
|
||||
NS_DEFINE_CONSTRUCTOR_DATA(MutationObserver, NS_DOMMUTATIONOBSERVER_CONTRACTID)
|
||||
NS_DEFINE_CONSTRUCTOR_DATA(MozActivity, NS_DOMACTIVITY_CONTRACTID)
|
||||
};
|
||||
NS_DEFINE_CONTRACT_CTOR(DOMParser, NS_DOMPARSER_CONTRACTID)
|
||||
NS_DEFINE_CONTRACT_CTOR(FileReader, NS_FILEREADER_CONTRACTID)
|
||||
NS_DEFINE_CONTRACT_CTOR(ArchiveReader, NS_ARCHIVEREADER_CONTRACTID)
|
||||
NS_DEFINE_CONTRACT_CTOR(FormData, NS_FORMDATA_CONTRACTID)
|
||||
NS_DEFINE_CONTRACT_CTOR(XMLSerializer, NS_XMLSERIALIZER_CONTRACTID)
|
||||
NS_DEFINE_CONTRACT_CTOR(WebSocket, NS_WEBSOCKET_CONTRACTID)
|
||||
NS_DEFINE_CONTRACT_CTOR(XPathEvaluator, NS_XPATH_EVALUATOR_CONTRACTID)
|
||||
NS_DEFINE_CONTRACT_CTOR(XSLTProcessor,
|
||||
"@mozilla.org/document-transformer;1?type=xslt")
|
||||
NS_DEFINE_CONTRACT_CTOR(EventSource, NS_EVENTSOURCE_CONTRACTID)
|
||||
NS_DEFINE_CONTRACT_CTOR(MutationObserver, NS_DOMMUTATIONOBSERVER_CONTRACTID)
|
||||
NS_DEFINE_CONTRACT_CTOR(MozActivity, NS_DOMACTIVITY_CONTRACTID)
|
||||
|
||||
#undef NS_DEFINE_CONTRACT_CTOR
|
||||
|
||||
#define NS_DEFINE_EVENT_CTOR(_class) \
|
||||
nsresult \
|
||||
@ -1787,6 +1793,17 @@ static const nsConstructorFuncMapData kConstructorFuncMap[] =
|
||||
#include "GeneratedEvents.h"
|
||||
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(MozSmsFilter, sms::SmsFilter::NewSmsFilter)
|
||||
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(XMLHttpRequest, NS_XMLHttpRequestCtor)
|
||||
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(DOMParser, DOMParserCtor)
|
||||
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(FileReader, FileReaderCtor)
|
||||
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(ArchiveReader, ArchiveReaderCtor)
|
||||
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(FormData, FormDataCtor)
|
||||
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(XMLSerializer, XMLSerializerCtor)
|
||||
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(WebSocket, WebSocketCtor)
|
||||
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(XPathEvaluator, XPathEvaluatorCtor)
|
||||
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(XSLTProcessor, XSLTProcessorCtor)
|
||||
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(EventSource, EventSourceCtor)
|
||||
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(MutationObserver, MutationObserverCtor)
|
||||
NS_DEFINE_CONSTRUCTOR_FUNC_DATA(MozActivity, MozActivityCtor)
|
||||
};
|
||||
|
||||
nsIXPConnect *nsDOMClassInfo::sXPConnect = nullptr;
|
||||
@ -5625,19 +5642,6 @@ nsWindowSH::Enumerate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
static const char*
|
||||
FindConstructorContractID(const nsDOMClassInfoData *aDOMClassInfoData)
|
||||
{
|
||||
PRUint32 i;
|
||||
for (i = 0; i < ArrayLength(kConstructorMap); ++i) {
|
||||
if (&sClassInfoData[kConstructorMap[i].mDOMClassInfoID] ==
|
||||
aDOMClassInfoData) {
|
||||
return kConstructorMap[i].mContractID;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static nsDOMConstructorFunc
|
||||
FindConstructorFunc(const nsDOMClassInfoData *aDOMClassInfoData)
|
||||
{
|
||||
@ -5660,18 +5664,11 @@ BaseStubConstructor(nsIWeakReference* aWeakOwner,
|
||||
if (name_struct->mType == nsGlobalNameStruct::eTypeClassConstructor) {
|
||||
const nsDOMClassInfoData* ci_data =
|
||||
&sClassInfoData[name_struct->mDOMClassInfoID];
|
||||
const char *contractid = FindConstructorContractID(ci_data);
|
||||
if (contractid) {
|
||||
native = do_CreateInstance(contractid, &rv);
|
||||
}
|
||||
else {
|
||||
nsDOMConstructorFunc func = FindConstructorFunc(ci_data);
|
||||
if (func) {
|
||||
rv = func(getter_AddRefs(native));
|
||||
}
|
||||
else {
|
||||
rv = NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
nsDOMConstructorFunc func = FindConstructorFunc(ci_data);
|
||||
if (func) {
|
||||
rv = func(getter_AddRefs(native));
|
||||
} else {
|
||||
rv = NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
} else if (name_struct->mType == nsGlobalNameStruct::eTypeExternalConstructor) {
|
||||
native = do_CreateInstance(name_struct->mCID, &rv);
|
||||
@ -6084,7 +6081,7 @@ private:
|
||||
return data->mConstructorCID != nullptr;
|
||||
}
|
||||
|
||||
return FindConstructorContractID(aData) || FindConstructorFunc(aData);
|
||||
return FindConstructorFunc(aData);
|
||||
}
|
||||
static bool IsConstructable(const nsGlobalNameStruct *aNameStruct)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user