[Xfce4-commits] <midori:master> Implement plugin listing for WebKit2 and abstract skip_plugin

Christian Dywan noreply at xfce.org
Fri Apr 5 00:30:02 CEST 2013


Updating branch refs/heads/master
         to 0c0549f9efe0f00e3b3537b7a091ee36afeabf5a (commit)
       from f8d82b437b0b2cd0ee0cb62d473940f9c340ce70 (commit)

commit 0c0549f9efe0f00e3b3537b7a091ee36afeabf5a
Author: Christian Dywan <christian at twotoasts.de>
Date:   Thu Apr 4 23:31:07 2013 +0200

    Implement plugin listing for WebKit2 and abstract skip_plugin

 extensions/nsplugin-manager.vala |    2 +-
 midori/midori-view.c             |   42 ++++++++++++++++++++++++++++---------
 midori/midori-websettings.c      |   13 +++++++++++
 midori/midori-websettings.h      |    3 ++
 midori/midori.vapi               |    1 +
 5 files changed, 50 insertions(+), 11 deletions(-)

diff --git a/extensions/nsplugin-manager.vala b/extensions/nsplugin-manager.vala
index 2d769f0..adebb77 100644
--- a/extensions/nsplugin-manager.vala
+++ b/extensions/nsplugin-manager.vala
@@ -65,7 +65,7 @@ public Katze.Array? extension_init () {
     SList<WebKit.WebPlugin> plugins = pdb.get_plugins ();
 
     foreach (WebKit.WebPlugin plugin in plugins) {
-        if (plugin.get_path () == null || "npwrapper." in plugin.get_path () || "plugins-wrapped" in plugin.get_path())
+        if (Midori.WebSettings.skip_plugin (plugin.get_path ()))
             continue;
         extensions.add_item (new NSPlugins.Extension (plugin));
     }
diff --git a/midori/midori-view.c b/midori/midori-view.c
index 7350023..a9ac753 100644
--- a/midori/midori-view.c
+++ b/midori/midori-view.c
@@ -3919,12 +3919,23 @@ midori_view_list_versions (GString* markup,
         ));
 }
 
+#ifdef HAVE_WEBKIT2
+static void
+midori_view_get_plugins_cb (GObject*      object,
+                            GAsyncResult* result,
+                            MidoriView*   view)
+{
+    GList* plugins = webkit_web_context_get_plugins_finish (WEBKIT_WEB_CONTEXT (object), result, NULL);
+    g_object_set_data (object, "nsplugins", plugins);
+    midori_view_reload (view, FALSE);
+}
+#endif
+
 void
 midori_view_list_plugins (MidoriView* view,
                           GString*    ns_plugins,
                           gboolean    html)
 {
-    #ifndef HAVE_WEBKIT2
     if (!midori_web_settings_has_plugin_support ())
         return;
 
@@ -3933,14 +3944,29 @@ midori_view_list_plugins (MidoriView* view,
     else
         g_string_append_c (ns_plugins, '\n');
 
-    #if WEBKIT_CHECK_VERSION (1, 3, 8)
+    #ifdef HAVE_WEBKIT2
+    WebKitWebContext* context = webkit_web_context_get_default ();
+    GList* plugins = g_object_get_data (G_OBJECT (context), "nsplugins");
+    if (plugins == NULL)
+    {
+        midori_view_add_version (ns_plugins, html, g_strdup ("…"));
+        webkit_web_context_get_plugins (context, NULL, (GAsyncReadyCallback)midori_view_get_plugins_cb, view);
+    }
+    else
+        for (; plugins != NULL; plugins = g_list_next (plugins))
+        {
+            if (!midori_web_settings_skip_plugin (webkit_plugin_get_path (plugins->data)))
+                midori_view_add_version (ns_plugins, html, g_strdup_printf ("%s\t%s",
+                    webkit_plugin_get_name (plugins->data),
+                    html ? webkit_plugin_get_description (plugins->data) : ""));
+        }
+    #elif WEBKIT_CHECK_VERSION (1, 3, 8)
     WebKitWebPluginDatabase* pdb = webkit_get_web_plugin_database ();
     GSList* plugins = webkit_web_plugin_database_get_plugins (pdb);
     GSList* plugin = plugins;
     for (; plugin != NULL; plugin = g_slist_next (plugin))
     {
-        const gchar* path = webkit_web_plugin_get_path (plugin->data);
-        if (!path || strstr (path, "npwrapper.") || strstr (path, "plugins-wrapped"))
+        if (midori_web_settings_skip_plugin (webkit_web_plugin_get_path (plugin->data)))
             continue;
         midori_view_add_version (ns_plugins, html, g_strdup_printf ("%s\t%s",
             webkit_web_plugin_get_name (plugin->data),
@@ -3965,9 +3991,8 @@ midori_view_list_plugins (MidoriView* view,
         while (items[i] != NULL)
         {
             gchar** parts = g_strsplit (items[i], "|", 2);
-            if (parts[0]
-             && !strstr (parts[1], "npwrapper.") && !strstr (parts[1], "plugins-wrapped")
-             && !g_str_equal (parts[1], "undefined"))
+            if (parts[0] && !g_str_equal (parts[1], "undefined")
+             && !midori_web_settings_skip_plugin (parts[1]))
                 midori_view_add_version (ns_plugins, html, g_strdup_printf ("%s\t%s",
                     parts[1], html ? parts[0] : ""));
             g_strfreev (parts);
@@ -3979,9 +4004,6 @@ midori_view_list_plugins (MidoriView* view,
         g_strfreev (items);
         g_free (value);
     #endif
-    #else
-    return;
-    #endif
 }
 
 static void
diff --git a/midori/midori-websettings.c b/midori/midori-websettings.c
index 7f7385a..7bc820a 100644
--- a/midori/midori-websettings.c
+++ b/midori/midori-websettings.c
@@ -625,6 +625,19 @@ midori_web_settings_has_plugin_support (void)
 }
 
 /**
+ * midori_web_settings_skip_plugin:
+ *
+ * Returns: %TRUE if the passed plugin shouldn't be shown in UI listings.
+ *
+ * Since: 0.5.1
+ **/
+gboolean
+midori_web_settings_skip_plugin (const gchar* path)
+{
+    return !path || strstr (path, "npwrapper.") || strstr (path, "plugins-wrapped");
+}
+
+/**
  * midori_web_settings_get_site_data_policy:
  *
  * Tests if @uri may store site data.
diff --git a/midori/midori-websettings.h b/midori/midori-websettings.h
index 897ad14..67c587b 100644
--- a/midori/midori-websettings.h
+++ b/midori/midori-websettings.h
@@ -175,6 +175,9 @@ midori_web_settings_get_system_name        (gchar**            architecture,
 gboolean
 midori_web_settings_has_plugin_support     (void);
 
+gboolean
+midori_web_settings_skip_plugin            (const gchar* path);
+
 typedef enum
 {
     MIDORI_SITE_DATA_UNDETERMINED,
diff --git a/midori/midori.vapi b/midori/midori.vapi
index ed89134..38f8a69 100644
--- a/midori/midori.vapi
+++ b/midori/midori.vapi
@@ -222,6 +222,7 @@ namespace Midori {
         [NoAccessorMethod]
         public MidoriStartup load_on_startup { get; set; }
         public static bool has_plugin_support ();
+        public static bool skip_plugin (string path);
     }
 
     [CCode (cheader_filename = "midori/midori-websettings.h", cprefix = "MIDORI_STARTUP_")]


More information about the Xfce4-commits mailing list