зеркало из 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 */
|
||||
|
||||
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,
|
||||
nsISupports **helper)
|
||||
{
|
||||
EnsureClassObjectsInitialized();
|
||||
if (language == nsIProgrammingLanguage::JAVASCRIPT) {
|
||||
NS_IF_ADDREF(gSharedScriptableHelperForJSIID);
|
||||
*helper = gSharedScriptableHelperForJSIID;
|
||||
|
@ -274,8 +286,6 @@ NS_METHOD GetSharedScriptableHelperForJSIID(PRUint32 language,
|
|||
|
||||
/******************************************************/
|
||||
|
||||
static JSBool gClassObjectsWereInited = false;
|
||||
|
||||
#define NULL_CID \
|
||||
{ 0x00000000, 0x0000, 0x0000, \
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }
|
||||
|
@ -287,23 +297,16 @@ NS_IMPL_CLASSINFO(nsJSIID, GetSharedScriptableHelperForJSIID,
|
|||
NS_DECL_CI_INTERFACE_GETTER(nsJSCID)
|
||||
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()
|
||||
{
|
||||
if (gClassObjectsWereInited) {
|
||||
NS_IF_RELEASE(NS_CLASSINFO_NAME(nsJSIID));
|
||||
NS_IF_RELEASE(NS_CLASSINFO_NAME(nsJSCID));
|
||||
NS_IF_RELEASE(gSharedScriptableHelperForJSIID);
|
||||
|
||||
gClassObjectsWereInited = false;
|
||||
}
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
|
|
|
@ -1082,8 +1082,6 @@ nsXPConnect::InitClasses(JSContext * aJSContext, JSObject * aGlobalJSObj)
|
|||
if (!ac.enter(ccx, aGlobalJSObj))
|
||||
return UnexpectedFailure(NS_ERROR_FAILURE);
|
||||
|
||||
xpc_InitJSxIDClassObjects();
|
||||
|
||||
XPCWrappedNativeScope* scope =
|
||||
XPCWrappedNativeScope::GetNewOrUsed(ccx, aGlobalJSObj);
|
||||
|
||||
|
|
|
@ -3493,10 +3493,10 @@ private:
|
|||
* 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();
|
||||
|
||||
|
||||
class nsJSID : public nsIJSID
|
||||
{
|
||||
public:
|
||||
|
|
Загрузка…
Ссылка в новой задаче