[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