diff options
author | portix <portix@gmx.net> | 2010-10-24 18:00:45 +0200 |
---|---|---|
committer | portix <portix@gmx.net> | 2010-10-24 18:00:45 +0200 |
commit | 877a581c57c6e045c1077a6da4f1cf9367b77989 (patch) | |
tree | ee8eb042cfb0a3ef3ad0c77f0e933aaac139fead | |
parent | de9c9138f0107fde16a65b5ad6e7e7793311ee8a (diff) | |
download | dwb-877a581c57c6e045c1077a6da4f1cf9367b77989.zip |
content blocker: use resource-request signal instead of got-headers
-rw-r--r-- | src/dwb.c | 6 | ||||
-rw-r--r-- | src/dwb.h | 1 | ||||
-rw-r--r-- | src/session.c | 8 | ||||
-rw-r--r-- | src/view.c | 23 |
4 files changed, 35 insertions, 3 deletions
@@ -503,6 +503,8 @@ dwb_set_dummy(GList *gl, WebSettings *s) { }/*}}}*/ /* dwb_got_headers_cb {{{*/ +// TODO remove this stuff, use resource-request-started signal instead +#ifdef GOT_HEADERS void dwb_got_headers_cb(SoupMessage *msg, GList *gl) { SoupContentSniffer *sniffer = soup_content_sniffer_new(); @@ -531,6 +533,7 @@ static void dwb_soup_request_cb(SoupSession *session, SoupMessage *msg, SoupSocket *socket) { g_signal_connect(msg, "got-headers", G_CALLBACK(dwb_got_headers_cb), dwb.state.fview); }/*}}}*/ +#endif /* dwb_set_content_block_regex{{{*/ static void @@ -2035,7 +2038,10 @@ void dwb_init() { dwb_init_gui(); dwb.misc.soupsession = webkit_get_default_session(); + // TODO fix got_headers_cb +#ifdef GOT_HEADERS g_signal_connect(dwb.misc.soupsession, "request-started", G_CALLBACK(dwb_soup_request_cb), NULL); +#endif dwb_init_proxy(); dwb_init_cookies(); dwb_init_vars(); @@ -272,7 +272,6 @@ struct _WebSettings { }; struct _ViewStatus { guint message_id; - //gchar *hover_uri; gboolean add_history; gchar *search_string; GList *downloads; diff --git a/src/session.c b/src/session.c index f88b4dbb..dc1df1ce 100644 --- a/src/session.c +++ b/src/session.c @@ -103,13 +103,17 @@ dwb_session_restore(const gchar *name) { g_free(uri); uri = g_strdup(line[1]); } - if (i == length) + if (i == length && lastweb) dwb_session_load_webview(lastweb, uri, last); g_strfreev(line); } g_strfreev(lines); gtk_widget_show_all(dwb.gui.window); - if (dwb.state.layout & Maximized) { + + if (!dwb.state.views) + dwb_add_view(NULL); + + if (dwb.state.layout & Maximized && dwb.state.views) { gtk_widget_hide(dwb.gui.right); for (GList *l = dwb.state.views->next; l; l=l->next) { gtk_widget_hide(((View*)l->data)->vbox); @@ -151,6 +151,29 @@ static void dwb_web_view_resource_request_cb(WebKitWebView *web, WebKitWebFrame *frame, WebKitWebResource *resource, WebKitNetworkRequest *request, WebKitNetworkResponse *response, GList *gl) { + SoupMessage *msg = webkit_network_request_get_message(request); + + if (!msg) + return; + + SoupBuffer buffer; + SoupContentSniffer *sniffer = soup_content_sniffer_new(); + View *v = gl->data; + + if (v && v->status) { + const gchar *content_type = soup_content_sniffer_sniff(sniffer, msg, &buffer, NULL); + if (!v->status->current_host) { + SoupURI *uri = soup_message_get_uri(msg); + v->status->current_host = g_strdup(uri->host); + v->status->block_current = + !dwb_get_host_blocked(dwb.fc.content_block_allow, v->status->current_host) && !dwb_get_host_blocked(dwb.fc.content_allow, v->status->current_host) + ? true : false; + } + if (v->status->block && v->status->block_current && g_regex_match_simple(dwb.misc.content_block_regex, content_type, 0, 0)) { + webkit_network_request_set_uri(request, "about:blank"); + v->status->items_blocked++; + } + } }/*}}}*/ /* dwb_web_view_script_alert_cb {{{*/ |