Bug 633427: Fix bug in which we mis-label plugins as Flash plugins. This was causing us to load plugins unnecessarily when clearing private data. r=smichaud

This commit is contained in:
Josh Aas 2012-02-21 13:23:42 -05:00
parent eab4915242
commit ad1fd62b8e
2 changed files with 86 additions and 81 deletions

View File

@ -105,72 +105,10 @@ mVersion(aPluginInfo->fVersion),
mLastModifiedTime(0),
mFlags(NS_PLUGIN_FLAG_ENABLED)
{
if (!aPluginInfo->fMimeTypeArray) {
return;
}
for (PRUint32 i = 0; i < aPluginInfo->fVariantCount; i++) {
// First fill in the MIME types.
char* currentMIMEType = aPluginInfo->fMimeTypeArray[i];
if (currentMIMEType) {
if (mIsJavaPlugin) {
if (strcmp(currentMIMEType, "application/x-java-vm-npruntime") == 0) {
// This "magic MIME type" should not be exposed, but is just a signal
// to the browser that this is new-style java.
// Don't add it or its associated information to our arrays.
mIsNPRuntimeEnabledJavaPlugin = true;
continue;
}
}
mMimeTypes.AppendElement(nsCString(currentMIMEType));
if (nsPluginHost::IsJavaMIMEType(currentMIMEType)) {
mIsJavaPlugin = true;
}
else if (strcmp(currentMIMEType, "application/x-shockwave-flash") == 0) {
mIsFlashPlugin = true;
}
} else {
continue;
}
// Now fill in the MIME descriptions.
if (aPluginInfo->fMimeDescriptionArray &&
aPluginInfo->fMimeDescriptionArray[i]) {
// we should cut off the list of suffixes which the mime
// description string may have, see bug 53895
// it is usually in form "some description (*.sf1, *.sf2)"
// so we can search for the opening round bracket
char cur = '\0';
char pre = '\0';
char * p = PL_strrchr(aPluginInfo->fMimeDescriptionArray[i], '(');
if (p && (p != aPluginInfo->fMimeDescriptionArray[i])) {
if ((p - 1) && *(p - 1) == ' ') {
pre = *(p - 1);
*(p - 1) = '\0';
} else {
cur = *p;
*p = '\0';
}
}
mMimeDescriptions.AppendElement(nsCString(aPluginInfo->fMimeDescriptionArray[i]));
// restore the original string
if (cur != '\0')
*p = cur;
if (pre != '\0')
*(p - 1) = pre;
} else {
mMimeDescriptions.AppendElement(nsCString());
}
// Now fill in the extensions.
if (aPluginInfo->fExtensionArray &&
aPluginInfo->fExtensionArray[i]) {
mExtensions.AppendElement(nsCString(aPluginInfo->fExtensionArray[i]));
} else {
mExtensions.AppendElement(nsCString());
}
}
InitMime(aPluginInfo->fMimeTypeArray,
aPluginInfo->fMimeDescriptionArray,
aPluginInfo->fExtensionArray,
aPluginInfo->fVariantCount);
EnsureMembersAreUTF8();
}
@ -191,26 +129,14 @@ mDescription(aDescription),
mLibrary(nsnull),
mIsJavaPlugin(false),
mIsNPRuntimeEnabledJavaPlugin(false),
mIsFlashPlugin(false),
mFileName(aFileName),
mFullPath(aFullPath),
mVersion(aVersion),
mLastModifiedTime(aLastModifiedTime),
mFlags(0) // Caller will read in our flags from cache
{
for (PRInt32 i = 0; i < aVariants; i++) {
if (mIsJavaPlugin && aMimeTypes[i] &&
strcmp(aMimeTypes[i], "application/x-java-vm-npruntime") == 0) {
mIsNPRuntimeEnabledJavaPlugin = true;
continue;
}
mMimeTypes.AppendElement(nsCString(aMimeTypes[i]));
mMimeDescriptions.AppendElement(nsCString(aMimeDescriptions[i]));
mExtensions.AppendElement(nsCString(aExtensions[i]));
if (nsPluginHost::IsJavaMIMEType(mMimeTypes[i].get())) {
mIsJavaPlugin = true;
}
}
InitMime(aMimeTypes, aMimeDescriptions, aExtensions, static_cast<PRUint32>(aVariants));
if (!aArgsAreUTF8)
EnsureMembersAreUTF8();
}
@ -222,6 +148,81 @@ nsPluginTag::~nsPluginTag()
NS_IMPL_ISUPPORTS1(nsPluginTag, nsIPluginTag)
void nsPluginTag::InitMime(const char* const* aMimeTypes,
const char* const* aMimeDescriptions,
const char* const* aExtensions,
PRUint32 aVariantCount)
{
if (!aMimeTypes) {
return;
}
for (PRUint32 i = 0; i < aVariantCount; i++) {
if (!aMimeTypes[i]) {
continue;
}
// If we already marked this as a Java plugin, a later MIME type will tell
// us if it is npruntime-enabled.
if (mIsJavaPlugin) {
if (strcmp(aMimeTypes[i], "application/x-java-vm-npruntime") == 0) {
// This "magic MIME type" should not be exposed, but is just a signal
// to the browser that this is new-style java.
// Don't add it or its associated information to our arrays.
mIsNPRuntimeEnabledJavaPlugin = true;
continue;
}
}
// Look for certain special plugins.
if (nsPluginHost::IsJavaMIMEType(aMimeTypes[i])) {
mIsJavaPlugin = true;
} else if (strcmp(aMimeTypes[i], "application/x-shockwave-flash") == 0) {
mIsFlashPlugin = true;
}
// Fill in our MIME type array.
mMimeTypes.AppendElement(nsCString(aMimeTypes[i]));
// Now fill in the MIME descriptions.
if (aMimeDescriptions && aMimeDescriptions[i]) {
// we should cut off the list of suffixes which the mime
// description string may have, see bug 53895
// it is usually in form "some description (*.sf1, *.sf2)"
// so we can search for the opening round bracket
char cur = '\0';
char pre = '\0';
char * p = PL_strrchr(aMimeDescriptions[i], '(');
if (p && (p != aMimeDescriptions[i])) {
if ((p - 1) && *(p - 1) == ' ') {
pre = *(p - 1);
*(p - 1) = '\0';
} else {
cur = *p;
*p = '\0';
}
}
mMimeDescriptions.AppendElement(nsCString(aMimeDescriptions[i]));
// restore the original string
if (cur != '\0') {
*p = cur;
}
if (pre != '\0') {
*(p - 1) = pre;
}
} else {
mMimeDescriptions.AppendElement(nsCString());
}
// Now fill in the extensions.
if (aExtensions && aExtensions[i]) {
mExtensions.AppendElement(nsCString(aExtensions[i]));
} else {
mExtensions.AppendElement(nsCString());
}
}
}
#if !defined(XP_WIN) && !defined(XP_MACOSX)
static nsresult ConvertToUTF8(nsIUnicodeDecoder *aUnicodeDecoder,
nsAFlatCString& aString)

View File

@ -119,7 +119,11 @@ public:
nsCOMPtr<nsITimer> mUnloadTimer;
private:
PRUint32 mFlags;
void InitMime(const char* const* aMimeTypes,
const char* const* aMimeDescriptions,
const char* const* aExtensions,
PRUint32 aVariantCount);
nsresult EnsureMembersAreUTF8();
};