From 7011bdb5a77ea2adadb5b05d2a67aaf2f15b3754 Mon Sep 17 00:00:00 2001 From: "beard%netscape.com" Date: Tue, 20 Apr 1999 19:29:28 +0000 Subject: [PATCH] Added GetPluginCount, and GetPlugins, for DOM support git-svn-id: svn://10.0.0.236/trunk@28287 18797224-902f-48f8-a5cc-f745e15eee43 --- .../modules/plugin/base/src/nsIPluginHost.h | 6 + .../plugin/base/src/nsPluginHostImpl.cpp | 316 +++++++++++++----- .../plugin/base/src/nsPluginHostImpl.h | 7 + mozilla/modules/plugin/nglsrc/nsIPluginHost.h | 6 + .../plugin/nglsrc/nsPluginHostImpl.cpp | 316 +++++++++++++----- .../modules/plugin/nglsrc/nsPluginHostImpl.h | 7 + 6 files changed, 504 insertions(+), 154 deletions(-) diff --git a/mozilla/modules/plugin/base/src/nsIPluginHost.h b/mozilla/modules/plugin/base/src/nsIPluginHost.h index 8a35b582166..867c426826c 100644 --- a/mozilla/modules/plugin/base/src/nsIPluginHost.h +++ b/mozilla/modules/plugin/base/src/nsIPluginHost.h @@ -28,6 +28,7 @@ class nsIPlugin; class nsIURL; +class nsIDOMPlugin; #define NS_IPLUGINHOST_IID \ { 0x264c0640, 0x1c31, 0x11d2, \ @@ -65,6 +66,11 @@ public: NS_IMETHOD IsPluginEnabledForExtension(const char* aExtension, const char* &aMimeType) = 0; + NS_IMETHOD + GetPluginCount(PRUint32* aPluginCount) = 0; + + NS_IMETHOD + GetPlugins(PRUint32 aPluginCount, nsIDOMPlugin* aPluginArray[]) = 0; }; #endif // nsIPluginHost_h___ diff --git a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp index 8bc628796eb..a5213b07621 100644 --- a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp +++ b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp @@ -32,6 +32,8 @@ #include "nsIServiceManager.h" #include "nsICookieStorage.h" #include "nsINetService.h" +#include "nsIDOMPlugin.h" +#include "nsIDOMMimeType.h" #include "prprf.h" #include "gui.h" @@ -69,77 +71,100 @@ static NS_DEFINE_IID(kNetServiceCID, NS_NETSERVICE_CID); static NS_DEFINE_IID(kIFileUtilitiesIID, NS_IFILEUTILITIES_IID); static NS_DEFINE_IID(kIOutputStreamIID, NS_IOUTPUTSTREAM_IID); -nsPluginTag :: nsPluginTag() +nsPluginTag::nsPluginTag() { - mNext = nsnull; - mName = nsnull; - mDescription = nsnull; - mMimeType = nsnull; - mMimeDescription = nsnull; - mExtensions = nsnull; - mVariants = 0; - mMimeTypeArray = nsnull; - mMimeDescriptionArray = nsnull; - mExtensionsArray = nsnull; - mLibrary = nsnull; - mEntryPoint = nsnull; - mFlags = NS_PLUGIN_FLAG_ENABLED; + mNext = nsnull; + mName = nsnull; + mDescription = nsnull; + mMimeType = nsnull; + mMimeDescription = nsnull; + mExtensions = nsnull; + mVariants = 0; + mMimeTypeArray = nsnull; + mMimeDescriptionArray = nsnull; + mExtensionsArray = nsnull; + mLibrary = nsnull; + mEntryPoint = nsnull; + mFlags = NS_PLUGIN_FLAG_ENABLED; } -nsPluginTag :: ~nsPluginTag() +inline char* new_str(char* str) +{ + char* result = new char[strlen(str) + 1]; + if (result != nsnull) + return strcpy(result, str); + return result; +} + +nsPluginTag::nsPluginTag(nsPluginTag* aPluginTag) +{ + mNext = nsnull; + mName = new_str(aPluginTag->mName); + mDescription = new_str(aPluginTag->mDescription); + mMimeType = new_str(aPluginTag->mMimeType); + mMimeDescription = new_str(aPluginTag->mMimeDescription); + mExtensions = new_str(aPluginTag->mExtensions); + mVariants = aPluginTag->mVariants; + mMimeTypeArray = new char*[mVariants]; + mMimeDescriptionArray = new char*[mVariants]; + mExtensionsArray = new char*[mVariants]; + if (mMimeTypeArray && mMimeDescriptionArray && mExtensionsArray) { + for (int i = 0; i < mVariants; i++) { + mMimeTypeArray[i] = new_str(aPluginTag->mMimeTypeArray[i]); + mMimeDescriptionArray[i] = new_str(aPluginTag->mMimeDescriptionArray[i]); + mExtensionsArray[i] = new_str(aPluginTag->mExtensionsArray[i]); + } + } + mLibrary = nsnull; + mEntryPoint = nsnull; + mFlags = NS_PLUGIN_FLAG_ENABLED; +} + +nsPluginTag::~nsPluginTag() { NS_IF_RELEASE(mEntryPoint); - if (nsnull != mName) - { - PR_Free(mName); + if (nsnull != mName) { + delete[] (mName); mName = nsnull; } - if (nsnull != mDescription) - { - PR_Free(mDescription); + if (nsnull != mDescription) { + delete[] (mDescription); mDescription = nsnull; } - if (nsnull != mMimeType) - { - PR_Free(mMimeType); + if (nsnull != mMimeType) { + delete[] (mMimeType); mMimeType = nsnull; } - if (nsnull != mMimeDescription) - { - PR_Free(mMimeDescription); + if (nsnull != mMimeDescription) { + delete[] (mMimeDescription); mMimeDescription = nsnull; } - if (nsnull != mExtensions) - { - PR_Free(mExtensions); + if (nsnull != mExtensions) { + delete[] (mExtensions); mExtensions = nsnull; } - if (nsnull != mMimeTypeArray) - { - PR_Free(mMimeTypeArray); + if (nsnull != mMimeTypeArray) { + delete[] (mMimeTypeArray); mMimeTypeArray = nsnull; } - if (nsnull != mMimeDescriptionArray) - { - PR_Free(mMimeDescriptionArray); + if (nsnull != mMimeDescriptionArray) { + delete[] (mMimeDescriptionArray); mMimeDescriptionArray = nsnull; } - if (nsnull != mExtensionsArray) - { - PR_Free(mExtensionsArray); + if (nsnull != mExtensionsArray) { + delete[] (mExtensionsArray); mExtensionsArray = nsnull; } - if (nsnull != mLibrary) - { + if (nsnull != mLibrary) { PR_UnloadLibrary(mLibrary); mLibrary = nsnull; } @@ -437,7 +462,7 @@ private: #endif }; -nsPluginCacheListener :: nsPluginCacheListener(nsPluginStreamListenerPeer* aListener) +nsPluginCacheListener::nsPluginCacheListener(nsPluginStreamListenerPeer* aListener) { NS_INIT_REFCNT(); @@ -452,7 +477,7 @@ nsPluginCacheListener :: nsPluginCacheListener(nsPluginStreamListenerPeer* aList #endif } -nsPluginCacheListener :: ~nsPluginCacheListener() +nsPluginCacheListener::~nsPluginCacheListener() { NS_IF_RELEASE(mListener); @@ -625,7 +650,7 @@ nsPluginCacheListener::OnStatus(nsIURL* aURL, const PRUnichar* aMsg) /////////////////////////////////////////////////////////////////////////////////////////////////////// -nsPluginStreamListenerPeer :: nsPluginStreamListenerPeer() +nsPluginStreamListenerPeer::nsPluginStreamListenerPeer() { NS_INIT_REFCNT(); @@ -645,7 +670,7 @@ nsPluginStreamListenerPeer :: nsPluginStreamListenerPeer() mStatus = NS_OK; } -nsPluginStreamListenerPeer :: ~nsPluginStreamListenerPeer() +nsPluginStreamListenerPeer::~nsPluginStreamListenerPeer() { #ifdef NS_DEBUG if(mURL != nsnull) @@ -666,7 +691,7 @@ nsPluginStreamListenerPeer :: ~nsPluginStreamListenerPeer() NS_IMPL_ADDREF(nsPluginStreamListenerPeer); NS_IMPL_RELEASE(nsPluginStreamListenerPeer); -nsresult nsPluginStreamListenerPeer :: QueryInterface(const nsIID& aIID, +nsresult nsPluginStreamListenerPeer::QueryInterface(const nsIID& aIID, void** aInstancePtrResult) { NS_PRECONDITION(nsnull != aInstancePtrResult, "null pointer"); @@ -700,7 +725,7 @@ nsresult nsPluginStreamListenerPeer :: QueryInterface(const nsIID& aIID, /* Called as a result of GetURL and PostURL */ -nsresult nsPluginStreamListenerPeer :: Initialize(nsIURL *aURL, nsIPluginInstance *aInstance, +nsresult nsPluginStreamListenerPeer::Initialize(nsIURL *aURL, nsIPluginInstance *aInstance, nsIPluginStreamListener* aListener) { #ifdef NS_DEBUG @@ -729,7 +754,7 @@ nsresult nsPluginStreamListenerPeer :: Initialize(nsIURL *aURL, nsIPluginInstanc we need the plugin host and instance owner. */ -nsresult nsPluginStreamListenerPeer :: InitializeEmbeded(nsIURL *aURL, nsIPluginInstance* aInstance, +nsresult nsPluginStreamListenerPeer::InitializeEmbeded(nsIURL *aURL, nsIPluginInstance* aInstance, nsIPluginInstanceOwner *aOwner, nsIPluginHost *aHost) { @@ -763,7 +788,7 @@ nsresult nsPluginStreamListenerPeer :: InitializeEmbeded(nsIURL *aURL, nsIPlugin /* Called by NewFullPagePluginStream() */ -nsresult nsPluginStreamListenerPeer :: InitializeFullPage(nsIPluginInstance *aInstance) +nsresult nsPluginStreamListenerPeer::InitializeFullPage(nsIPluginInstance *aInstance) { #ifdef NS_DEBUG printf("created stream for (unknown URL)\n"); @@ -826,7 +851,7 @@ NS_IMETHODIMP nsPluginStreamListenerPeer::OnStartBinding(nsIURL* aURL, const cha } -NS_IMETHODIMP nsPluginStreamListenerPeer :: OnProgress(nsIURL* aURL, PRUint32 aProgress, PRUint32 aProgressMax) +NS_IMETHODIMP nsPluginStreamListenerPeer::OnProgress(nsIURL* aURL, PRUint32 aProgress, PRUint32 aProgressMax) { nsresult rv = NS_OK; @@ -839,17 +864,17 @@ NS_IMETHODIMP nsPluginStreamListenerPeer :: OnProgress(nsIURL* aURL, PRUint32 aP return rv; } -NS_IMETHODIMP nsPluginStreamListenerPeer :: OnStatus(nsIURL* aURL, const PRUnichar* aMsg) +NS_IMETHODIMP nsPluginStreamListenerPeer::OnStatus(nsIURL* aURL, const PRUnichar* aMsg) { return NS_OK; } -NS_IMETHODIMP nsPluginStreamListenerPeer :: GetBindInfo(nsIURL* aURL, nsStreamBindingInfo* aInfo) +NS_IMETHODIMP nsPluginStreamListenerPeer::GetBindInfo(nsIURL* aURL, nsStreamBindingInfo* aInfo) { return NS_OK; } -NS_IMETHODIMP nsPluginStreamListenerPeer :: OnDataAvailable(nsIURL* aURL, nsIInputStream *aIStream, +NS_IMETHODIMP nsPluginStreamListenerPeer::OnDataAvailable(nsIURL* aURL, nsIInputStream *aIStream, PRUint32 aLength) { nsresult rv = NS_OK; @@ -880,7 +905,7 @@ NS_IMETHODIMP nsPluginStreamListenerPeer :: OnDataAvailable(nsIURL* aURL, nsIInp return rv; } -NS_IMETHODIMP nsPluginStreamListenerPeer :: OnStopBinding(nsIURL* aURL, nsresult aStatus, const PRUnichar* aMsg) +NS_IMETHODIMP nsPluginStreamListenerPeer::OnStopBinding(nsIURL* aURL, nsresult aStatus, const PRUnichar* aMsg) { nsresult rv = NS_OK; nsPluginReason reason = nsPluginReason_NoReason; @@ -972,14 +997,14 @@ nsPluginStreamListenerPeer::OnFileAvailable(const char* aFilename) /////////////////////////////////////////////////////////////////////////////////////////////////////// -nsPluginHostImpl :: nsPluginHostImpl(nsIServiceManager *serviceMgr) +nsPluginHostImpl::nsPluginHostImpl(nsIServiceManager *serviceMgr) { NS_INIT_REFCNT(); mPluginsLoaded = PR_FALSE; mServiceMgr = serviceMgr; } -nsPluginHostImpl :: ~nsPluginHostImpl() +nsPluginHostImpl::~nsPluginHostImpl() { #ifdef NS_DEBUG printf("killing plugin host\n"); @@ -1001,7 +1026,7 @@ printf("killing plugin host\n"); NS_IMPL_ADDREF(nsPluginHostImpl) NS_IMPL_RELEASE(nsPluginHostImpl) -nsresult nsPluginHostImpl :: QueryInterface(const nsIID& aIID, +nsresult nsPluginHostImpl::QueryInterface(const nsIID& aIID, void** aInstancePtrResult) { NS_PRECONDITION(nsnull != aInstancePtrResult, "null pointer"); @@ -1060,19 +1085,19 @@ nsresult nsPluginHostImpl :: QueryInterface(const nsIID& aIID, return NS_NOINTERFACE; } -NS_IMETHODIMP nsPluginHostImpl :: GetValue(nsPluginManagerVariable variable, void *value) +NS_IMETHODIMP nsPluginHostImpl::GetValue(nsPluginManagerVariable variable, void *value) { printf("manager getvalue %d called\n", variable); return NS_OK; } -nsresult nsPluginHostImpl :: ReloadPlugins(PRBool reloadPages) +nsresult nsPluginHostImpl::ReloadPlugins(PRBool reloadPages) { mPluginsLoaded = PR_FALSE; return LoadPlugins(); } -nsresult nsPluginHostImpl :: UserAgent(const char **retstring) +nsresult nsPluginHostImpl::UserAgent(const char **retstring) { nsresult res; @@ -1223,73 +1248,73 @@ NS_IMETHODIMP nsPluginHostImpl::PostURL(nsISupports* pluginInst, return rv; } -NS_IMETHODIMP nsPluginHostImpl :: BeginWaitCursor(void) +NS_IMETHODIMP nsPluginHostImpl::BeginWaitCursor(void) { printf("plugin manager2 beginwaitcursor called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: EndWaitCursor(void) +NS_IMETHODIMP nsPluginHostImpl::EndWaitCursor(void) { printf("plugin manager2 posturl called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: SupportsURLProtocol(const char* protocol, PRBool *result) +NS_IMETHODIMP nsPluginHostImpl::SupportsURLProtocol(const char* protocol, PRBool *result) { printf("plugin manager2 supportsurlprotocol called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: NotifyStatusChange(nsIPlugin* plugin, nsresult errorStatus) +NS_IMETHODIMP nsPluginHostImpl::NotifyStatusChange(nsIPlugin* plugin, nsresult errorStatus) { printf("plugin manager2 notifystatuschange called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: FindProxyForURL(const char* url, char* *result) +NS_IMETHODIMP nsPluginHostImpl::FindProxyForURL(const char* url, char* *result) { printf("plugin manager2 findproxyforurl called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: RegisterWindow(nsIEventHandler* handler, nsPluginPlatformWindowRef window) +NS_IMETHODIMP nsPluginHostImpl::RegisterWindow(nsIEventHandler* handler, nsPluginPlatformWindowRef window) { printf("plugin manager2 registerwindow called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: UnregisterWindow(nsIEventHandler* handler, nsPluginPlatformWindowRef window) +NS_IMETHODIMP nsPluginHostImpl::UnregisterWindow(nsIEventHandler* handler, nsPluginPlatformWindowRef window) { printf("plugin manager2 unregisterwindow called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: AllocateMenuID(nsIEventHandler* handler, PRBool isSubmenu, PRInt16 *result) +NS_IMETHODIMP nsPluginHostImpl::AllocateMenuID(nsIEventHandler* handler, PRBool isSubmenu, PRInt16 *result) { printf("plugin manager2 allocatemenuid called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: DeallocateMenuID(nsIEventHandler* handler, PRInt16 menuID) +NS_IMETHODIMP nsPluginHostImpl::DeallocateMenuID(nsIEventHandler* handler, PRInt16 menuID) { printf("plugin manager2 deallocatemenuid called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: HasAllocatedMenuID(nsIEventHandler* handler, PRInt16 menuID, PRBool *result) +NS_IMETHODIMP nsPluginHostImpl::HasAllocatedMenuID(nsIEventHandler* handler, PRInt16 menuID, PRBool *result) { printf("plugin manager2 hasallocatedmenuid called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: ProcessNextEvent(PRBool *bEventHandled) +NS_IMETHODIMP nsPluginHostImpl::ProcessNextEvent(PRBool *bEventHandled) { printf("plugin manager2 processnextevent called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: Init(void) +NS_IMETHODIMP nsPluginHostImpl::Init(void) { return NS_OK; } @@ -1311,7 +1336,7 @@ NS_IMETHODIMP nsPluginHostImpl::Destroy(void) /* Called by nsPluginInstanceOwner (nsObjectFrame.cpp - embeded case) */ -NS_IMETHODIMP nsPluginHostImpl :: InstantiateEmbededPlugin(const char *aMimeType, nsIURL* aURL, +NS_IMETHODIMP nsPluginHostImpl::InstantiateEmbededPlugin(const char *aMimeType, nsIURL* aURL, nsIPluginInstanceOwner *aOwner) { nsresult rv; @@ -1528,6 +1553,143 @@ nsPluginHostImpl::IsPluginEnabledForExtension(const char* aExtension, const char return NS_ERROR_FAILURE; } +class DOMMimeTypeImpl : public nsIDOMMimeType { +public: + NS_DECL_ISUPPORTS + + DOMMimeTypeImpl(nsPluginTag* aPluginTag, PRUint32 aMimeTypeIndex) + { + NS_INIT_ISUPPORTS(); + mDescription = aPluginTag->mMimeDescriptionArray[aMimeTypeIndex]; + mSuffixes = aPluginTag->mExtensionsArray[aMimeTypeIndex]; + mType = aPluginTag->mMimeTypeArray[aMimeTypeIndex]; + } + + NS_METHOD GetDescription(nsString& aDescription) + { + aDescription = mDescription; + return NS_OK; + } + + NS_METHOD GetEnabledPlugin(nsIDOMPlugin** aEnabledPlugin) + { + // this has to be implemented by the DOM version. + *aEnabledPlugin = nsnull; + return NS_OK; + } + + NS_METHOD GetSuffixes(nsString& aSuffixes) + { + aSuffixes = mSuffixes; + return NS_OK; + } + + NS_METHOD GetType(nsString& aType) + { + aType = mType; + return NS_OK; + } + +private: + nsString mDescription; + nsString mSuffixes; + nsString mType; +}; + +NS_IMPL_ISUPPORTS(DOMMimeTypeImpl, nsIDOMMimeType::GetIID()); + +class DOMPluginImpl : public nsIDOMPlugin { +public: + NS_DECL_ISUPPORTS + + DOMPluginImpl(nsPluginTag* aPluginTag) : mPluginTag(aPluginTag) + { + NS_INIT_ISUPPORTS(); + } + + NS_METHOD GetDescription(nsString& aDescription) + { + aDescription = mPluginTag.mDescription; + return NS_OK; + } + + NS_METHOD GetFilename(nsString& aFilename) + { + // FIXME: need to keep the filename around. + aFilename = mPluginTag.mName; + return NS_OK; + } + + NS_METHOD GetName(nsString& aName) + { + aName = mPluginTag.mName; + return NS_OK; + } + + NS_METHOD GetLength(PRUint32* aLength) + { + *aLength = mPluginTag.mVariants; + return NS_OK; + } + + NS_METHOD Item(PRUint32 aIndex, nsIDOMMimeType** aReturn) + { + nsIDOMMimeType* mimeType = new DOMMimeTypeImpl(&mPluginTag, aIndex); + NS_IF_ADDREF(mimeType); + *aReturn = mimeType; + return NS_OK; + } + + NS_METHOD NamedItem(const nsString& aName, nsIDOMMimeType** aReturn) + { + for (int index = mPluginTag.mVariants - 1; index >= 0; --index) { + if (aName == mPluginTag.mMimeTypeArray[index]) + return Item(index, aReturn); + } + return NS_OK; + } + +private: + nsPluginTag mPluginTag; +}; + +NS_IMPL_ISUPPORTS(DOMPluginImpl, nsIDOMPlugin::GetIID()); + +NS_IMETHODIMP +nsPluginHostImpl::GetPluginCount(PRUint32* aPluginCount) +{ + if (PR_FALSE == mPluginsLoaded) + LoadPlugins(); + + PRUint32 count = 0; + + nsPluginTag* plugin = mPlugins; + while (plugin != nsnull) { + ++count; + plugin = plugin->mNext; + } + + *aPluginCount = count; + + return NS_OK; +} + +NS_IMETHODIMP +nsPluginHostImpl::GetPlugins(PRUint32 aPluginCount, nsIDOMPlugin* aPluginArray[]) +{ + if (PR_FALSE == mPluginsLoaded) + LoadPlugins(); + + nsPluginTag* plugin = mPlugins; + for (int i = 0; i < aPluginCount && plugin != nsnull; i++, plugin = plugin->mNext) { + nsIDOMPlugin* domPlugin = new DOMPluginImpl(plugin); + NS_IF_ADDREF(domPlugin); + aPluginArray[i] = domPlugin; + } + + return NS_OK; +} + nsresult nsPluginHostImpl::FindPluginEnabledForType(const char* aMimeType, nsPluginTag* &aPlugin) { @@ -1717,7 +1879,7 @@ PRLibrary* nsPluginHostImpl::LoadPluginLibrary(const char* pluginPath, const cha /* Called by GetURL and PostURL */ -NS_IMETHODIMP nsPluginHostImpl :: NewPluginURLStream(const nsString& aURL, +NS_IMETHODIMP nsPluginHostImpl::NewPluginURLStream(const nsString& aURL, nsIPluginInstance *aInstance, nsIPluginStreamListener* aListener) { @@ -1748,7 +1910,7 @@ NS_IMETHODIMP nsPluginHostImpl :: NewPluginURLStream(const nsString& aURL, /* Called by InstantiateEmbededPlugin() */ -nsresult nsPluginHostImpl :: NewEmbededPluginStream(nsIURL* aURL, +nsresult nsPluginHostImpl::NewEmbededPluginStream(nsIURL* aURL, nsIPluginInstanceOwner *aOwner, nsIPluginInstance* aInstance) { @@ -1780,7 +1942,7 @@ nsresult nsPluginHostImpl :: NewEmbededPluginStream(nsIURL* aURL, /* Called by InstantiateFullPagePlugin() */ -nsresult nsPluginHostImpl :: NewFullPagePluginStream(nsIStreamListener *&aStreamListener, +nsresult nsPluginHostImpl::NewFullPagePluginStream(nsIStreamListener *&aStreamListener, nsIPluginInstance *aInstance) { nsPluginStreamListenerPeer *listener = (nsPluginStreamListenerPeer *)new nsPluginStreamListenerPeer(); @@ -1818,7 +1980,7 @@ nsresult nsPluginHostImpl::CreateInstance(nsISupports *aOuter, return res; } -nsresult nsPluginHostImpl :: LockFactory(PRBool aLock) +nsresult nsPluginHostImpl::LockFactory(PRBool aLock) { // Not implemented in simplest case. return NS_OK; diff --git a/mozilla/modules/plugin/base/src/nsPluginHostImpl.h b/mozilla/modules/plugin/base/src/nsPluginHostImpl.h index 9f6b9b5cf89..810473339b3 100644 --- a/mozilla/modules/plugin/base/src/nsPluginHostImpl.h +++ b/mozilla/modules/plugin/base/src/nsPluginHostImpl.h @@ -36,6 +36,7 @@ class nsPluginTag { public: nsPluginTag(); + nsPluginTag(nsPluginTag* aPluginTag); ~nsPluginTag(); nsPluginTag *mNext; @@ -132,6 +133,12 @@ public: NS_IMETHOD IsPluginEnabledForExtension(const char* aExtension, const char* &aMimeType); + NS_IMETHOD + GetPluginCount(PRUint32* aPluginCount); + + NS_IMETHOD + GetPlugins(PRUint32 aPluginCount, nsIDOMPlugin* aPluginArray[]); + //nsIPluginManager2 interface - secondary methods that nsIPlugin communicates to NS_IMETHOD diff --git a/mozilla/modules/plugin/nglsrc/nsIPluginHost.h b/mozilla/modules/plugin/nglsrc/nsIPluginHost.h index 8a35b582166..867c426826c 100644 --- a/mozilla/modules/plugin/nglsrc/nsIPluginHost.h +++ b/mozilla/modules/plugin/nglsrc/nsIPluginHost.h @@ -28,6 +28,7 @@ class nsIPlugin; class nsIURL; +class nsIDOMPlugin; #define NS_IPLUGINHOST_IID \ { 0x264c0640, 0x1c31, 0x11d2, \ @@ -65,6 +66,11 @@ public: NS_IMETHOD IsPluginEnabledForExtension(const char* aExtension, const char* &aMimeType) = 0; + NS_IMETHOD + GetPluginCount(PRUint32* aPluginCount) = 0; + + NS_IMETHOD + GetPlugins(PRUint32 aPluginCount, nsIDOMPlugin* aPluginArray[]) = 0; }; #endif // nsIPluginHost_h___ diff --git a/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp b/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp index 8bc628796eb..a5213b07621 100644 --- a/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp +++ b/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp @@ -32,6 +32,8 @@ #include "nsIServiceManager.h" #include "nsICookieStorage.h" #include "nsINetService.h" +#include "nsIDOMPlugin.h" +#include "nsIDOMMimeType.h" #include "prprf.h" #include "gui.h" @@ -69,77 +71,100 @@ static NS_DEFINE_IID(kNetServiceCID, NS_NETSERVICE_CID); static NS_DEFINE_IID(kIFileUtilitiesIID, NS_IFILEUTILITIES_IID); static NS_DEFINE_IID(kIOutputStreamIID, NS_IOUTPUTSTREAM_IID); -nsPluginTag :: nsPluginTag() +nsPluginTag::nsPluginTag() { - mNext = nsnull; - mName = nsnull; - mDescription = nsnull; - mMimeType = nsnull; - mMimeDescription = nsnull; - mExtensions = nsnull; - mVariants = 0; - mMimeTypeArray = nsnull; - mMimeDescriptionArray = nsnull; - mExtensionsArray = nsnull; - mLibrary = nsnull; - mEntryPoint = nsnull; - mFlags = NS_PLUGIN_FLAG_ENABLED; + mNext = nsnull; + mName = nsnull; + mDescription = nsnull; + mMimeType = nsnull; + mMimeDescription = nsnull; + mExtensions = nsnull; + mVariants = 0; + mMimeTypeArray = nsnull; + mMimeDescriptionArray = nsnull; + mExtensionsArray = nsnull; + mLibrary = nsnull; + mEntryPoint = nsnull; + mFlags = NS_PLUGIN_FLAG_ENABLED; } -nsPluginTag :: ~nsPluginTag() +inline char* new_str(char* str) +{ + char* result = new char[strlen(str) + 1]; + if (result != nsnull) + return strcpy(result, str); + return result; +} + +nsPluginTag::nsPluginTag(nsPluginTag* aPluginTag) +{ + mNext = nsnull; + mName = new_str(aPluginTag->mName); + mDescription = new_str(aPluginTag->mDescription); + mMimeType = new_str(aPluginTag->mMimeType); + mMimeDescription = new_str(aPluginTag->mMimeDescription); + mExtensions = new_str(aPluginTag->mExtensions); + mVariants = aPluginTag->mVariants; + mMimeTypeArray = new char*[mVariants]; + mMimeDescriptionArray = new char*[mVariants]; + mExtensionsArray = new char*[mVariants]; + if (mMimeTypeArray && mMimeDescriptionArray && mExtensionsArray) { + for (int i = 0; i < mVariants; i++) { + mMimeTypeArray[i] = new_str(aPluginTag->mMimeTypeArray[i]); + mMimeDescriptionArray[i] = new_str(aPluginTag->mMimeDescriptionArray[i]); + mExtensionsArray[i] = new_str(aPluginTag->mExtensionsArray[i]); + } + } + mLibrary = nsnull; + mEntryPoint = nsnull; + mFlags = NS_PLUGIN_FLAG_ENABLED; +} + +nsPluginTag::~nsPluginTag() { NS_IF_RELEASE(mEntryPoint); - if (nsnull != mName) - { - PR_Free(mName); + if (nsnull != mName) { + delete[] (mName); mName = nsnull; } - if (nsnull != mDescription) - { - PR_Free(mDescription); + if (nsnull != mDescription) { + delete[] (mDescription); mDescription = nsnull; } - if (nsnull != mMimeType) - { - PR_Free(mMimeType); + if (nsnull != mMimeType) { + delete[] (mMimeType); mMimeType = nsnull; } - if (nsnull != mMimeDescription) - { - PR_Free(mMimeDescription); + if (nsnull != mMimeDescription) { + delete[] (mMimeDescription); mMimeDescription = nsnull; } - if (nsnull != mExtensions) - { - PR_Free(mExtensions); + if (nsnull != mExtensions) { + delete[] (mExtensions); mExtensions = nsnull; } - if (nsnull != mMimeTypeArray) - { - PR_Free(mMimeTypeArray); + if (nsnull != mMimeTypeArray) { + delete[] (mMimeTypeArray); mMimeTypeArray = nsnull; } - if (nsnull != mMimeDescriptionArray) - { - PR_Free(mMimeDescriptionArray); + if (nsnull != mMimeDescriptionArray) { + delete[] (mMimeDescriptionArray); mMimeDescriptionArray = nsnull; } - if (nsnull != mExtensionsArray) - { - PR_Free(mExtensionsArray); + if (nsnull != mExtensionsArray) { + delete[] (mExtensionsArray); mExtensionsArray = nsnull; } - if (nsnull != mLibrary) - { + if (nsnull != mLibrary) { PR_UnloadLibrary(mLibrary); mLibrary = nsnull; } @@ -437,7 +462,7 @@ private: #endif }; -nsPluginCacheListener :: nsPluginCacheListener(nsPluginStreamListenerPeer* aListener) +nsPluginCacheListener::nsPluginCacheListener(nsPluginStreamListenerPeer* aListener) { NS_INIT_REFCNT(); @@ -452,7 +477,7 @@ nsPluginCacheListener :: nsPluginCacheListener(nsPluginStreamListenerPeer* aList #endif } -nsPluginCacheListener :: ~nsPluginCacheListener() +nsPluginCacheListener::~nsPluginCacheListener() { NS_IF_RELEASE(mListener); @@ -625,7 +650,7 @@ nsPluginCacheListener::OnStatus(nsIURL* aURL, const PRUnichar* aMsg) /////////////////////////////////////////////////////////////////////////////////////////////////////// -nsPluginStreamListenerPeer :: nsPluginStreamListenerPeer() +nsPluginStreamListenerPeer::nsPluginStreamListenerPeer() { NS_INIT_REFCNT(); @@ -645,7 +670,7 @@ nsPluginStreamListenerPeer :: nsPluginStreamListenerPeer() mStatus = NS_OK; } -nsPluginStreamListenerPeer :: ~nsPluginStreamListenerPeer() +nsPluginStreamListenerPeer::~nsPluginStreamListenerPeer() { #ifdef NS_DEBUG if(mURL != nsnull) @@ -666,7 +691,7 @@ nsPluginStreamListenerPeer :: ~nsPluginStreamListenerPeer() NS_IMPL_ADDREF(nsPluginStreamListenerPeer); NS_IMPL_RELEASE(nsPluginStreamListenerPeer); -nsresult nsPluginStreamListenerPeer :: QueryInterface(const nsIID& aIID, +nsresult nsPluginStreamListenerPeer::QueryInterface(const nsIID& aIID, void** aInstancePtrResult) { NS_PRECONDITION(nsnull != aInstancePtrResult, "null pointer"); @@ -700,7 +725,7 @@ nsresult nsPluginStreamListenerPeer :: QueryInterface(const nsIID& aIID, /* Called as a result of GetURL and PostURL */ -nsresult nsPluginStreamListenerPeer :: Initialize(nsIURL *aURL, nsIPluginInstance *aInstance, +nsresult nsPluginStreamListenerPeer::Initialize(nsIURL *aURL, nsIPluginInstance *aInstance, nsIPluginStreamListener* aListener) { #ifdef NS_DEBUG @@ -729,7 +754,7 @@ nsresult nsPluginStreamListenerPeer :: Initialize(nsIURL *aURL, nsIPluginInstanc we need the plugin host and instance owner. */ -nsresult nsPluginStreamListenerPeer :: InitializeEmbeded(nsIURL *aURL, nsIPluginInstance* aInstance, +nsresult nsPluginStreamListenerPeer::InitializeEmbeded(nsIURL *aURL, nsIPluginInstance* aInstance, nsIPluginInstanceOwner *aOwner, nsIPluginHost *aHost) { @@ -763,7 +788,7 @@ nsresult nsPluginStreamListenerPeer :: InitializeEmbeded(nsIURL *aURL, nsIPlugin /* Called by NewFullPagePluginStream() */ -nsresult nsPluginStreamListenerPeer :: InitializeFullPage(nsIPluginInstance *aInstance) +nsresult nsPluginStreamListenerPeer::InitializeFullPage(nsIPluginInstance *aInstance) { #ifdef NS_DEBUG printf("created stream for (unknown URL)\n"); @@ -826,7 +851,7 @@ NS_IMETHODIMP nsPluginStreamListenerPeer::OnStartBinding(nsIURL* aURL, const cha } -NS_IMETHODIMP nsPluginStreamListenerPeer :: OnProgress(nsIURL* aURL, PRUint32 aProgress, PRUint32 aProgressMax) +NS_IMETHODIMP nsPluginStreamListenerPeer::OnProgress(nsIURL* aURL, PRUint32 aProgress, PRUint32 aProgressMax) { nsresult rv = NS_OK; @@ -839,17 +864,17 @@ NS_IMETHODIMP nsPluginStreamListenerPeer :: OnProgress(nsIURL* aURL, PRUint32 aP return rv; } -NS_IMETHODIMP nsPluginStreamListenerPeer :: OnStatus(nsIURL* aURL, const PRUnichar* aMsg) +NS_IMETHODIMP nsPluginStreamListenerPeer::OnStatus(nsIURL* aURL, const PRUnichar* aMsg) { return NS_OK; } -NS_IMETHODIMP nsPluginStreamListenerPeer :: GetBindInfo(nsIURL* aURL, nsStreamBindingInfo* aInfo) +NS_IMETHODIMP nsPluginStreamListenerPeer::GetBindInfo(nsIURL* aURL, nsStreamBindingInfo* aInfo) { return NS_OK; } -NS_IMETHODIMP nsPluginStreamListenerPeer :: OnDataAvailable(nsIURL* aURL, nsIInputStream *aIStream, +NS_IMETHODIMP nsPluginStreamListenerPeer::OnDataAvailable(nsIURL* aURL, nsIInputStream *aIStream, PRUint32 aLength) { nsresult rv = NS_OK; @@ -880,7 +905,7 @@ NS_IMETHODIMP nsPluginStreamListenerPeer :: OnDataAvailable(nsIURL* aURL, nsIInp return rv; } -NS_IMETHODIMP nsPluginStreamListenerPeer :: OnStopBinding(nsIURL* aURL, nsresult aStatus, const PRUnichar* aMsg) +NS_IMETHODIMP nsPluginStreamListenerPeer::OnStopBinding(nsIURL* aURL, nsresult aStatus, const PRUnichar* aMsg) { nsresult rv = NS_OK; nsPluginReason reason = nsPluginReason_NoReason; @@ -972,14 +997,14 @@ nsPluginStreamListenerPeer::OnFileAvailable(const char* aFilename) /////////////////////////////////////////////////////////////////////////////////////////////////////// -nsPluginHostImpl :: nsPluginHostImpl(nsIServiceManager *serviceMgr) +nsPluginHostImpl::nsPluginHostImpl(nsIServiceManager *serviceMgr) { NS_INIT_REFCNT(); mPluginsLoaded = PR_FALSE; mServiceMgr = serviceMgr; } -nsPluginHostImpl :: ~nsPluginHostImpl() +nsPluginHostImpl::~nsPluginHostImpl() { #ifdef NS_DEBUG printf("killing plugin host\n"); @@ -1001,7 +1026,7 @@ printf("killing plugin host\n"); NS_IMPL_ADDREF(nsPluginHostImpl) NS_IMPL_RELEASE(nsPluginHostImpl) -nsresult nsPluginHostImpl :: QueryInterface(const nsIID& aIID, +nsresult nsPluginHostImpl::QueryInterface(const nsIID& aIID, void** aInstancePtrResult) { NS_PRECONDITION(nsnull != aInstancePtrResult, "null pointer"); @@ -1060,19 +1085,19 @@ nsresult nsPluginHostImpl :: QueryInterface(const nsIID& aIID, return NS_NOINTERFACE; } -NS_IMETHODIMP nsPluginHostImpl :: GetValue(nsPluginManagerVariable variable, void *value) +NS_IMETHODIMP nsPluginHostImpl::GetValue(nsPluginManagerVariable variable, void *value) { printf("manager getvalue %d called\n", variable); return NS_OK; } -nsresult nsPluginHostImpl :: ReloadPlugins(PRBool reloadPages) +nsresult nsPluginHostImpl::ReloadPlugins(PRBool reloadPages) { mPluginsLoaded = PR_FALSE; return LoadPlugins(); } -nsresult nsPluginHostImpl :: UserAgent(const char **retstring) +nsresult nsPluginHostImpl::UserAgent(const char **retstring) { nsresult res; @@ -1223,73 +1248,73 @@ NS_IMETHODIMP nsPluginHostImpl::PostURL(nsISupports* pluginInst, return rv; } -NS_IMETHODIMP nsPluginHostImpl :: BeginWaitCursor(void) +NS_IMETHODIMP nsPluginHostImpl::BeginWaitCursor(void) { printf("plugin manager2 beginwaitcursor called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: EndWaitCursor(void) +NS_IMETHODIMP nsPluginHostImpl::EndWaitCursor(void) { printf("plugin manager2 posturl called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: SupportsURLProtocol(const char* protocol, PRBool *result) +NS_IMETHODIMP nsPluginHostImpl::SupportsURLProtocol(const char* protocol, PRBool *result) { printf("plugin manager2 supportsurlprotocol called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: NotifyStatusChange(nsIPlugin* plugin, nsresult errorStatus) +NS_IMETHODIMP nsPluginHostImpl::NotifyStatusChange(nsIPlugin* plugin, nsresult errorStatus) { printf("plugin manager2 notifystatuschange called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: FindProxyForURL(const char* url, char* *result) +NS_IMETHODIMP nsPluginHostImpl::FindProxyForURL(const char* url, char* *result) { printf("plugin manager2 findproxyforurl called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: RegisterWindow(nsIEventHandler* handler, nsPluginPlatformWindowRef window) +NS_IMETHODIMP nsPluginHostImpl::RegisterWindow(nsIEventHandler* handler, nsPluginPlatformWindowRef window) { printf("plugin manager2 registerwindow called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: UnregisterWindow(nsIEventHandler* handler, nsPluginPlatformWindowRef window) +NS_IMETHODIMP nsPluginHostImpl::UnregisterWindow(nsIEventHandler* handler, nsPluginPlatformWindowRef window) { printf("plugin manager2 unregisterwindow called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: AllocateMenuID(nsIEventHandler* handler, PRBool isSubmenu, PRInt16 *result) +NS_IMETHODIMP nsPluginHostImpl::AllocateMenuID(nsIEventHandler* handler, PRBool isSubmenu, PRInt16 *result) { printf("plugin manager2 allocatemenuid called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: DeallocateMenuID(nsIEventHandler* handler, PRInt16 menuID) +NS_IMETHODIMP nsPluginHostImpl::DeallocateMenuID(nsIEventHandler* handler, PRInt16 menuID) { printf("plugin manager2 deallocatemenuid called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: HasAllocatedMenuID(nsIEventHandler* handler, PRInt16 menuID, PRBool *result) +NS_IMETHODIMP nsPluginHostImpl::HasAllocatedMenuID(nsIEventHandler* handler, PRInt16 menuID, PRBool *result) { printf("plugin manager2 hasallocatedmenuid called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: ProcessNextEvent(PRBool *bEventHandled) +NS_IMETHODIMP nsPluginHostImpl::ProcessNextEvent(PRBool *bEventHandled) { printf("plugin manager2 processnextevent called\n"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsPluginHostImpl :: Init(void) +NS_IMETHODIMP nsPluginHostImpl::Init(void) { return NS_OK; } @@ -1311,7 +1336,7 @@ NS_IMETHODIMP nsPluginHostImpl::Destroy(void) /* Called by nsPluginInstanceOwner (nsObjectFrame.cpp - embeded case) */ -NS_IMETHODIMP nsPluginHostImpl :: InstantiateEmbededPlugin(const char *aMimeType, nsIURL* aURL, +NS_IMETHODIMP nsPluginHostImpl::InstantiateEmbededPlugin(const char *aMimeType, nsIURL* aURL, nsIPluginInstanceOwner *aOwner) { nsresult rv; @@ -1528,6 +1553,143 @@ nsPluginHostImpl::IsPluginEnabledForExtension(const char* aExtension, const char return NS_ERROR_FAILURE; } +class DOMMimeTypeImpl : public nsIDOMMimeType { +public: + NS_DECL_ISUPPORTS + + DOMMimeTypeImpl(nsPluginTag* aPluginTag, PRUint32 aMimeTypeIndex) + { + NS_INIT_ISUPPORTS(); + mDescription = aPluginTag->mMimeDescriptionArray[aMimeTypeIndex]; + mSuffixes = aPluginTag->mExtensionsArray[aMimeTypeIndex]; + mType = aPluginTag->mMimeTypeArray[aMimeTypeIndex]; + } + + NS_METHOD GetDescription(nsString& aDescription) + { + aDescription = mDescription; + return NS_OK; + } + + NS_METHOD GetEnabledPlugin(nsIDOMPlugin** aEnabledPlugin) + { + // this has to be implemented by the DOM version. + *aEnabledPlugin = nsnull; + return NS_OK; + } + + NS_METHOD GetSuffixes(nsString& aSuffixes) + { + aSuffixes = mSuffixes; + return NS_OK; + } + + NS_METHOD GetType(nsString& aType) + { + aType = mType; + return NS_OK; + } + +private: + nsString mDescription; + nsString mSuffixes; + nsString mType; +}; + +NS_IMPL_ISUPPORTS(DOMMimeTypeImpl, nsIDOMMimeType::GetIID()); + +class DOMPluginImpl : public nsIDOMPlugin { +public: + NS_DECL_ISUPPORTS + + DOMPluginImpl(nsPluginTag* aPluginTag) : mPluginTag(aPluginTag) + { + NS_INIT_ISUPPORTS(); + } + + NS_METHOD GetDescription(nsString& aDescription) + { + aDescription = mPluginTag.mDescription; + return NS_OK; + } + + NS_METHOD GetFilename(nsString& aFilename) + { + // FIXME: need to keep the filename around. + aFilename = mPluginTag.mName; + return NS_OK; + } + + NS_METHOD GetName(nsString& aName) + { + aName = mPluginTag.mName; + return NS_OK; + } + + NS_METHOD GetLength(PRUint32* aLength) + { + *aLength = mPluginTag.mVariants; + return NS_OK; + } + + NS_METHOD Item(PRUint32 aIndex, nsIDOMMimeType** aReturn) + { + nsIDOMMimeType* mimeType = new DOMMimeTypeImpl(&mPluginTag, aIndex); + NS_IF_ADDREF(mimeType); + *aReturn = mimeType; + return NS_OK; + } + + NS_METHOD NamedItem(const nsString& aName, nsIDOMMimeType** aReturn) + { + for (int index = mPluginTag.mVariants - 1; index >= 0; --index) { + if (aName == mPluginTag.mMimeTypeArray[index]) + return Item(index, aReturn); + } + return NS_OK; + } + +private: + nsPluginTag mPluginTag; +}; + +NS_IMPL_ISUPPORTS(DOMPluginImpl, nsIDOMPlugin::GetIID()); + +NS_IMETHODIMP +nsPluginHostImpl::GetPluginCount(PRUint32* aPluginCount) +{ + if (PR_FALSE == mPluginsLoaded) + LoadPlugins(); + + PRUint32 count = 0; + + nsPluginTag* plugin = mPlugins; + while (plugin != nsnull) { + ++count; + plugin = plugin->mNext; + } + + *aPluginCount = count; + + return NS_OK; +} + +NS_IMETHODIMP +nsPluginHostImpl::GetPlugins(PRUint32 aPluginCount, nsIDOMPlugin* aPluginArray[]) +{ + if (PR_FALSE == mPluginsLoaded) + LoadPlugins(); + + nsPluginTag* plugin = mPlugins; + for (int i = 0; i < aPluginCount && plugin != nsnull; i++, plugin = plugin->mNext) { + nsIDOMPlugin* domPlugin = new DOMPluginImpl(plugin); + NS_IF_ADDREF(domPlugin); + aPluginArray[i] = domPlugin; + } + + return NS_OK; +} + nsresult nsPluginHostImpl::FindPluginEnabledForType(const char* aMimeType, nsPluginTag* &aPlugin) { @@ -1717,7 +1879,7 @@ PRLibrary* nsPluginHostImpl::LoadPluginLibrary(const char* pluginPath, const cha /* Called by GetURL and PostURL */ -NS_IMETHODIMP nsPluginHostImpl :: NewPluginURLStream(const nsString& aURL, +NS_IMETHODIMP nsPluginHostImpl::NewPluginURLStream(const nsString& aURL, nsIPluginInstance *aInstance, nsIPluginStreamListener* aListener) { @@ -1748,7 +1910,7 @@ NS_IMETHODIMP nsPluginHostImpl :: NewPluginURLStream(const nsString& aURL, /* Called by InstantiateEmbededPlugin() */ -nsresult nsPluginHostImpl :: NewEmbededPluginStream(nsIURL* aURL, +nsresult nsPluginHostImpl::NewEmbededPluginStream(nsIURL* aURL, nsIPluginInstanceOwner *aOwner, nsIPluginInstance* aInstance) { @@ -1780,7 +1942,7 @@ nsresult nsPluginHostImpl :: NewEmbededPluginStream(nsIURL* aURL, /* Called by InstantiateFullPagePlugin() */ -nsresult nsPluginHostImpl :: NewFullPagePluginStream(nsIStreamListener *&aStreamListener, +nsresult nsPluginHostImpl::NewFullPagePluginStream(nsIStreamListener *&aStreamListener, nsIPluginInstance *aInstance) { nsPluginStreamListenerPeer *listener = (nsPluginStreamListenerPeer *)new nsPluginStreamListenerPeer(); @@ -1818,7 +1980,7 @@ nsresult nsPluginHostImpl::CreateInstance(nsISupports *aOuter, return res; } -nsresult nsPluginHostImpl :: LockFactory(PRBool aLock) +nsresult nsPluginHostImpl::LockFactory(PRBool aLock) { // Not implemented in simplest case. return NS_OK; diff --git a/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.h b/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.h index 9f6b9b5cf89..810473339b3 100644 --- a/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.h +++ b/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.h @@ -36,6 +36,7 @@ class nsPluginTag { public: nsPluginTag(); + nsPluginTag(nsPluginTag* aPluginTag); ~nsPluginTag(); nsPluginTag *mNext; @@ -132,6 +133,12 @@ public: NS_IMETHOD IsPluginEnabledForExtension(const char* aExtension, const char* &aMimeType); + NS_IMETHOD + GetPluginCount(PRUint32* aPluginCount); + + NS_IMETHOD + GetPlugins(PRUint32 aPluginCount, nsIDOMPlugin* aPluginArray[]); + //nsIPluginManager2 interface - secondary methods that nsIPlugin communicates to NS_IMETHOD