From 38fd1f02bbdc5edda7daf8210a0d2b241bc9b412 Mon Sep 17 00:00:00 2001 From: "Devin J. Pohly" Date: Thu, 27 Oct 2011 12:06:16 -0400 Subject: add request_handler hook This creates a handler `request_handler' in the same vein as scheme_handler, download_handler, etc., which is called whenever the page requests a URI. (Possible applications include Adblock and SSL enforcement.) The handler should get the URI from $1 and print the URI of the resource that should be loaded instead, or print nothing to allow the request unmodified. --- src/callbacks.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/callbacks.c') diff --git a/src/callbacks.c b/src/callbacks.c index f939454..23b8d55 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -358,7 +358,31 @@ request_starting_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitWebRes (void) response; (void) user_data; + const gchar* uri = webkit_network_request_get_uri (request); + + if (uzbl.state.verbose) + printf("Request starting -> %s\n", uri); send_event (REQUEST_STARTING, NULL, TYPE_STR, webkit_network_request_get_uri(request), NULL); + + if (uzbl.behave.request_handler) { + GString *result = g_string_new (""); + GArray *a = g_array_new (TRUE, FALSE, sizeof(gchar*)); + const CommandInfo *c = parse_command_parts(uzbl.behave.request_handler, a); + + if(c) { + g_array_append_val(a, uri); + run_parsed_command(c, a, result); + } + g_array_free(a, TRUE); + + if(result->len > 0) { + char *p = strchr(result->str, '\n' ); + if ( p != NULL ) *p = '\0'; + webkit_network_request_set_uri(request, result->str); + } + + g_string_free(result, TRUE); + } } void -- cgit v1.2.3