--- a/dom/plugins/base/nsPluginTags.cpp
+++ b/dom/plugins/base/nsPluginTags.cpp
@@ -100,82 +100,20 @@ mIsJavaPlugin(false),
mIsNPRuntimeEnabledJavaPlugin(false),
mIsFlashPlugin(false),
mFileName(aPluginInfo->fFileName),
mFullPath(aPluginInfo->fFullPath),
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();
}
nsPluginTag::nsPluginTag(const char* aName,
const char* aDescription,
const char* aFileName,
const char* aFullPath,
const char* aVersion,
@@ -186,47 +124,110 @@ nsPluginTag::nsPluginTag(const char* aNa
PRInt64 aLastModifiedTime,
bool aArgsAreUTF8)
: mPluginHost(nsnull),
mName(aName),
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();
}
nsPluginTag::~nsPluginTag()
{
NS_ASSERTION(!mNext, "Risk of exhausting the stack space, bug 486349");
}
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)
{
PRInt32 numberOfBytes = aString.Length();
PRInt32 outUnicodeLen;
nsAutoString buffer;
nsresult rv = aUnicodeDecoder->GetMaxLength(aString.get(), numberOfBytes,
--- a/dom/plugins/base/nsPluginTags.h
+++ b/dom/plugins/base/nsPluginTags.h
@@ -114,13 +114,17 @@ public:
bool mIsFlashPlugin;
nsCString mFileName; // UTF-8
nsCString mFullPath; // UTF-8
nsCString mVersion; // UTF-8
PRInt64 mLastModifiedTime;
nsCOMPtr<nsITimer> mUnloadTimer;
private:
PRUint32 mFlags;
-
+
+ void InitMime(const char* const* aMimeTypes,
+ const char* const* aMimeDescriptions,
+ const char* const* aExtensions,
+ PRUint32 aVariantCount);
nsresult EnsureMembersAreUTF8();
};
#endif // nsPluginTags_h_