fixes for new plugin world.
git-svn-id: svn://10.0.0.236/trunk@10034 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -226,7 +226,8 @@ public:
|
||||
|
||||
static nsEventStatus PR_CALLBACK HandleEvent(nsGUIEvent *aEvent);
|
||||
|
||||
static nsresult CreatePluginHost(void);
|
||||
nsresult CreatePluginHost(PRBool aAllowPlugins);
|
||||
nsresult DestroyPluginHost(void);
|
||||
|
||||
protected:
|
||||
nsIScriptGlobalObject *mScriptGlobal;
|
||||
@@ -262,7 +263,7 @@ protected:
|
||||
|
||||
static nsIPluginHost *mPluginHost;
|
||||
static nsIPluginManager *mPluginManager;
|
||||
static PRBool mPluginInited;
|
||||
static PRUint32 mPluginInitCnt;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
@@ -298,31 +299,54 @@ static NS_DEFINE_IID(kILinkHandlerIID, NS_ILINKHANDLER_IID);
|
||||
|
||||
nsIPluginHost *nsWebShell::mPluginHost = nsnull;
|
||||
nsIPluginManager *nsWebShell::mPluginManager = nsnull;
|
||||
PRBool nsWebShell::mPluginInited = PR_FALSE;
|
||||
PRUint32 nsWebShell::mPluginInitCnt = 0;
|
||||
|
||||
nsresult nsWebShell::CreatePluginHost(void)
|
||||
nsresult nsWebShell::CreatePluginHost(PRBool aAllowPlugins)
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
if (nsnull == mPluginManager)
|
||||
if ((PR_TRUE == aAllowPlugins) && (0 == mPluginInitCnt))
|
||||
{
|
||||
rv = nsRepository::CreateInstance(kCPluginHostCID, nsnull,
|
||||
kIPluginManagerIID,
|
||||
(void**)&mPluginManager);
|
||||
if (NS_OK == rv)
|
||||
if (nsnull == mPluginManager)
|
||||
{
|
||||
if (NS_OK == mPluginManager->QueryInterface(kIPluginHostIID,
|
||||
(void **)&mPluginHost))
|
||||
rv = nsRepository::CreateInstance(kCPluginHostCID, nsnull,
|
||||
kIPluginManagerIID,
|
||||
(void**)&mPluginManager);
|
||||
if (NS_OK == rv)
|
||||
{
|
||||
mPluginHost->Init();
|
||||
mPluginHost->LoadPlugins();
|
||||
if (NS_OK == mPluginManager->QueryInterface(kIPluginHostIID,
|
||||
(void **)&mPluginHost))
|
||||
{
|
||||
mPluginHost->Init();
|
||||
mPluginHost->LoadPlugins();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mPluginInitCnt++;
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsresult nsWebShell::DestroyPluginHost(void)
|
||||
{
|
||||
mPluginInitCnt--;
|
||||
|
||||
NS_ASSERTION(!(mPluginInitCnt < 0), "underflow in plugin host destruction");
|
||||
|
||||
if (0 == mPluginInitCnt)
|
||||
{
|
||||
if (nsnull != mPluginHost)
|
||||
mPluginHost->Destroy();
|
||||
|
||||
NS_IF_RELEASE(mPluginManager);
|
||||
NS_IF_RELEASE(mPluginHost);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// Note: operator new zeros our memory
|
||||
@@ -374,6 +398,8 @@ nsWebShell::~nsWebShell()
|
||||
nsString* s = (nsString*) mHistory.ElementAt(i);
|
||||
delete s;
|
||||
}
|
||||
|
||||
DestroyPluginHost();
|
||||
}
|
||||
|
||||
void
|
||||
@@ -517,11 +543,7 @@ nsWebShell::Init(nsNativeWidget aNativeParent,
|
||||
//not the nsIWebShell interfaces. this is a hack. MMP
|
||||
nsRect aBounds(x,y,w,h);
|
||||
|
||||
if ((PR_TRUE == aAllowPlugins) && (PR_FALSE == mPluginInited))
|
||||
CreatePluginHost();
|
||||
|
||||
//never attempt to initialize plugins again...
|
||||
mPluginInited = PR_TRUE;
|
||||
CreatePluginHost(aAllowPlugins);
|
||||
|
||||
mScrollPref = aScrolling;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user