зеркало из https://github.com/mozilla/gecko-dev.git
Bug 720580 - Make JSID class initialization happen on demand. r=mrbkap
This commit is contained in:
Родитель
90e916fe1a
Коммит
6fa1a307cf
|
@ -260,10 +260,22 @@ NS_IMPL_THREADSAFE_RELEASE(SharedScriptableHelperForJSIID)
|
||||||
#include "xpc_map_end.h" /* This will #undef the above */
|
#include "xpc_map_end.h" /* This will #undef the above */
|
||||||
|
|
||||||
static nsIXPCScriptable* gSharedScriptableHelperForJSIID;
|
static nsIXPCScriptable* gSharedScriptableHelperForJSIID;
|
||||||
|
static bool gClassObjectsWereInited = false;
|
||||||
|
|
||||||
|
static void EnsureClassObjectsInitialized()
|
||||||
|
{
|
||||||
|
if (!gClassObjectsWereInited) {
|
||||||
|
gSharedScriptableHelperForJSIID = new SharedScriptableHelperForJSIID();
|
||||||
|
NS_ADDREF(gSharedScriptableHelperForJSIID);
|
||||||
|
|
||||||
|
gClassObjectsWereInited = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
NS_METHOD GetSharedScriptableHelperForJSIID(PRUint32 language,
|
NS_METHOD GetSharedScriptableHelperForJSIID(PRUint32 language,
|
||||||
nsISupports **helper)
|
nsISupports **helper)
|
||||||
{
|
{
|
||||||
|
EnsureClassObjectsInitialized();
|
||||||
if (language == nsIProgrammingLanguage::JAVASCRIPT) {
|
if (language == nsIProgrammingLanguage::JAVASCRIPT) {
|
||||||
NS_IF_ADDREF(gSharedScriptableHelperForJSIID);
|
NS_IF_ADDREF(gSharedScriptableHelperForJSIID);
|
||||||
*helper = gSharedScriptableHelperForJSIID;
|
*helper = gSharedScriptableHelperForJSIID;
|
||||||
|
@ -274,8 +286,6 @@ NS_METHOD GetSharedScriptableHelperForJSIID(PRUint32 language,
|
||||||
|
|
||||||
/******************************************************/
|
/******************************************************/
|
||||||
|
|
||||||
static JSBool gClassObjectsWereInited = false;
|
|
||||||
|
|
||||||
#define NULL_CID \
|
#define NULL_CID \
|
||||||
{ 0x00000000, 0x0000, 0x0000, \
|
{ 0x00000000, 0x0000, 0x0000, \
|
||||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }
|
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }
|
||||||
|
@ -287,23 +297,16 @@ NS_IMPL_CLASSINFO(nsJSIID, GetSharedScriptableHelperForJSIID,
|
||||||
NS_DECL_CI_INTERFACE_GETTER(nsJSCID)
|
NS_DECL_CI_INTERFACE_GETTER(nsJSCID)
|
||||||
NS_IMPL_CLASSINFO(nsJSCID, NULL, nsIClassInfo::THREADSAFE, NULL_CID)
|
NS_IMPL_CLASSINFO(nsJSCID, NULL, nsIClassInfo::THREADSAFE, NULL_CID)
|
||||||
|
|
||||||
void xpc_InitJSxIDClassObjects()
|
|
||||||
{
|
|
||||||
if (!gClassObjectsWereInited) {
|
|
||||||
gSharedScriptableHelperForJSIID = new SharedScriptableHelperForJSIID();
|
|
||||||
NS_ADDREF(gSharedScriptableHelperForJSIID);
|
|
||||||
}
|
|
||||||
gClassObjectsWereInited = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void xpc_DestroyJSxIDClassObjects()
|
void xpc_DestroyJSxIDClassObjects()
|
||||||
{
|
{
|
||||||
|
if (gClassObjectsWereInited) {
|
||||||
NS_IF_RELEASE(NS_CLASSINFO_NAME(nsJSIID));
|
NS_IF_RELEASE(NS_CLASSINFO_NAME(nsJSIID));
|
||||||
NS_IF_RELEASE(NS_CLASSINFO_NAME(nsJSCID));
|
NS_IF_RELEASE(NS_CLASSINFO_NAME(nsJSCID));
|
||||||
NS_IF_RELEASE(gSharedScriptableHelperForJSIID);
|
NS_IF_RELEASE(gSharedScriptableHelperForJSIID);
|
||||||
|
|
||||||
gClassObjectsWereInited = false;
|
gClassObjectsWereInited = false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -1082,8 +1082,6 @@ nsXPConnect::InitClasses(JSContext * aJSContext, JSObject * aGlobalJSObj)
|
||||||
if (!ac.enter(ccx, aGlobalJSObj))
|
if (!ac.enter(ccx, aGlobalJSObj))
|
||||||
return UnexpectedFailure(NS_ERROR_FAILURE);
|
return UnexpectedFailure(NS_ERROR_FAILURE);
|
||||||
|
|
||||||
xpc_InitJSxIDClassObjects();
|
|
||||||
|
|
||||||
XPCWrappedNativeScope* scope =
|
XPCWrappedNativeScope* scope =
|
||||||
XPCWrappedNativeScope::GetNewOrUsed(ccx, aGlobalJSObj);
|
XPCWrappedNativeScope::GetNewOrUsed(ccx, aGlobalJSObj);
|
||||||
|
|
||||||
|
|
|
@ -3493,10 +3493,10 @@ private:
|
||||||
* member (as a hidden implementaion detail) to which they delegate many calls.
|
* member (as a hidden implementaion detail) to which they delegate many calls.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern void xpc_InitJSxIDClassObjects();
|
// Initialization is done on demand, and calling the destructor below is always
|
||||||
|
// safe.
|
||||||
extern void xpc_DestroyJSxIDClassObjects();
|
extern void xpc_DestroyJSxIDClassObjects();
|
||||||
|
|
||||||
|
|
||||||
class nsJSID : public nsIJSID
|
class nsJSID : public nsIJSID
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
Загрузка…
Ссылка в новой задаче