Bug 419582: Unblocklisted plugin should be set to enable on startup.

r+sr=jst


git-svn-id: svn://10.0.0.236/trunk@248060 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
dtownsend%oxymoronical.com
2008-03-18 10:38:16 +00:00
parent 208bdafac9
commit 3a7a9e1a44
5 changed files with 68 additions and 59 deletions

View File

@@ -1075,11 +1075,9 @@ nsPluginTag::SetBlocklisted(PRBool aBlocklisted)
if (HasFlag(NS_PLUGIN_FLAG_BLOCKLISTED) == aBlocklisted)
return NS_OK;
if (aBlocklisted) {
if (aBlocklisted)
Mark(NS_PLUGIN_FLAG_BLOCKLISTED);
if (HasFlag(NS_PLUGIN_FLAG_ENABLED))
UnMark(NS_PLUGIN_FLAG_ENABLED);
} else
else
UnMark(NS_PLUGIN_FLAG_BLOCKLISTED);
mPluginHost->UpdatePluginInfo(nsnull);
@@ -3531,7 +3529,7 @@ NS_IMETHODIMP nsPluginHostImpl::InstantiateEmbeddedPlugin(const char *aMimeType,
// disabled, we don't want to go on and end up in SetUpDefaultPluginInstance.
nsPluginTag* pluginTag = FindPluginForType(aMimeType, PR_FALSE);
if (pluginTag) {
if (!pluginTag->HasFlag(NS_PLUGIN_FLAG_ENABLED)) {
if (!pluginTag->IsEnabled()) {
return NS_ERROR_NOT_AVAILABLE;
}
} else if (!mJavaEnabled && IsJavaMIMEType(aMimeType)) {
@@ -4217,13 +4215,7 @@ nsPluginHostImpl::IsPluginEnabledForType(const char* aMimeType)
return NS_ERROR_FAILURE;
}
if (!mJavaEnabled && IsJavaMIMEType(aMimeType)) {
// Return DISABLED whether we have a java plugin or not -- if it's
// disabled, it's disabled.
return NS_ERROR_PLUGIN_DISABLED;
}
if (!plugin->HasFlag(NS_PLUGIN_FLAG_ENABLED)) {
if (!plugin->IsEnabled()) {
if (plugin->HasFlag(NS_PLUGIN_FLAG_BLOCKLISTED))
return NS_ERROR_PLUGIN_BLOCKLISTED;
else
@@ -4431,7 +4423,7 @@ nsPluginHostImpl::GetPluginCount(PRUint32* aPluginCount)
nsPluginTag* plugin = mPlugins;
while (plugin != nsnull) {
if (plugin->HasFlag(NS_PLUGIN_FLAG_ENABLED)) {
if (plugin->IsEnabled()) {
++count;
}
plugin = plugin->mNext;
@@ -4451,7 +4443,7 @@ nsPluginHostImpl::GetPlugins(PRUint32 aPluginCount, nsIDOMPlugin** aPluginArray)
nsPluginTag* plugin = mPlugins;
for (PRUint32 i = 0; i < aPluginCount && plugin; plugin = plugin->mNext) {
if (plugin->HasFlag(NS_PLUGIN_FLAG_ENABLED)) {
if (plugin->IsEnabled()) {
nsIDOMPlugin* domPlugin = new DOMPluginImpl(plugin);
NS_IF_ADDREF(domPlugin);
aPluginArray[i++] = domPlugin;
@@ -4511,7 +4503,7 @@ nsPluginHostImpl::FindPluginForType(const char* aMimeType,
variants = plugins->mVariants;
for (cnt = 0; cnt < variants; cnt++) {
if ((!aCheckEnabled || plugins->HasFlag(NS_PLUGIN_FLAG_ENABLED)) &&
if ((!aCheckEnabled || plugins->IsEnabled()) &&
plugins->mMimeTypeArray[cnt] &&
(0 == PL_strcasecmp(plugins->mMimeTypeArray[cnt], aMimeType))) {
return plugins;
@@ -4550,7 +4542,7 @@ nsPluginHostImpl::FindPluginEnabledForExtension(const char* aExtension,
{
// mExtensionsArray[cnt] is a list of extensions separated
// by commas
if (plugins->HasFlag(NS_PLUGIN_FLAG_ENABLED) &&
if (plugins->IsEnabled() &&
0 == CompareExtensions(plugins->mExtensionsArray[cnt], aExtension))
{
aMimeType = plugins->mMimeTypeArray[cnt];
@@ -5258,7 +5250,8 @@ nsresult nsPluginHostImpl::ScanPluginsDirectory(nsIFile * pluginsDir,
pluginTag->mNext = mPlugins;
mPlugins = pluginTag;
pluginTag->RegisterWithCategoryManager(mOverrideInternalTypes);
if (pluginTag->IsEnabled())
pluginTag->RegisterWithCategoryManager(mOverrideInternalTypes);
}
else if (!pluginTag->HasFlag(NS_PLUGIN_FLAG_UNWANTED)) {
// we don't need it, delete it;
@@ -5552,7 +5545,7 @@ nsPluginHostImpl::UpdatePluginInfo(nsPluginTag* aPluginTag)
WritePluginInfo();
mCachedPlugins = nsnull;
if (!aPluginTag || aPluginTag->HasFlag(NS_PLUGIN_FLAG_ENABLED))
if (!aPluginTag || aPluginTag->IsEnabled())
return NS_OK;
nsCOMPtr<nsISupportsArray> instsToReload;
@@ -6997,7 +6990,8 @@ nsPluginHostImpl::ScanForRealInComponentsFolder(nsIComponentManager * aCompManag
mPlugins = pluginTag;
// last thing we need is to register this plugin with layout so it can be used in full-page mode
pluginTag->RegisterWithCategoryManager(mOverrideInternalTypes);
if (pluginTag->IsEnabled())
pluginTag->RegisterWithCategoryManager(mOverrideInternalTypes);
}
}

View File

@@ -117,24 +117,31 @@ public:
void SetHost(nsPluginHostImpl * aHost);
void TryUnloadPlugin(PRBool aForceShutdown = PR_FALSE);
void Mark(PRUint32 mask) {
PRBool wasEnabled = IsEnabled();
mFlags |= mask;
// Add mime types to the category manager only if we were made
// 'active' by setting the host
if ((mask & NS_PLUGIN_FLAG_ENABLED) && mPluginHost) {
RegisterWithCategoryManager(PR_FALSE, nsPluginTag::ePluginRegister);
// Update entries in the category manager if necessary.
if (mPluginHost && wasEnabled != IsEnabled()) {
if (wasEnabled)
RegisterWithCategoryManager(PR_FALSE, nsPluginTag::ePluginUnregister);
else
RegisterWithCategoryManager(PR_FALSE, nsPluginTag::ePluginRegister);
}
}
void UnMark(PRUint32 mask) {
PRBool wasEnabled = IsEnabled();
mFlags &= ~mask;
// Remove mime types added to the category manager only if we were
// made 'active' by setting the host
if ((mask & NS_PLUGIN_FLAG_ENABLED) && mPluginHost) {
RegisterWithCategoryManager(PR_FALSE, nsPluginTag::ePluginUnregister);
// Update entries in the category manager if necessary.
if (mPluginHost && wasEnabled != IsEnabled()) {
if (wasEnabled)
RegisterWithCategoryManager(PR_FALSE, nsPluginTag::ePluginUnregister);
else
RegisterWithCategoryManager(PR_FALSE, nsPluginTag::ePluginRegister);
}
}
PRBool HasFlag(PRUint32 flag) { return (mFlags & flag) != 0; }
PRUint32 Flags() { return mFlags; }
PRBool Equals(nsPluginTag* aPluginTag);
PRBool IsEnabled() { return HasFlag(NS_PLUGIN_FLAG_ENABLED) && !HasFlag(NS_PLUGIN_FLAG_BLOCKLISTED); }
enum nsRegisterType {
ePluginRegister,