summaryrefslogtreecommitdiff
path: root/surf.c
diff options
context:
space:
mode:
authorQuentin Rameau <quinq@fifth.space>2015-11-19 14:10:28 +0100
committerQuentin Rameau <quinq@fifth.space>2015-11-20 00:34:21 +0100
commit76940a9ab5ad1c9c5add53a1a077dc06369c745c (patch)
treeae59af1973c4de366a4be93ee2a2a7168ed134d8 /surf.c
parentd542773e7527758060c188f734bd6b612bbaa529 (diff)
downloadsurf-76940a9ab5ad1c9c5add53a1a077dc06369c745c.tar.gz
surf-76940a9ab5ad1c9c5add53a1a077dc06369c745c.tar.bz2
surf-76940a9ab5ad1c9c5add53a1a077dc06369c745c.zip
Integrate beforerequest() into decidepolicy()
Diffstat (limited to 'surf.c')
-rw-r--r--surf.c72
1 files changed, 32 insertions, 40 deletions
diff --git a/surf.c b/surf.c
index 74851ee..a93e951 100644
--- a/surf.c
+++ b/surf.c
@@ -103,9 +103,6 @@ static int cookiepolicy;
static char *stylefile = NULL;
static void addaccelgroup(Client *c);
-static void beforerequest(WebKitWebView *w, WebKitWebFrame *f,
- WebKitWebResource *r, WebKitNetworkRequest *req,
- WebKitNetworkResponse *resp, Client *c);
static char *buildfile(const char *path);
static char *buildpath(const char *path);
static gboolean buttonreleased(GtkWidget *w, GdkEventKey *e, Client *c);
@@ -140,7 +137,7 @@ static char *geturi(Client *c);
static const gchar *getstyle(const char *uri);
static void setstyle(Client *c, const char *style);
-static void handleplumb(Client *c, WebKitWebView *w, const gchar *uri);
+static void handleplumb(Client *c, const gchar *uri);
static void downloadstarted(WebKitWebContext *wc, WebKitDownload *d,
Client *c);
@@ -213,35 +210,6 @@ addaccelgroup(Client *c)
gtk_window_add_accel_group(GTK_WINDOW(c->win), group);
}
-void
-beforerequest(WebKitWebView *w, WebKitWebFrame *f, WebKitWebResource *r,
- WebKitNetworkRequest *req, WebKitNetworkResponse *resp,
- Client *c)
-{
- const gchar *uri = webkit_network_request_get_uri(req);
- int i, isascii = 1;
-
- if (g_str_has_suffix(uri, "/favicon.ico"))
- webkit_network_request_set_uri(req, "about:blank");
-
- if (!g_str_has_prefix(uri, "http://")
- && !g_str_has_prefix(uri, "https://")
- && !g_str_has_prefix(uri, "about:")
- && !g_str_has_prefix(uri, "file://")
- && !g_str_has_prefix(uri, "data:")
- && !g_str_has_prefix(uri, "blob:")
- && strlen(uri) > 0) {
- for (i = 0; i < strlen(uri); i++) {
- if (!g_ascii_isprint(uri[i])) {
- isascii = 0;
- break;
- }
- }
- if (isascii)
- handleplumb(c, w, uri);
- }
-}
-
char *
buildfile(const char *path)
{
@@ -539,13 +507,41 @@ decidenewwindow(WebKitPolicyDecision *d, Client *c)
void
decideresource(WebKitPolicyDecision *d, Client *c)
{
+ const gchar *uri;
+ int i, isascii = 1;
WebKitResponsePolicyDecision *r = WEBKIT_RESPONSE_POLICY_DECISION(d);
WebKitURIResponse *res;
+ res = webkit_response_policy_decision_get_response(r);
+ uri = webkit_uri_response_get_uri(res);
+
+ if (g_str_has_suffix(uri, "/favicon.ico"))
+ webkit_uri_request_set_uri(
+ webkit_response_policy_decision_get_request(r),
+ "about:blank");
+
+ if (!g_str_has_prefix(uri, "http://")
+ && !g_str_has_prefix(uri, "https://")
+ && !g_str_has_prefix(uri, "about:")
+ && !g_str_has_prefix(uri, "file://")
+ && !g_str_has_prefix(uri, "data:")
+ && !g_str_has_prefix(uri, "blob:")
+ && strlen(uri) > 0) {
+ for (i = 0; i < strlen(uri); i++) {
+ if (!g_ascii_isprint(uri[i])) {
+ isascii = 0;
+ break;
+ }
+ }
+ if (isascii) {
+ handleplumb(c, uri);
+ webkit_policy_decision_ignore(d);
+ }
+ }
+
if (webkit_response_policy_decision_is_mime_type_supported(r)) {
webkit_policy_decision_use(d);
} else {
-res = webkit_response_policy_decision_get_response(r);
webkit_policy_decision_ignore(d);
download(c, res);
}
@@ -687,12 +683,11 @@ setstyle(Client *c, const char *style)
}
void
-handleplumb(Client *c, WebKitWebView *w, const gchar *uri)
+handleplumb(Client *c, const gchar *uri)
{
Arg arg;
- webkit_web_view_stop_loading(w);
- arg = (Arg)PLUMB((char *)uri);
+ arg = (Arg)PLUMB(uri);
spawn(c, &arg);
}
@@ -1012,9 +1007,6 @@ newview(Client *c, WebKitWebView *rv)
"button-release-event",
G_CALLBACK(buttonreleased), c);
g_signal_connect(G_OBJECT(v),
- "resource-request-starting",
- G_CALLBACK(beforerequest), c);
- g_signal_connect(G_OBJECT(v),
"should-show-delete-interface-for-element",
G_CALLBACK(deletion_interface), c);