From 6b25c8a994a84da1b629e14cc4ce149d43da9b3a Mon Sep 17 00:00:00 2001
From: Patrick McDermott <pj@pehjota.net>
Date: Sun, 29 Oct 2017 13:49:15 -0400
Subject: MqWebView: Download responses of undisplayable MIME types

---
(limited to 'src')

diff --git a/src/web-view.c b/src/web-view.c
index 74c9da6..10e96a3 100644
--- a/src/web-view.c
+++ b/src/web-view.c
@@ -567,6 +567,38 @@ button_press_cb(GtkWidget *widget, GdkEventButton *event)
 	return TRUE;
 }
 
+static gboolean
+decide_response_policy(MqWebView G_GNUC_UNUSED *web_view,
+	WebKitResponsePolicyDecision *decision)
+{
+	if (webkit_response_policy_decision_is_mime_type_supported(decision)) {
+		webkit_policy_decision_use(WEBKIT_POLICY_DECISION(decision));
+	} else {
+		webkit_policy_decision_download(
+			WEBKIT_POLICY_DECISION(decision));
+	}
+	return TRUE;
+}
+
+static gboolean
+decide_policy_cb(MqWebView *web_view, WebKitPolicyDecision *decision,
+	WebKitPolicyDecisionType decision_type)
+{
+	switch (decision_type) {
+		case WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION:
+			/* TODO */
+			return FALSE;
+		case WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION:
+			/* TODO */
+			return FALSE;
+		case WEBKIT_POLICY_DECISION_TYPE_RESPONSE:
+			return decide_response_policy(web_view,
+				WEBKIT_RESPONSE_POLICY_DECISION(decision));
+		default:
+			return FALSE;
+	}
+}
+
 static void
 constructed(GObject *object)
 {
@@ -720,6 +752,8 @@ mq_web_view_init(MqWebView *web_view)
 		G_CALLBACK(mouse_target_changed_cb), NULL);
 	g_signal_connect(web_view, "button-press-event",
 		G_CALLBACK(button_press_cb), NULL);
+	g_signal_connect(web_view, "decide-policy",
+		G_CALLBACK(decide_policy_cb), NULL);
 }
 
 MqWebView *
--
cgit v0.9.1