Moved header changing to another event.
authorDaniel Carl <danielcarl@gmx.de>
Mon, 20 Jan 2014 23:05:48 +0000 (00:05 +0100)
committerDaniel Carl <danielcarl@gmx.de>
Mon, 20 Jan 2014 23:13:29 +0000 (00:13 +0100)
The previous soup sessions "request-started" event worked to change the
headers sent, but the changes where not reflected in the view of the
webinspector that is misleading.
Now the headers are changes on the webkview "resource-request-starting"
event so that the changes headers are visible for the webinspector.

src/main.c
src/session.c

index 5a89260..b8edaa7 100644 (file)
@@ -48,6 +48,9 @@ VbCore      vb;
 static void webview_progress_cb(WebKitWebView *view, GParamSpec *pspec);
 static void webview_download_progress_cb(WebKitWebView *view, GParamSpec *pspec);
 static void webview_load_status_cb(WebKitWebView *view, GParamSpec *pspec);
+static void webview_request_starting_cb(WebKitWebView *view,
+    WebKitWebFrame *frame, WebKitWebResource *res, WebKitNetworkRequest *req,
+    WebKitNetworkResponse *resp, gpointer data);
 static void destroy_window_cb(GtkWidget *widget);
 static void scroll_cb(GtkAdjustment *adjustment);
 static WebKitWebView *inspector_new(WebKitWebInspector *inspector, WebKitWebView *webview);
@@ -433,6 +436,38 @@ static void webview_load_status_cb(WebKitWebView *view, GParamSpec *pspec)
     }
 }
 
+static void webview_request_starting_cb(WebKitWebView *view,
+    WebKitWebFrame *frame, WebKitWebResource *res, WebKitNetworkRequest *req,
+    WebKitNetworkResponse *resp, gpointer data)
+{
+    char *name, *value;
+    GHashTableIter iter;
+    SoupMessage *msg;
+
+    /* don't try to load favicon */
+    const char *uri = webkit_network_request_get_uri(req);
+    if (g_str_has_suffix(uri, "/favicon.ico")) {
+        webkit_network_request_set_uri(req, "about:blank");
+        return;
+    }
+
+    /* set/remove/change user defined headers */
+    msg = webkit_network_request_get_message(req);
+    if (!msg || !vb.config.headers) {
+        return;
+    }
+
+    g_hash_table_iter_init(&iter, vb.config.headers);
+    while (g_hash_table_iter_next(&iter, (gpointer*)&name, (gpointer*)&value)) {
+        /* allow to remove header with null value */
+        if (value == NULL) {
+            soup_message_headers_remove(msg->request_headers, name);
+        } else {
+            soup_message_headers_replace(msg->request_headers, name, value);
+        }
+    }
+}
+
 static void destroy_window_cb(GtkWidget *widget)
 {
     vb_quit();
@@ -672,6 +707,7 @@ static void setup_signals()
         "signal::mime-type-policy-decision-requested", G_CALLBACK(mimetype_decision_cb), NULL,
         "signal::download-requested", G_CALLBACK(vb_download), NULL,
         "signal::should-show-delete-interface-for-element", G_CALLBACK(gtk_false), NULL,
+        "signal::resource-request-starting", G_CALLBACK(webview_request_starting_cb), NULL,
         NULL
     );
 
index 8e67ee2..c9420fa 100644 (file)
@@ -48,7 +48,6 @@ static void cookiejar_init(CookieJar *self);
 static void cookiejar_set_property(GObject *self, guint prop_id,
     const GValue *value, GParamSpec *pspec);
 #endif
-static void request_started_cb(SoupSession *session, SoupMessage *msg, gpointer data);
 
 extern VbCore vb;
 
@@ -61,10 +60,6 @@ void session_init(void)
     g_object_set(vb.session, "max-conns-per-host", SETTING_MAX_CONNS_PER_HOST, NULL);
     g_object_set(vb.session, "accept-language-auto", true, NULL);
 
-    g_signal_connect(
-        vb.session, "request-started",
-        G_CALLBACK(request_started_cb), NULL
-    );
 #ifdef FEATURE_COOKIE
     soup_session_add_feature(
         vb.session,
@@ -125,23 +120,3 @@ static void cookiejar_set_property(GObject *self, guint prop_id, const
     flock(COOKIEJAR(self)->lock, LOCK_UN);
 }
 #endif
-
-static void request_started_cb(SoupSession *session, SoupMessage *msg, gpointer data)
-{
-    GHashTableIter iter;
-    char *name, *value;
-
-    if (!vb.config.headers) {
-        return;
-    }
-
-    g_hash_table_iter_init(&iter, vb.config.headers);
-    while (g_hash_table_iter_next(&iter, (gpointer*)&name, (gpointer*)&value)) {
-        /* allow to remove header with null value */
-        if (value == NULL) {
-            soup_message_headers_remove(msg->request_headers, name);
-        } else {
-            soup_message_headers_replace(msg->request_headers, name, value);
-        }
-    }
-}