tAllowing geo location policy decisions. - surf - customized build of surf, the… | |
git clone git://src.adamsgaard.dk/surf | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 067c313e6ce1ab19116088d7e0b1618080c9b4a7 | |
parent d0309a1a226425c1b8086d7b20a6f4e3dcb06872 | |
Author: Christoph Lohmann <[email protected]> | |
Date: Sun, 28 Apr 2013 21:26:56 +0200 | |
Allowing geo location policy decisions. | |
Diffstat: | |
M config.def.h | 2 ++ | |
M surf.1 | 5 ++++- | |
M surf.c | 44 ++++++++++++++++++++++++++---… | |
3 files changed, 43 insertions(+), 8 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
t@@ -21,6 +21,7 @@ static Bool enablescripts = TRUE; | |
static Bool enableinspector = TRUE; | |
static Bool loadimages = TRUE; | |
static Bool hidebackground = FALSE; | |
+static Bool allowgeolocation = TRUE; | |
#define SETPROP(p, q) { \ | |
.v = (char *[]){ "/bin/sh", "-c", \ | |
t@@ -90,5 +91,6 @@ static Key keys[] = { | |
{ MODKEY|GDK_SHIFT_MASK,GDK_v, toggle, { .v = "enable-plugins" } … | |
{ MODKEY|GDK_SHIFT_MASK,GDK_m, togglestyle,{ 0 } }, | |
{ MODKEY|GDK_SHIFT_MASK,GDK_b, togglescrollbars,{ 0 } }, | |
+ { MODKEY|GDK_SHIFT_MASK,GDK_g, togglegeolocation, { 0 } }, | |
}; | |
diff --git a/surf.1 b/surf.1 | |
t@@ -3,7 +3,7 @@ | |
surf \- simple webkit-based browser | |
.SH SYNOPSIS | |
.B surf | |
-.RB [-biknpsvx] | |
+.RB [-bgiknpsvx] | |
.RB [-c\ cookiefile] | |
.RB [-e\ xid] | |
.RB [-r\ scriptfile] | |
t@@ -29,6 +29,9 @@ to use. | |
Reparents to window specified by | |
.I xid. | |
.TP | |
+.B \-g | |
+Disable giving the geolocation to websites. | |
+.TP | |
.B \-i | |
Disable Images | |
.TP | |
diff --git a/surf.c b/surf.c | |
t@@ -77,7 +77,7 @@ static GdkNativeWindow embed = 0; | |
static gboolean showxid = FALSE; | |
static char winid[64]; | |
static gboolean usingproxy = 0; | |
-static char togglestat[6]; | |
+static char togglestat[7]; | |
static char pagestat[3]; | |
static void addaccelgroup(Client *c); | |
t@@ -114,6 +114,8 @@ static void die(const char *errstr, ...); | |
static void eval(Client *c, const Arg *arg); | |
static void find(Client *c, const Arg *arg); | |
static void fullscreen(Client *c, const Arg *arg); | |
+static void geopolicyrequested(WebKitWebView *v, WebKitWebFrame *f, | |
+ WebKitGeolocationPolicyDecision *d, Client *c); | |
static const char *getatom(Client *c, int a); | |
static void gettogglestat(Client *c); | |
static void getpagestat(Client *c); | |
t@@ -158,6 +160,7 @@ static void stop(Client *c, const Arg *arg); | |
static void titlechange(WebKitWebView *v, WebKitWebFrame *frame, | |
const char *title, Client *c); | |
static void toggle(Client *c, const Arg *arg); | |
+static void togglegeolocation(Client *c, const Arg *arg); | |
static void togglescrollbars(Client *c, const Arg *arg); | |
static void togglestyle(Client *c, const Arg *arg); | |
static void updatetitle(Client *c); | |
t@@ -449,6 +452,16 @@ fullscreen(Client *c, const Arg *arg) { | |
c->fullscreen = !c->fullscreen; | |
} | |
+static void | |
+geopolicyrequested(WebKitWebView *v, WebKitWebFrame *f, | |
+ WebKitGeolocationPolicyDecision *d, Client *c) { | |
+ if(allowgeolocation) { | |
+ webkit_geolocation_policy_allow(d); | |
+ } else { | |
+ webkit_geolocation_policy_deny(d); | |
+ } | |
+} | |
+ | |
static const char * | |
getatom(Client *c, int a) { | |
static char buf[BUFSIZ]; | |
t@@ -694,6 +707,9 @@ newclient(void) { | |
"hovering-over-link", | |
G_CALLBACK(linkhover), c); | |
g_signal_connect(G_OBJECT(c->view), | |
+ "geolocation-policy-decision-requested", | |
+ G_CALLBACK(geopolicyrequested), c); | |
+ g_signal_connect(G_OBJECT(c->view), | |
"create-web-view", | |
G_CALLBACK(createwindow), c); | |
g_signal_connect(G_OBJECT(c->view), | |
t@@ -1097,7 +1113,7 @@ toggle(Client *c, const Arg *arg) { | |
g_object_get(G_OBJECT(settings), name, &value, NULL); | |
g_object_set(G_OBJECT(settings), name, !value, NULL); | |
- reload(c,&a); | |
+ reload(c, &a); | |
} | |
static void | |
t@@ -1119,6 +1135,15 @@ twitch(Client *c, const Arg *arg) { | |
} | |
static void | |
+togglegeolocation(Client *c, const Arg *arg) { | |
+ Arg a = { .b = FALSE }; | |
+ | |
+ allowgeolocation ^= 1; | |
+ | |
+ reload(c, &a); | |
+} | |
+ | |
+static void | |
togglescrollbars(Client *c, const Arg *arg) { | |
GtkPolicyType vspolicy; | |
Arg a; | |
t@@ -1161,19 +1186,21 @@ gettogglestat(Client *c){ | |
&value, NULL); | |
togglestat[0] = value? 'C': 'c'; | |
+ togglestat[1] = allowgeolocation? 'G': 'g'; | |
+ | |
g_object_get(G_OBJECT(settings), "auto-load-images", &value, NULL); | |
- togglestat[1] = value? 'I': 'i'; | |
+ togglestat[2] = value? 'I': 'i'; | |
g_object_get(G_OBJECT(settings), "enable-scripts", &value, NULL); | |
- togglestat[2] = value? 'S': 's'; | |
+ togglestat[3] = value? 'S': 's'; | |
g_object_get(G_OBJECT(settings), "enable-plugins", &value, NULL); | |
- togglestat[3] = value? 'V': 'v'; | |
+ togglestat[4] = value? 'V': 'v'; | |
g_object_get(G_OBJECT(settings), "user-stylesheet-uri", &uri, NULL); | |
- togglestat[4] = uri[0] ? 'M': 'm'; | |
+ togglestat[5] = uri[0] ? 'M': 'm'; | |
- togglestat[5] = '\0'; | |
+ togglestat[6] = '\0'; | |
} | |
static void | |
t@@ -1268,6 +1295,9 @@ main(int argc, char *argv[]) { | |
case 'e': | |
embed = strtol(EARGF(usage()), NULL, 0); | |
break; | |
+ case 'g': | |
+ allowgeolocation = 0; | |
+ break; | |
case 'i': | |
loadimages = 0; | |
break; |