From b9c9fafc5e3f7d2f9db1be0049e6221c95bca2d1 Mon Sep 17 00:00:00 2001 From: "amusil%netscape.com" Date: Fri, 4 Jun 1999 22:32:27 +0000 Subject: [PATCH] Bug fixes with plugin instance caching. We now keep track of a plugin instance's start/stop state. git-svn-id: svn://10.0.0.236/trunk@33817 18797224-902f-48f8-a5cc-f745e15eee43 --- .../modules/plugin/base/src/nsIPluginHost.h | 3 ++ .../plugin/base/src/nsPluginHostImpl.cpp | 36 ++++++++++++++++--- .../plugin/base/src/nsPluginHostImpl.h | 9 +++-- .../plugin/base/src/nsPluginInstancePeer.cpp | 17 +++++++++ .../plugin/base/src/nsPluginInstancePeer.h | 6 ++++ .../plugin/base/src/nsPluginsDirWin.cpp | 6 ++++ mozilla/modules/plugin/nglsrc/nsIPluginHost.h | 3 ++ .../plugin/nglsrc/nsPluginHostImpl.cpp | 36 ++++++++++++++++--- .../modules/plugin/nglsrc/nsPluginHostImpl.h | 9 +++-- .../plugin/nglsrc/nsPluginInstancePeer.cpp | 17 +++++++++ .../plugin/nglsrc/nsPluginInstancePeer.h | 6 ++++ .../modules/plugin/nglsrc/nsPluginsDirWin.cpp | 6 ++++ 12 files changed, 142 insertions(+), 12 deletions(-) diff --git a/mozilla/modules/plugin/base/src/nsIPluginHost.h b/mozilla/modules/plugin/base/src/nsIPluginHost.h index 867c426826c..de852f82a0f 100644 --- a/mozilla/modules/plugin/base/src/nsIPluginHost.h +++ b/mozilla/modules/plugin/base/src/nsIPluginHost.h @@ -71,6 +71,9 @@ public: NS_IMETHOD GetPlugins(PRUint32 aPluginCount, nsIDOMPlugin* aPluginArray[]) = 0; + + NS_IMETHOD + StopPluginInstance(nsIPluginInstance* aInstance) = 0; }; #endif // nsIPluginHost_h___ diff --git a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp index 5d81c36eba8..fea91519736 100644 --- a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp +++ b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp @@ -86,6 +86,7 @@ nsPluginTag::nsPluginTag() mLibrary = nsnull; mEntryPoint = nsnull; mFlags = NS_PLUGIN_FLAG_ENABLED; + mFileName = nsnull; } inline char* new_str(char* str) @@ -118,6 +119,7 @@ nsPluginTag::nsPluginTag(nsPluginTag* aPluginTag) mLibrary = nsnull; mEntryPoint = nsnull; mFlags = NS_PLUGIN_FLAG_ENABLED; + mFileName = new_str(aPluginTag->mFileName); } nsPluginTag::~nsPluginTag() @@ -168,6 +170,12 @@ nsPluginTag::~nsPluginTag() PR_UnloadLibrary(mLibrary); mLibrary = nsnull; } + + if(nsnull != mFileName) + { + delete [] mFileName; + mFileName = nsnull; + } } class nsPluginStreamInfo : public nsIPluginStreamInfo @@ -1470,10 +1478,9 @@ nsresult nsPluginHostImpl::FindStoppedPluginForURL(nsIURL* aURL, nsIPluginInstan for(i=0; iGetWindow(window); @@ -1487,6 +1494,8 @@ nsresult nsPluginHostImpl::FindStoppedPluginForURL(nsIURL* aURL, nsIPluginInstan instance->SetWindow(window); instance->Start(); + mActivePluginList[i].mStopped = PR_FALSE; + return NS_OK; } } @@ -1507,6 +1516,8 @@ void nsPluginHostImpl::AddInstanceToActiveList(nsIPluginInstance* aInstance, nsI mActivePluginList[mNumActivePlugins].mInstance = aInstance; aInstance->GetPeer(&(mActivePluginList[mNumActivePlugins].mPeer)); + mActivePluginList[mNumActivePlugins].mStopped = PR_FALSE; + ++mNumActivePlugins; } else @@ -1523,6 +1534,7 @@ void nsPluginHostImpl::AddInstanceToActiveList(nsIPluginInstance* aInstance, nsI mActivePluginList[mOldestActivePlugin].mURL = PL_strdup(url); mActivePluginList[mOldestActivePlugin].mInstance = aInstance; aInstance->GetPeer(&(mActivePluginList[mOldestActivePlugin].mPeer)); + mActivePluginList[mOldestActivePlugin].mStopped = PR_FALSE; ++mOldestActivePlugin; if(mOldestActivePlugin == MAX_ACTIVE_PLUGINS) @@ -1727,8 +1739,7 @@ public: NS_METHOD GetFilename(nsString& aFilename) { - // FIXME: need to keep the filename around. - aFilename = mPluginTag.mName; + aFilename = mPluginTag.mFileName; return NS_OK; } @@ -1970,6 +1981,23 @@ NS_IMETHODIMP nsPluginHostImpl::NewPluginURLStream(const nsString& aURL, return rv; } + +NS_IMETHODIMP +nsPluginHostImpl::StopPluginInstance(nsIPluginInstance* aInstance) +{ + PRUint32 i; + for(i=0; iGetCString(); + fileName = PL_strrchr(path, '\\'); + if(fileName) + ++fileName; + versionsize = ::GetFileVersionInfoSize((char*)path, &zerome); if (versionsize > 0) verbuf = (char *)PR_Malloc(versionsize); @@ -300,6 +305,7 @@ nsresult nsPluginFile::GetPluginInfo(nsPluginInfo& info) info.fMimeTypeArray = MakeStringArray(info.fVariantCount, info.fMimeType); info.fMimeDescriptionArray = MakeStringArray(info.fVariantCount, info.fMimeDescription); info.fExtensionArray = MakeStringArray(info.fVariantCount, info.fExtensions); + info.fFileName = PL_strdup(fileName); } else return NS_ERROR_FAILURE; diff --git a/mozilla/modules/plugin/nglsrc/nsIPluginHost.h b/mozilla/modules/plugin/nglsrc/nsIPluginHost.h index 867c426826c..de852f82a0f 100644 --- a/mozilla/modules/plugin/nglsrc/nsIPluginHost.h +++ b/mozilla/modules/plugin/nglsrc/nsIPluginHost.h @@ -71,6 +71,9 @@ public: NS_IMETHOD GetPlugins(PRUint32 aPluginCount, nsIDOMPlugin* aPluginArray[]) = 0; + + NS_IMETHOD + StopPluginInstance(nsIPluginInstance* aInstance) = 0; }; #endif // nsIPluginHost_h___ diff --git a/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp b/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp index 5d81c36eba8..fea91519736 100644 --- a/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp +++ b/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp @@ -86,6 +86,7 @@ nsPluginTag::nsPluginTag() mLibrary = nsnull; mEntryPoint = nsnull; mFlags = NS_PLUGIN_FLAG_ENABLED; + mFileName = nsnull; } inline char* new_str(char* str) @@ -118,6 +119,7 @@ nsPluginTag::nsPluginTag(nsPluginTag* aPluginTag) mLibrary = nsnull; mEntryPoint = nsnull; mFlags = NS_PLUGIN_FLAG_ENABLED; + mFileName = new_str(aPluginTag->mFileName); } nsPluginTag::~nsPluginTag() @@ -168,6 +170,12 @@ nsPluginTag::~nsPluginTag() PR_UnloadLibrary(mLibrary); mLibrary = nsnull; } + + if(nsnull != mFileName) + { + delete [] mFileName; + mFileName = nsnull; + } } class nsPluginStreamInfo : public nsIPluginStreamInfo @@ -1470,10 +1478,9 @@ nsresult nsPluginHostImpl::FindStoppedPluginForURL(nsIURL* aURL, nsIPluginInstan for(i=0; iGetWindow(window); @@ -1487,6 +1494,8 @@ nsresult nsPluginHostImpl::FindStoppedPluginForURL(nsIURL* aURL, nsIPluginInstan instance->SetWindow(window); instance->Start(); + mActivePluginList[i].mStopped = PR_FALSE; + return NS_OK; } } @@ -1507,6 +1516,8 @@ void nsPluginHostImpl::AddInstanceToActiveList(nsIPluginInstance* aInstance, nsI mActivePluginList[mNumActivePlugins].mInstance = aInstance; aInstance->GetPeer(&(mActivePluginList[mNumActivePlugins].mPeer)); + mActivePluginList[mNumActivePlugins].mStopped = PR_FALSE; + ++mNumActivePlugins; } else @@ -1523,6 +1534,7 @@ void nsPluginHostImpl::AddInstanceToActiveList(nsIPluginInstance* aInstance, nsI mActivePluginList[mOldestActivePlugin].mURL = PL_strdup(url); mActivePluginList[mOldestActivePlugin].mInstance = aInstance; aInstance->GetPeer(&(mActivePluginList[mOldestActivePlugin].mPeer)); + mActivePluginList[mOldestActivePlugin].mStopped = PR_FALSE; ++mOldestActivePlugin; if(mOldestActivePlugin == MAX_ACTIVE_PLUGINS) @@ -1727,8 +1739,7 @@ public: NS_METHOD GetFilename(nsString& aFilename) { - // FIXME: need to keep the filename around. - aFilename = mPluginTag.mName; + aFilename = mPluginTag.mFileName; return NS_OK; } @@ -1970,6 +1981,23 @@ NS_IMETHODIMP nsPluginHostImpl::NewPluginURLStream(const nsString& aURL, return rv; } + +NS_IMETHODIMP +nsPluginHostImpl::StopPluginInstance(nsIPluginInstance* aInstance) +{ + PRUint32 i; + for(i=0; iGetCString(); + fileName = PL_strrchr(path, '\\'); + if(fileName) + ++fileName; + versionsize = ::GetFileVersionInfoSize((char*)path, &zerome); if (versionsize > 0) verbuf = (char *)PR_Malloc(versionsize); @@ -300,6 +305,7 @@ nsresult nsPluginFile::GetPluginInfo(nsPluginInfo& info) info.fMimeTypeArray = MakeStringArray(info.fVariantCount, info.fMimeType); info.fMimeDescriptionArray = MakeStringArray(info.fVariantCount, info.fMimeDescription); info.fExtensionArray = MakeStringArray(info.fVariantCount, info.fExtensions); + info.fFileName = PL_strdup(fileName); } else return NS_ERROR_FAILURE;