]> spindle.queued.net Git - midori/commitdiff
Implement internal about:plugins page
authorChristian Dywan <christian@twotoasts.de>
Thu, 24 Feb 2011 21:27:55 +0000 (22:27 +0100)
committerChristian Dywan <christian@twotoasts.de>
Thu, 24 Feb 2011 21:27:55 +0000 (22:27 +0100)
midori/midori-view.c

index e928f4a1221f1afcb5634b1f4b38e2b888ce0701..6ede1e3ddcb93b0573958d0a85c6a2b685759abc 100644 (file)
@@ -3914,6 +3914,45 @@ midori_view_set_uri (MidoriView*  view,
                 g_free (ident);
                 g_free (sys_name);
             }
+            else if (!strcmp (uri, "about:plugins"))
+            {
+                GtkWidget* web_view = webkit_web_view_new ();
+                WebKitWebFrame* web_frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (web_view));
+                JSContextRef js_context = webkit_web_frame_get_global_context (web_frame);
+                /* This snippet joins the available plugins into a string like this:
+                   URI1|title1,URI2|title2 */
+                gchar* value = sokoke_js_script_eval (js_context,
+                    "function plugins (l) { var f = new Array (); for (i in l) "
+                    "{ var p = l[i].name + '|' + l[i].filename; "
+                    "if (f.indexOf (p) == -1) f.push (p); } return f; }"
+                    "plugins (navigator.plugins)", NULL);
+                gchar** items = g_strsplit (value, ",", 0);
+                guint i = 0;
+                GString* ns_plugins = g_string_new (
+                    "<html><head><title>about:plugins</title><head><body>");
+                if (items != NULL)
+                while (items[i] != NULL)
+                {
+                    gchar** parts = g_strsplit (items[i], "|", 2);
+                    if (parts && *parts && !g_str_equal (parts[1], "undefined"))
+                    {
+                        gchar* desc = parts[1];
+                        gsize j = 0;
+                        while (desc[j++])
+                            if (desc[j-1] == ';')
+                                desc[j-1] = '\n';
+                        g_string_append (ns_plugins, parts[0]);
+                        g_string_append (ns_plugins, " &nbsp; ");
+                        g_string_append (ns_plugins, desc);
+                        g_string_append (ns_plugins, "<br>");
+                    }
+                    g_strfreev (parts);
+                    i++;
+                }
+                g_string_append (ns_plugins, "</body>");
+                katze_assign (view->uri, g_strdup (uri));
+                data = g_string_free (ns_plugins, FALSE);
+            }
             else
             {
                 katze_assign (view->uri, g_strdup (uri));