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:
michaelp%netscape.com
1998-09-15 03:46:05 +00:00
parent 2bb9a8a545
commit 6adb1c959c
3 changed files with 298 additions and 78 deletions

View File

@@ -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;