Fix downloads
authorUli Schlachter <psychon@znc.in>
Tue, 26 May 2009 16:35:42 +0000 (18:35 +0200)
committerUli Schlachter <psychon@znc.in>
Thu, 28 May 2009 09:51:46 +0000 (11:51 +0200)
This adds mime-type-policy-decision-requested callback which simply downloads
everything which can't be displayed. Without this, nothing is ever downloaded.

Google lead me to this:
http://gitorious.org/qtwebkit/qtwebkit/commit/1f30e169cd379ac8917040e4734e11d8283bab5d
https://bugs.webkit.org/show_bug.cgi?id=25987

Signed-off-by: Uli Schlachter <psychon@znc.in>

uzbl.c

diff --git a/uzbl.c b/uzbl.c
index 5a96d2b..6a6f77f 100644 (file)
--- a/uzbl.c
+++ b/uzbl.c
@@ -348,6 +348,23 @@ new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequ
     return (FALSE);
 }
 
+static gboolean
+mime_policy_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, gchar *mime_type,  WebKitWebPolicyDecision *policy_decision, gpointer user_data) {
+    (void) frame;
+    (void) request;
+    (void) user_data;
+
+    /* If we can display it, let's display it... */
+    if (webkit_web_view_can_show_mime_type (web_view, mime_type)) {
+        webkit_web_policy_decision_use (policy_decision);
+        return TRUE;
+    }
+
+    /* ...everything we can't displayed is downloaded */
+    webkit_web_policy_decision_download (policy_decision);
+    return TRUE;
+}
+
 WebKitWebView*
 create_web_view_cb (WebKitWebView  *web_view, WebKitWebFrame *frame, gpointer user_data) {
     (void) web_view;
@@ -1948,6 +1965,7 @@ create_browser () {
     g_signal_connect (G_OBJECT (g->web_view), "new-window-policy-decision-requested", G_CALLBACK (new_window_cb), g->web_view);
     g_signal_connect (G_OBJECT (g->web_view), "download-requested", G_CALLBACK (download_cb), g->web_view);
     g_signal_connect (G_OBJECT (g->web_view), "create-web-view", G_CALLBACK (create_web_view_cb), g->web_view);
+    g_signal_connect (G_OBJECT (g->web_view), "mime-type-policy-decision-requested", G_CALLBACK (mime_policy_cb), g->web_view);
 
     return scrolled_window;
 }