Backed out changeset 7cd22106e8d9. Simplify code for exposing plugin file names vs. full path.
b=488181
--- a/dom/locales/en-US/chrome/plugins.properties
+++ b/dom/locales/en-US/chrome/plugins.properties
@@ -2,16 +2,16 @@
# Those strings are inserted into an HTML page, so you all HTML characters
# have to be escaped in a way that they show up correctly in HTML!
title_label=About Plugins
installedplugins_label=Installed plugins
nopluginsareinstalled_label=No plugins are installed
findmore_label=Find more information about browser plugins at
installhelp_label=Help for installing plugins is available from
-file_label=File:
+filename_label=File name:
version_label=Version:
mimetype_label=MIME Type
description_label=Description
suffixes_label=Suffixes
enabled_label=Enabled
yes_label=Yes
no_label=No
--- a/modules/plugin/base/src/nsPluginHostImpl.cpp
+++ b/modules/plugin/base/src/nsPluginHostImpl.cpp
@@ -3697,21 +3697,21 @@ nsPluginHostImpl::TrySetUpPluginInstance
// if we don't have an extension or no plugin for this extension,
// return failure as there is nothing more we can do
if (fileExtension.IsEmpty() ||
!(pluginTag = FindPluginEnabledForExtension(fileExtension.get(),
mimetype))) {
return NS_ERROR_FAILURE;
}
}
- else {
+ else
mimetype = aMimeType;
- }
NS_ASSERTION(pluginTag, "Must have plugin tag here!");
+ PRBool isJavaPlugin = pluginTag->mIsJavaPlugin;
nsCAutoString contractID(
NS_LITERAL_CSTRING(NS_INLINE_PLUGIN_CONTRACTID_PREFIX) +
nsDependentCString(mimetype));
GetPluginFactory(mimetype, getter_AddRefs(plugin));
instance = do_CreateInstance(contractID.get(), &result);
@@ -3719,17 +3719,17 @@ nsPluginHostImpl::TrySetUpPluginInstance
// couldn't create an XPCOM plugin, try to create wrapper for a
// legacy plugin
if (NS_FAILED(result)) {
if (plugin) {
#if defined(XP_WIN) && !defined(WINCE)
static BOOL firstJavaPlugin = FALSE;
BOOL restoreOrigDir = FALSE;
char origDir[_MAX_PATH];
- if (pluginTag->mIsJavaPlugin && !firstJavaPlugin) {
+ if (isJavaPlugin && !firstJavaPlugin) {
DWORD dw = ::GetCurrentDirectory(_MAX_PATH, origDir);
NS_ASSERTION(dw <= _MAX_PATH, "Falied to obtain the current directory, which may leads to incorrect class laoding");
nsCOMPtr<nsIFile> binDirectory;
result = NS_GetSpecialDirectory(NS_XPCOM_CURRENT_PROCESS_DIR,
getter_AddRefs(binDirectory));
if (NS_SUCCEEDED(result)) {
nsCAutoString path;
@@ -3990,24 +3990,43 @@ public:
return NS_OK;
}
NS_METHOD GetFilename(nsAString& aFilename)
{
PRBool bShowPath;
nsCOMPtr<nsIPrefBranch> prefService = do_GetService(NS_PREFSERVICE_CONTRACTID);
if (prefService &&
- NS_SUCCEEDED(prefService->GetBoolPref("plugin.expose_full_path", &bShowPath)) &&
+ NS_SUCCEEDED(prefService->GetBoolPref("plugin.expose_full_path",&bShowPath)) &&
bShowPath) {
+ // only show the full path if people have set the pref,
+ // the default should not reveal path information (bug 88183)
+#if defined(XP_MACOSX)
CopyUTF8toUTF16(mPluginTag.mFullPath, aFilename);
+#else
+ CopyUTF8toUTF16(mPluginTag.mFileName, aFilename);
+#endif
+ return NS_OK;
+ }
+
+ nsAutoString spec;
+ if (!mPluginTag.mFullPath.IsEmpty()) {
+#if !defined(XP_MACOSX)
+ NS_ERROR("Only MAC should be using nsPluginTag::mFullPath!");
+#endif
+ CopyUTF8toUTF16(mPluginTag.mFullPath, spec);
} else {
- CopyUTF8toUTF16(mPluginTag.mFileName, aFilename);
+ CopyUTF8toUTF16(mPluginTag.mFileName, spec);
}
- return NS_OK;
+ nsCString leafName;
+ nsCOMPtr<nsILocalFile> pluginPath;
+ NS_NewLocalFile(spec, PR_TRUE, getter_AddRefs(pluginPath));
+
+ return pluginPath->GetLeafName(aFilename);
}
NS_METHOD GetVersion(nsAString& aVersion)
{
CopyUTF8toUTF16(mPluginTag.mVersion, aVersion);
return NS_OK;
}
@@ -4347,20 +4366,24 @@ NS_IMETHODIMP nsPluginHostImpl::GetPlugi
aMimeType, pluginTag->mFileName.get()));
#ifdef NS_DEBUG
if (aMimeType && !pluginTag->mFileName.IsEmpty())
printf("For %s found plugin %s\n", aMimeType, pluginTag->mFileName.get());
#endif
if (!pluginTag->mLibrary) { // if we haven't done this yet
+ nsCOMPtr<nsILocalFile> file = do_CreateInstance("@mozilla.org/file/local;1");
+#if !defined(XP_MACOSX)
+ file->InitWithPath(NS_ConvertUTF8toUTF16(pluginTag->mFileName));
+#else
if (pluginTag->mFullPath.IsEmpty())
return NS_ERROR_FAILURE;
- nsCOMPtr<nsILocalFile> file = do_CreateInstance("@mozilla.org/file/local;1");
file->InitWithPath(NS_ConvertUTF8toUTF16(pluginTag->mFullPath));
+#endif
nsPluginFile pluginFile(file);
PRLibrary* pluginLibrary = NULL;
if (pluginFile.LoadPlugin(pluginLibrary) != NS_OK || pluginLibrary == NULL)
return NS_ERROR_FAILURE;
// remove from unused lib list, if it is there
if (mUnusedLibraries.Contains(pluginLibrary))
--- a/modules/plugin/base/src/nsPluginsDirBeOS.cpp
+++ b/modules/plugin/base/src/nsPluginsDirBeOS.cpp
@@ -159,26 +159,22 @@ typedef char* (*BeOS_Plugin_GetMIMEDescr
/**
* Obtains all of the information currently available for this plugin.
*/
nsresult nsPluginFile::GetPluginInfo(nsPluginInfo& info)
{
info.fVersion = nsnull;
-
- nsCAutoString fullPath;
- if (NS_FAILED(rv = mPlugin->GetNativePath(path)))
+ nsCAutoString fpath;
+ nsresult rv = mPlugin->GetNativePath(fpath);
+ if (NS_OK != rv) {
return rv;
-
- nsCAutoString fileName;
- if (NS_FAILED(rv = mPlugin->GetNativeLeafName(fileName)))
- return rv;
-
- const char *path = fullPath.get();
+ }
+ const char *path = fpath.get();
int i;
#ifdef NS_PLUGIN_BEOS_DEBUG
printf("nsPluginFile::GetPluginInfo() an attempt to load MIME String\n");
printf("path = <%s>\n", path);
#endif
// get supported mime types
@@ -242,18 +238,18 @@ nsresult nsPluginFile::GetPluginInfo(nsP
info.fDescription = ToNewCString(NS_ConvertUTF8toUTF16(vinfo.long_info));
} else {
// use filename as its name
info.fName = GetFileName(path);
info.fDescription = PL_strdup("");
}
info.fVariantCount = types_num;
- info.fFullPath = PL_strdup(fullPath.get());
- info.fFileName = PL_strdup(fileName.get());
+ info.fFileName = PL_strdup(path);
+
#ifdef NS_PLUGIN_BEOS_DEBUG
printf("info.fFileName = %s\n", info.fFileName);
printf("info.fName = %s\n", info.fName);
printf("info.fDescription = %s\n", info.fDescription);
#endif
return NS_OK;
@@ -277,19 +273,16 @@ nsresult nsPluginFile::FreePluginInfo(ns
if (info.fExtensionArray[i])
PL_strfree(info.fExtensionArray[i]);
}
PR_FREEIF(info.fMimeTypeArray);
PR_FREEIF(info.fMimeDescriptionArray);
PR_FREEIF(info.fExtensionArray);
- if (info.fFullPath)
- PL_strfree(info.fFullPath);
-
if (info.fFileName)
PL_strfree(info.fFileName);
if (info.fVersion)
PL_strfree(info.fVersion);
return NS_OK;
}
--- a/modules/plugin/base/src/nsPluginsDirOS2.cpp
+++ b/modules/plugin/base/src/nsPluginsDirOS2.cpp
@@ -214,25 +214,21 @@ nsresult nsPluginFile::LoadPlugin( PRLib
// Obtains all of the information currently available for this plugin.
nsresult nsPluginFile::GetPluginInfo( nsPluginInfo &info)
{
nsresult rc = NS_ERROR_FAILURE;
HMODULE hPlug = 0; // Need a HMODULE to query resource statements
char failure[ CCHMAXPATH] = "";
APIRET ret;
- nsCAutoString path;
- if (NS_FAILED(rv = mPlugin->GetNativePath(path)))
- return rv;
-
- nsCAutoString fileName;
- if (NS_FAILED(rv = mPlugin->GetNativeLeafName(fileName)))
- return rv;
-
- ret = DosLoadModule( failure, CCHMAXPATH, path.get(), &hPlug);
+ const char* path;
+ nsCAutoString temp;
+ mPlugin->GetNativePath(temp);
+ path = temp.get();
+ ret = DosLoadModule( failure, CCHMAXPATH, path, &hPlug);
info.fVersion = nsnull;
while( ret == NO_ERROR)
{
info.fName = LoadRCDATAString( hPlug, NS_INFO_ProductName);
info.fVersion = LoadRCDATAVersion( hPlug, NS_INFO_ProductVersion);
@@ -254,37 +250,33 @@ nsresult nsPluginFile::GetPluginInfo( ns
if( info.fMimeTypeArray == nsnull) break;
info.fMimeDescriptionArray = MakeStringArray(info.fVariantCount, mimeDescription);
if( nsnull == info.fMimeDescriptionArray) break;
info.fExtensionArray = MakeStringArray(info.fVariantCount, extensions);
if( nsnull == info.fExtensionArray) break;
- info.fFullPath = PL_strdup(path.get());
- info.fFileName = PL_strdup(fileName.get());
+ info.fFileName = PL_strdup(path);
rc = NS_OK;
break;
}
if( 0 != hPlug)
DosFreeModule( hPlug);
return rc;
}
nsresult nsPluginFile::FreePluginInfo(nsPluginInfo& info)
{
if(info.fName != nsnull)
PL_strfree(info.fName);
-
- if(info.fFullPath != nsnull)
- PL_strfree(info.fFullPath);
-
+
if(info.fFileName != nsnull)
PL_strfree(info.fFileName);
if(info.fVersion != nsnull)
PL_strfree(info.fVersion);
if(info.fDescription != nsnull)
PL_strfree(info.fDescription);
--- a/modules/plugin/base/src/nsPluginsDirUnix.cpp
+++ b/modules/plugin/base/src/nsPluginsDirUnix.cpp
@@ -429,17 +429,17 @@ nsresult nsPluginFile::LoadPlugin(PRLibr
}
/**
* Obtains all of the information currently available for this plugin.
*/
nsresult nsPluginFile::GetPluginInfo(nsPluginInfo& info)
{
nsresult rv;
- const char *mimedescr = NULL, *name = NULL, *description = NULL;
+ const char* mimedescr = 0, *name = 0, *description = 0;
// No, this doesn't leak. GetGlobalServiceManager() doesn't addref
// it's out pointer. Maybe it should.
nsIServiceManagerObsolete* mgr;
nsServiceManager::GetGlobalServiceManager((nsIServiceManager**)&mgr);
nsFactoryProc nsGetFactory =
(nsFactoryProc) PR_FindFunctionSymbol(pLibrary, "NSGetFactory");
@@ -483,30 +483,23 @@ nsresult nsPluginFile::GetPluginInfo(nsP
info.fVersion = PL_strdup(npGetPluginVersion());
plugin->GetMIMEDescription(&mimedescr);
#ifdef NS_DEBUG
printf("GetMIMEDescription() returned \"%s\"\n", mimedescr);
#endif
if (NS_FAILED(rv = ParsePluginMimeDescription(mimedescr, info)))
return rv;
-
- nsCAutoString path;
- if (NS_FAILED(rv = mPlugin->GetNativePath(path)))
+ nsCAutoString filename;
+ if (NS_FAILED(rv = mPlugin->GetNativePath(filename)))
return rv;
- info.fFullPath = PL_strdup(path.get());
-
- nsCAutoString fileName;
- if (NS_FAILED(rv = mPlugin->GetNativeLeafName(fileName)))
- return rv;
- info.fFileName = PL_strdup(fileName.get());
-
+ info.fFileName = PL_strdup(filename.get());
plugin->GetValue(nsPluginVariable_NameString, &name);
if (!name)
- name = "";
+ name = PL_strrchr(info.fFileName, '/') + 1;
info.fName = PL_strdup(name);
plugin->GetValue(nsPluginVariable_DescriptionString, &description);
if (!description)
description = "";
info.fDescription = PL_strdup(description);
}
return NS_OK;
@@ -531,19 +524,16 @@ nsresult nsPluginFile::FreePluginInfo(ns
if (info.fExtensionArray[i] != nsnull)
PL_strfree(info.fExtensionArray[i]);
}
PR_FREEIF(info.fMimeTypeArray);
PR_FREEIF(info.fMimeDescriptionArray);
PR_FREEIF(info.fExtensionArray);
- if (info.fFullPath != nsnull)
- PL_strfree(info.fFullPath);
-
if (info.fFileName != nsnull)
PL_strfree(info.fFileName);
if (info.fVersion != nsnull)
PL_strfree(info.fVersion);
return NS_OK;
}
--- a/modules/plugin/base/src/nsPluginsDirWin.cpp
+++ b/modules/plugin/base/src/nsPluginsDirWin.cpp
@@ -254,39 +254,34 @@ nsresult nsPluginFile::LoadPlugin(PRLibr
return NS_OK;
}
/**
* Obtains all of the information currently available for this plugin.
*/
nsresult nsPluginFile::GetPluginInfo(nsPluginInfo& info)
{
- nsresult rv = NS_OK;
+ nsresult res = NS_OK;
DWORD zerome, versionsize;
TCHAR* verbuf = nsnull;
const TCHAR* path;
if (!mPlugin)
return NS_ERROR_NULL_POINTER;
- nsCAutoString fullPath;
- if (NS_FAILED(rv = mPlugin->GetNativePath(fullPath)))
- return rv;
-
- nsCAutoString fileName;
- if (NS_FAILED(rv = mPlugin->GetNativeLeafName(fileName)))
- return rv;
+ nsCAutoString temp;
+ mPlugin->GetNativePath(temp);
#ifdef UNICODE
- NS_ConvertASCIItoUTF16 utf16Path(fullPath);
- path = utf16Path.get();
+ NS_ConvertASCIItoUTF16 temp2(temp);
+ path = temp2.get();
versionsize = ::GetFileVersionInfoSizeW((TCHAR*)path, &zerome);
#else
- path = fullPath.get();
+ path = temp.get();
versionsize = ::GetFileVersionInfoSize((TCHAR*)path, &zerome);
#endif
if (versionsize > 0)
verbuf = (TCHAR*)PR_Malloc(versionsize);
if (!verbuf)
return NS_ERROR_OUT_OF_MEMORY;
@@ -302,31 +297,30 @@ nsresult nsPluginFile::GetPluginInfo(nsP
char *mimeType = GetKeyValue(verbuf, TEXT("\\StringFileInfo\\040904E4\\MIMEType"));
char *mimeDescription = GetKeyValue(verbuf, TEXT("\\StringFileInfo\\040904E4\\FileOpenName"));
char *extensions = GetKeyValue(verbuf, TEXT("\\StringFileInfo\\040904E4\\FileExtents"));
info.fVariantCount = CalculateVariantCount(mimeType);
info.fMimeTypeArray = MakeStringArray(info.fVariantCount, mimeType);
info.fMimeDescriptionArray = MakeStringArray(info.fVariantCount, mimeDescription);
info.fExtensionArray = MakeStringArray(info.fVariantCount, extensions);
- info.fFullPath = PL_strdup(fullPath.get());
- info.fFileName = PL_strdup(fileName.get());
+ info.fFileName = PL_strdup(temp.get());
info.fVersion = GetVersion(verbuf);
PL_strfree(mimeType);
PL_strfree(mimeDescription);
PL_strfree(extensions);
}
else {
- rv = NS_ERROR_FAILURE;
+ res = NS_ERROR_FAILURE;
}
PR_Free(verbuf);
- return rv;
+ return res;
}
nsresult nsPluginFile::FreePluginInfo(nsPluginInfo& info)
{
if (info.fName)
PL_strfree(info.fName);
if (info.fDescription)
@@ -336,19 +330,16 @@ nsresult nsPluginFile::FreePluginInfo(ns
FreeStringArray(info.fVariantCount, info.fMimeTypeArray);
if (info.fMimeDescriptionArray)
FreeStringArray(info.fVariantCount, info.fMimeDescriptionArray);
if (info.fExtensionArray)
FreeStringArray(info.fVariantCount, info.fExtensionArray);
- if (info.fFullPath)
- PL_strfree(info.fFullPath);
-
if (info.fFileName)
PL_strfree(info.fFileName);
if (info.fVersion)
PR_smprintf_free(info.fVersion);
ZeroMemory((void *)&info, sizeof(info));
--- a/toolkit/content/plugins.html
+++ b/toolkit/content/plugins.html
@@ -111,17 +111,17 @@
var plugin = navigator.plugins[i];
if (plugin)
{
document.write("<h2 class=\"plugname\">");
document.write(plugin.name);
document.writeln("<\/h2>");
- document.writeln("<dl><dd><span class=\"label\">" + pluginsbundle.GetStringFromName("file_label") + "<\/span> ");
+ document.writeln("<dl><dd><span class=\"label\">" + pluginsbundle.GetStringFromName("filename_label") + "<\/span> ");
document.write(plugin.filename);
document.writeln("<\/dd><dd><span class=\"label\">" + pluginsbundle.GetStringFromName("version_label") + "<\/span> ");
document.write(plugin.version);
document.writeln("<\/dd><dd>");
document.write(plugin.description);
document.writeln("<\/dd><\/dl>");
document.writeln("<table border=\"1\" class=\"contenttable\">");