mozilla-prefer_plugin_pref.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Thu, 13 Jan 2011 12:12:14 +0100
changeset 217 4b1284f6082b
parent 123 1d88ea95ad20
child 289 3c0dff7ca9c4
permissions -rw-r--r--
changelog
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8
19a8c8d53349 Fixed patch comments
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1
diff changeset
     1
From: Ubuntu
19a8c8d53349 Fixed patch comments
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1
diff changeset
     2
Subject: introduce a pref to prefer certain plugins for mime-types
19a8c8d53349 Fixed patch comments
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 1
diff changeset
     3
1
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     4
diff --git a/modules/plugin/base/src/nsPluginHost.cpp b/modules/plugin/base/src/nsPluginHost.cpp
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     5
--- a/modules/plugin/base/src/nsPluginHost.cpp
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     6
+++ b/modules/plugin/base/src/nsPluginHost.cpp
123
1d88ea95ad20 update to beta3
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 8
diff changeset
     7
@@ -1620,17 +1620,47 @@ nsPluginHost::FindPluginForType(const ch
1d88ea95ad20 update to beta3
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 8
diff changeset
     8
   nsPluginTag *plugins = nsnull;
1d88ea95ad20 update to beta3
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 8
diff changeset
     9
   PRInt32     variants, cnt;
1d88ea95ad20 update to beta3
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 8
diff changeset
    10
 
1d88ea95ad20 update to beta3
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 8
diff changeset
    11
   LoadPlugins();
1d88ea95ad20 update to beta3
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 8
diff changeset
    12
 
1
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    13
   // if we have a mimetype passed in, search the mPlugins
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    14
   // linked list for a match
123
1d88ea95ad20 update to beta3
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 8
diff changeset
    15
   if (aMimeType) {
1
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    16
+    nsresult res;
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    17
+    nsCOMPtr<nsIPrefBranch> prefB (do_QueryInterface(mPrefService));
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    18
+
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    19
+    char *preferredPluginPath = NULL;
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    20
+    nsCAutoString mimetypePrefString ("modules.plugins.mimetype.");
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    21
+    mimetypePrefString.Append(aMimeType);
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    22
+    const char *mimetypePrefChar = mimetypePrefString.get();
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    23
+    res = prefB->GetCharPref(mimetypePrefChar, &preferredPluginPath);
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    24
+
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    25
+    if(!NS_SUCCEEDED(res)) preferredPluginPath = NULL;
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    26
+
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    27
     plugins = mPlugins;
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    28
+    if(preferredPluginPath) {
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    29
+      while (nsnull != plugins) {
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    30
+        if (0 == PL_strcasecmp(plugins->mFileName.get(), preferredPluginPath) ||
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    31
+            0 == PL_strcasecmp(plugins->mFullPath.get(), preferredPluginPath)) {
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    32
+          return plugins;
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    33
+        }
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    34
+        plugins = plugins->mNext;
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    35
+      }
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    36
+
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    37
+      // now lets search for substrings
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    38
+      plugins=mPlugins;
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    39
+      while (nsnull != plugins) {
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    40
+        if (nsnull != PL_strstr(plugins->mFileName.get(), preferredPluginPath) ||
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    41
+            nsnull != PL_strstr(plugins->mFullPath.get(), preferredPluginPath)) {
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    42
+          return plugins;
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    43
+        }
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    44
+        plugins = plugins->mNext;
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    45
+      }
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    46
+    }
123
1d88ea95ad20 update to beta3
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 8
diff changeset
    47
 
1d88ea95ad20 update to beta3
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 8
diff changeset
    48
     while (plugins) {
1
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    49
       variants = plugins->mVariants;
045edd78eceb Add missing files
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    50
       for (cnt = 0; cnt < variants; cnt++) {
123
1d88ea95ad20 update to beta3
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 8
diff changeset
    51
         if ((!aCheckEnabled || plugins->IsEnabled()) &&
1d88ea95ad20 update to beta3
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 8
diff changeset
    52
             plugins->mMimeTypeArray[cnt] &&
1d88ea95ad20 update to beta3
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 8
diff changeset
    53
             (0 == PL_strcasecmp(plugins->mMimeTypeArray[cnt], aMimeType))) {
1d88ea95ad20 update to beta3
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 8
diff changeset
    54
           return plugins;