diff options
| author | Christoph Lohmann <20h@r-36.net> | 2013-04-28 21:26:56 +0200 | 
|---|---|---|
| committer | Christoph Lohmann <20h@r-36.net> | 2013-04-28 21:26:56 +0200 | 
| commit | 067c313e6ce1ab19116088d7e0b1618080c9b4a7 (patch) | |
| tree | 9c3db64cc4bc28a2ef66ec15ba15dcf0627bbb83 | |
| parent | d0309a1a226425c1b8086d7b20a6f4e3dcb06872 (diff) | |
| download | surf-067c313e6ce1ab19116088d7e0b1618080c9b4a7.tar.gz surf-067c313e6ce1ab19116088d7e0b1618080c9b4a7.tar.bz2 surf-067c313e6ce1ab19116088d7e0b1618080c9b4a7.zip  | |
Allowing geo location policy decisions.
| -rw-r--r-- | config.def.h | 2 | ||||
| -rw-r--r-- | surf.1 | 5 | ||||
| -rw-r--r-- | surf.c | 44 | 
3 files changed, 43 insertions, 8 deletions
diff --git a/config.def.h b/config.def.h index 83b6477..08ff707 100644 --- a/config.def.h +++ b/config.def.h @@ -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", \ @@ -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 } },  }; @@ -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] @@ -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 @@ -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); @@ -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); @@ -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); @@ -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]; @@ -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), @@ -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 @@ -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; @@ -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 @@ -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;  | 
