From b91fe291d900a4977622be172d616b49a10d75ed Mon Sep 17 00:00:00 2001 From: "timeless%mozdev.org" Date: Tue, 21 Mar 2006 05:31:59 +0000 Subject: [PATCH] Bug 210724 Plugins disabled in preferences but still visible from JavaScript navigator.plugins and navigator.mimeTypes arrays r=jst sr=jst git-svn-id: svn://10.0.0.236/trunk@192680 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/dom/src/base/nsPluginArray.cpp | 27 +++++++++++++++++++++----- mozilla/dom/src/base/nsPluginArray.h | 1 + 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/mozilla/dom/src/base/nsPluginArray.cpp b/mozilla/dom/src/base/nsPluginArray.cpp index 73b7685fb56..9670a10524d 100644 --- a/mozilla/dom/src/base/nsPluginArray.cpp +++ b/mozilla/dom/src/base/nsPluginArray.cpp @@ -88,17 +88,32 @@ NS_IMPL_RELEASE(nsPluginArray) NS_IMETHODIMP nsPluginArray::GetLength(PRUint32* aLength) { - if (mPluginHost) + if (AllowPlugins() && mPluginHost) return mPluginHost->GetPluginCount(aLength); *aLength = 0; return NS_OK; } +PRBool +nsPluginArray::AllowPlugins() +{ + PRBool allowPlugins = PR_FALSE; + if (mDocShell) + if (NS_FAILED(mDocShell->GetAllowPlugins(&allowPlugins))) + allowPlugins = PR_FALSE; + + return allowPlugins; +} + NS_IMETHODIMP nsPluginArray::Item(PRUint32 aIndex, nsIDOMPlugin** aReturn) { NS_PRECONDITION(nsnull != aReturn, "null arg"); + *aReturn = nsnull; + + if (!AllowPlugins()) + return NS_OK; if (mPluginArray == nsnull) { nsresult rv = GetPlugins(); @@ -106,8 +121,6 @@ nsPluginArray::Item(PRUint32 aIndex, nsIDOMPlugin** aReturn) return rv; } - *aReturn = nsnull; - if (aIndex < mPluginCount) { *aReturn = mPluginArray[aIndex]; NS_IF_ADDREF(*aReturn); @@ -120,6 +133,10 @@ NS_IMETHODIMP nsPluginArray::NamedItem(const nsAString& aName, nsIDOMPlugin** aReturn) { NS_PRECONDITION(nsnull != aReturn, "null arg"); + *aReturn = nsnull; + + if (!AllowPlugins()) + return NS_OK; if (mPluginArray == nsnull) { nsresult rv = GetPlugins(); @@ -127,8 +144,6 @@ nsPluginArray::NamedItem(const nsAString& aName, nsIDOMPlugin** aReturn) return rv; } - *aReturn = nsnull; - for (PRUint32 i = 0; i < mPluginCount; i++) { nsAutoString pluginName; nsIDOMPlugin* plugin = mPluginArray[i]; @@ -175,6 +190,8 @@ NS_IMETHODIMP nsPluginArray::Refresh(PRBool aReloadDocuments) { nsresult res = NS_OK; + if (!AllowPlugins()) + return NS_SUCCESS_LOSS_OF_INSIGNIFICANT_DATA; // refresh the component registry first, see bug 87913 nsCOMPtr servManager; diff --git a/mozilla/dom/src/base/nsPluginArray.h b/mozilla/dom/src/base/nsPluginArray.h index 0cef800c379..df1ed61c01b 100644 --- a/mozilla/dom/src/base/nsPluginArray.h +++ b/mozilla/dom/src/base/nsPluginArray.h @@ -66,6 +66,7 @@ public: private: nsresult GetPlugins(); + PRBool AllowPlugins(); public: void SetDocShell(nsIDocShell* aDocShell);