Add a way to define the cookie policy.
This adds the -a flag to define a string of the toggle string for the cookie policy modes. There is now a new »cookiepolicies« string in config.h and the Mod+Shift+a now can toggle the policy but will not cause a reload, because this would only add a burden when toggling through accept and not accept. Thanks Quentin Rameau <quinq.ml@gmail.com> for the suggestions!
This commit is contained in:
		
							parent
							
								
									e4869357f1
								
							
						
					
					
						commit
						780cca964c
					
				
							
								
								
									
										18
									
								
								config.def.h
								
								
								
								
							
							
						
						
									
										18
									
								
								config.def.h
								
								
								
								
							| 
						 | 
				
			
			@ -4,10 +4,7 @@ static char *useragent      = "Mozilla/5.0 (X11; U; Unix; en-US) "
 | 
			
		|||
	"Safari/537.15 Surf/"VERSION;
 | 
			
		||||
static char *stylefile      = "~/.surf/style.css";
 | 
			
		||||
static char *scriptfile     = "~/.surf/script.js";
 | 
			
		||||
static char *cookiefile     = "~/.surf/cookies.txt";
 | 
			
		||||
static time_t sessiontime   = 3600;
 | 
			
		||||
static char *cafile         = "/etc/ssl/certs/ca-certificates.crt";
 | 
			
		||||
static char *strictssl      = FALSE; /* Refuse untrusted SSL connections */
 | 
			
		||||
 | 
			
		||||
static Bool kioskmode	    = FALSE; /* Ignore shortcuts */
 | 
			
		||||
static Bool showindicators  = TRUE;  /* Show indicators in window title */
 | 
			
		||||
static Bool zoomto96dpi     = TRUE;  /* Zoom pages to always emulate 96dpi */
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +13,14 @@ static Bool runinfullscreen = FALSE; /* Run in fullscreen mode by default */
 | 
			
		|||
static guint defaultfontsize = 12;   /* Default font size */
 | 
			
		||||
static gfloat zoomlevel = 1.0;       /* Default zoom level */
 | 
			
		||||
 | 
			
		||||
/* Soup default features */
 | 
			
		||||
static char *cookiefile     = "~/.surf/cookies.txt";
 | 
			
		||||
static char *cookiepolicies = "Aa@"; /* A: accept all; a: accept nothing,
 | 
			
		||||
					@: accept third party */
 | 
			
		||||
static char *cafile         = "/etc/ssl/certs/ca-certificates.crt";
 | 
			
		||||
static char *strictssl      = FALSE; /* Refuse untrusted SSL connections */
 | 
			
		||||
static time_t sessiontime   = 3600;
 | 
			
		||||
 | 
			
		||||
/* Webkit default features */
 | 
			
		||||
static Bool enablescrollbars = TRUE;
 | 
			
		||||
static Bool enablespatialbrowsing = TRUE;
 | 
			
		||||
| 
						 | 
				
			
			@ -92,8 +97,9 @@ static Key keys[] = {
 | 
			
		|||
    { MODKEY|GDK_SHIFT_MASK,GDK_i,      toggle,     { .v = "auto-load-images" } },
 | 
			
		||||
    { MODKEY|GDK_SHIFT_MASK,GDK_s,      toggle,     { .v = "enable-scripts" } },
 | 
			
		||||
    { 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_a,      togglecookiepolicy, { 0 } },
 | 
			
		||||
    { MODKEY|GDK_SHIFT_MASK,GDK_m,      togglestyle, { 0 } },
 | 
			
		||||
    { MODKEY|GDK_SHIFT_MASK,GDK_b,      togglescrollbars, { 0 } },
 | 
			
		||||
    { MODKEY|GDK_SHIFT_MASK,GDK_g,      togglegeolocation, { 0 } },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										31
									
								
								surf.1
								
								
								
								
							
							
						
						
									
										31
									
								
								surf.1
								
								
								
								
							| 
						 | 
				
			
			@ -4,6 +4,7 @@ surf \- simple webkit-based browser
 | 
			
		|||
.SH SYNOPSIS
 | 
			
		||||
.B surf
 | 
			
		||||
.RB [-bBfFgGiIkKnNpPsSvx]
 | 
			
		||||
.RB [-a\ cookiepolicies]
 | 
			
		||||
.RB [-c\ cookiefile]
 | 
			
		||||
.RB [-e\ xid]
 | 
			
		||||
.RB [-r\ scriptfile]
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +19,16 @@ which makes it possible to embed it in another application. Furthermore,
 | 
			
		|||
one can point surf to another URI by setting its XProperties.
 | 
			
		||||
.SH OPTIONS
 | 
			
		||||
.TP
 | 
			
		||||
.B \-a cookiepolicies
 | 
			
		||||
Define the order of
 | 
			
		||||
.I cookie policies.
 | 
			
		||||
The default is "Aa@" but could be
 | 
			
		||||
redefined in the
 | 
			
		||||
.I config.h,
 | 
			
		||||
with "A" meaning to
 | 
			
		||||
accept all cookies, "a" to deny all cookies and "@", which tells surf to
 | 
			
		||||
accept all third party cookies.
 | 
			
		||||
.TP
 | 
			
		||||
.B \-b
 | 
			
		||||
Disable Scrollbars
 | 
			
		||||
.TP
 | 
			
		||||
| 
						 | 
				
			
			@ -158,7 +169,7 @@ Calls Printpage Dialog.
 | 
			
		|||
Reloads the website.
 | 
			
		||||
.TP
 | 
			
		||||
.B Ctrl\-Shift\-r
 | 
			
		||||
Reloads the website without using cache.
 | 
			
		||||
Reloads the website without using the cache.
 | 
			
		||||
.TP
 | 
			
		||||
.B Ctrl\-y
 | 
			
		||||
Copies current URI to primary selection.
 | 
			
		||||
| 
						 | 
				
			
			@ -166,28 +177,34 @@ Copies current URI to primary selection.
 | 
			
		|||
.B Ctrl\-o
 | 
			
		||||
Show the sourcecode of the current page.
 | 
			
		||||
.TP
 | 
			
		||||
.B Ctrl\-Shift\-a
 | 
			
		||||
Toggle through the the
 | 
			
		||||
.I cookie policies.
 | 
			
		||||
This will not reload the page.
 | 
			
		||||
.TP
 | 
			
		||||
.B Ctrl\-Shift\-b
 | 
			
		||||
Toggle scrollbars
 | 
			
		||||
Toggle scrollbars. This will reload the page.
 | 
			
		||||
.TP
 | 
			
		||||
.B Ctrl\-Shift\-c
 | 
			
		||||
Toggle caret browsing.
 | 
			
		||||
Toggle caret browsing. This will reload the page.
 | 
			
		||||
.TP
 | 
			
		||||
.B Ctrl\-Shift\-i
 | 
			
		||||
Toggle auto-loading of images.
 | 
			
		||||
Toggle auto-loading of images. This will reload the page.
 | 
			
		||||
.TP
 | 
			
		||||
.B Ctrl\-Shift\-m
 | 
			
		||||
Toggle if the
 | 
			
		||||
.I stylefile 
 | 
			
		||||
file should be loaded.
 | 
			
		||||
file should be loaded. This will reload the page.
 | 
			
		||||
.TP
 | 
			
		||||
.B Ctrl\-Shift\-o
 | 
			
		||||
Open the Web Inspector (Developer Tools) window for the current page.
 | 
			
		||||
.TP
 | 
			
		||||
.B Ctrl\-Shift\-s
 | 
			
		||||
Toggle script execution.
 | 
			
		||||
Toggle script execution. This will reload the page.
 | 
			
		||||
.TP
 | 
			
		||||
.B Ctrl\-Shift\-v
 | 
			
		||||
Toggle the enabling of plugins on that surf instance.
 | 
			
		||||
Toggle the enabling of plugins on that surf instance. This will reload the
 | 
			
		||||
page.
 | 
			
		||||
.TP
 | 
			
		||||
.B F11
 | 
			
		||||
Toggle fullscreen mode.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										112
									
								
								surf.c
								
								
								
								
							
							
						
						
									
										112
									
								
								surf.c
								
								
								
								
							| 
						 | 
				
			
			@ -78,9 +78,10 @@ static GdkNativeWindow embed = 0;
 | 
			
		|||
static gboolean showxid = FALSE;
 | 
			
		||||
static char winid[64];
 | 
			
		||||
static gboolean usingproxy = 0;
 | 
			
		||||
static char togglestat[7];
 | 
			
		||||
static char togglestat[8];
 | 
			
		||||
static char pagestat[3];
 | 
			
		||||
static GTlsDatabase *tlsdb;
 | 
			
		||||
static int policysel = 0;
 | 
			
		||||
 | 
			
		||||
static void addaccelgroup(Client *c);
 | 
			
		||||
static void beforerequest(WebKitWebView *w, WebKitWebFrame *f,
 | 
			
		||||
| 
						 | 
				
			
			@ -92,12 +93,16 @@ static gboolean buttonrelease(WebKitWebView *web, GdkEventButton *e,
 | 
			
		|||
static void cleanup(void);
 | 
			
		||||
static void clipboard(Client *c, const Arg *arg);
 | 
			
		||||
 | 
			
		||||
/* Cookiejar implementation */
 | 
			
		||||
static void cookiejar_changed(SoupCookieJar *self, SoupCookie *old_cookie,
 | 
			
		||||
		SoupCookie *new_cookie);
 | 
			
		||||
static void cookiejar_finalize(GObject *self);
 | 
			
		||||
static SoupCookieJar *cookiejar_new(const char *filename, gboolean read_only);
 | 
			
		||||
static SoupCookieJarAcceptPolicy cookiepolicy_get(void);
 | 
			
		||||
static SoupCookieJar *cookiejar_new(const char *filename, gboolean read_only,
 | 
			
		||||
		SoupCookieJarAcceptPolicy policy);
 | 
			
		||||
static void cookiejar_set_property(GObject *self, guint prop_id,
 | 
			
		||||
		const GValue *value, GParamSpec *pspec);
 | 
			
		||||
static char cookiepolicy_set(const SoupCookieJarAcceptPolicy p);
 | 
			
		||||
 | 
			
		||||
static char *copystr(char **str, const char *src);
 | 
			
		||||
static WebKitWebView *createwindow(WebKitWebView *v, WebKitWebFrame *f,
 | 
			
		||||
| 
						 | 
				
			
			@ -162,6 +167,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 togglecookiepolicy(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);
 | 
			
		||||
| 
						 | 
				
			
			@ -296,10 +302,12 @@ cookiejar_init(CookieJar *self) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
static SoupCookieJar *
 | 
			
		||||
cookiejar_new(const char *filename, gboolean read_only) {
 | 
			
		||||
cookiejar_new(const char *filename, gboolean read_only,
 | 
			
		||||
		SoupCookieJarAcceptPolicy policy) {
 | 
			
		||||
	return g_object_new(COOKIEJAR_TYPE,
 | 
			
		||||
	                    SOUP_COOKIE_JAR_TEXT_FILENAME, filename,
 | 
			
		||||
	                    SOUP_COOKIE_JAR_READ_ONLY, read_only, NULL);
 | 
			
		||||
	                    SOUP_COOKIE_JAR_READ_ONLY, read_only,
 | 
			
		||||
			    SOUP_COOKIE_JAR_ACCEPT_POLICY, policy, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
| 
						 | 
				
			
			@ -311,6 +319,36 @@ cookiejar_set_property(GObject *self, guint prop_id, const GValue *value,
 | 
			
		|||
	flock(COOKIEJAR(self)->lock, LOCK_UN);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static SoupCookieJarAcceptPolicy
 | 
			
		||||
cookiepolicy_get(void) {
 | 
			
		||||
	switch(cookiepolicies[policysel]) {
 | 
			
		||||
	case 'a':
 | 
			
		||||
		return SOUP_COOKIE_JAR_ACCEPT_NEVER;
 | 
			
		||||
	case '@':
 | 
			
		||||
		return SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY;
 | 
			
		||||
	case 'A':
 | 
			
		||||
	default:
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return SOUP_COOKIE_JAR_ACCEPT_ALWAYS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char
 | 
			
		||||
cookiepolicy_set(const SoupCookieJarAcceptPolicy ep) {
 | 
			
		||||
	switch(ep) {
 | 
			
		||||
	case SOUP_COOKIE_JAR_ACCEPT_NEVER:
 | 
			
		||||
		return 'a';
 | 
			
		||||
	case SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY:
 | 
			
		||||
		return '@';
 | 
			
		||||
	case SOUP_COOKIE_JAR_ACCEPT_ALWAYS:
 | 
			
		||||
	default:
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 'A';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
evalscript(JSContextRef js, char *script, char* scriptname) {
 | 
			
		||||
	JSStringRef jsscript, jsscriptname;
 | 
			
		||||
| 
						 | 
				
			
			@ -1013,7 +1051,7 @@ scroll(GtkAdjustment *a, const Arg *arg) {
 | 
			
		|||
	gdouble v;
 | 
			
		||||
 | 
			
		||||
	v = gtk_adjustment_get_value(a);
 | 
			
		||||
	switch (arg->i){
 | 
			
		||||
	switch(arg->i) {
 | 
			
		||||
	case +10000:
 | 
			
		||||
	case -10000:
 | 
			
		||||
		v += gtk_adjustment_get_page_increment(a) *
 | 
			
		||||
| 
						 | 
				
			
			@ -1068,13 +1106,13 @@ setup(void) {
 | 
			
		|||
 | 
			
		||||
	/* cookie jar */
 | 
			
		||||
	soup_session_add_feature(s,
 | 
			
		||||
			SOUP_SESSION_FEATURE(cookiejar_new(cookiefile,
 | 
			
		||||
					FALSE)));
 | 
			
		||||
			SOUP_SESSION_FEATURE(cookiejar_new(cookiefile, FALSE,
 | 
			
		||||
					cookiepolicy_get())));
 | 
			
		||||
 | 
			
		||||
	/* ssl */
 | 
			
		||||
	tlsdb = g_tls_file_database_new(cafile, &error);
 | 
			
		||||
 | 
			
		||||
	if (error) {
 | 
			
		||||
	if(error) {
 | 
			
		||||
		g_warning("Error loading SSL database %s: %s", cafile, error->message);
 | 
			
		||||
		g_error_free(error);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1155,6 +1193,37 @@ toggle(Client *c, const Arg *arg) {
 | 
			
		|||
	reload(c, &a);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
togglecookiepolicy(Client *c, const Arg *arg) {
 | 
			
		||||
	SoupCookieJar *jar;
 | 
			
		||||
	SoupCookieJarAcceptPolicy policy;
 | 
			
		||||
 | 
			
		||||
	jar = SOUP_COOKIE_JAR(
 | 
			
		||||
			soup_session_get_feature(
 | 
			
		||||
				webkit_get_default_session(),
 | 
			
		||||
				SOUP_TYPE_COOKIE_JAR));
 | 
			
		||||
	g_object_get(G_OBJECT(jar), "accept-policy", &policy, NULL);
 | 
			
		||||
 | 
			
		||||
	policysel++;
 | 
			
		||||
	if(policysel >= strlen(cookiepolicies))
 | 
			
		||||
		policysel = 0;
 | 
			
		||||
 | 
			
		||||
	g_object_set(G_OBJECT(jar), "accept-policy",
 | 
			
		||||
			cookiepolicy_get(), NULL);
 | 
			
		||||
 | 
			
		||||
	updatetitle(c);
 | 
			
		||||
	/* Do not reload. */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
togglegeolocation(Client *c, const Arg *arg) {
 | 
			
		||||
	Arg a = { .b = FALSE };
 | 
			
		||||
 | 
			
		||||
	allowgeolocation ^= 1;
 | 
			
		||||
 | 
			
		||||
	reload(c, &a);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
twitch(Client *c, const Arg *arg) {
 | 
			
		||||
	GtkAdjustment *a;
 | 
			
		||||
| 
						 | 
				
			
			@ -1173,15 +1242,6 @@ twitch(Client *c, const Arg *arg) {
 | 
			
		|||
	gtk_adjustment_set_value(a, v);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
| 
						 | 
				
			
			@ -1219,27 +1279,30 @@ static void
 | 
			
		|||
gettogglestat(Client *c){
 | 
			
		||||
	gboolean value;
 | 
			
		||||
	char *uri;
 | 
			
		||||
	int p = 0;
 | 
			
		||||
	WebKitWebSettings *settings = webkit_web_view_get_settings(c->view);
 | 
			
		||||
 | 
			
		||||
	togglestat[p++] = cookiepolicy_set(cookiepolicy_get());
 | 
			
		||||
 | 
			
		||||
	g_object_get(G_OBJECT(settings), "enable-caret-browsing",
 | 
			
		||||
			&value, NULL);
 | 
			
		||||
	togglestat[0] = value? 'C': 'c';
 | 
			
		||||
	togglestat[p++] = value? 'C': 'c';
 | 
			
		||||
 | 
			
		||||
	togglestat[1] = allowgeolocation? 'G': 'g';
 | 
			
		||||
	togglestat[p++] = allowgeolocation? 'G': 'g';
 | 
			
		||||
 | 
			
		||||
	g_object_get(G_OBJECT(settings), "auto-load-images", &value, NULL);
 | 
			
		||||
	togglestat[2] = value? 'I': 'i';
 | 
			
		||||
	togglestat[p++] = value? 'I': 'i';
 | 
			
		||||
 | 
			
		||||
	g_object_get(G_OBJECT(settings), "enable-scripts", &value, NULL);
 | 
			
		||||
	togglestat[3] = value? 'S': 's';
 | 
			
		||||
	togglestat[p++] = value? 'S': 's';
 | 
			
		||||
 | 
			
		||||
	g_object_get(G_OBJECT(settings), "enable-plugins", &value, NULL);
 | 
			
		||||
	togglestat[4] = value? 'V': 'v';
 | 
			
		||||
	togglestat[p++] = value? 'V': 'v';
 | 
			
		||||
 | 
			
		||||
	g_object_get(G_OBJECT(settings), "user-stylesheet-uri", &uri, NULL);
 | 
			
		||||
	togglestat[5] = uri[0] ? 'M': 'm';
 | 
			
		||||
	togglestat[p++] = uri[0] ? 'M': 'm';
 | 
			
		||||
 | 
			
		||||
	togglestat[6] = '\0';
 | 
			
		||||
	togglestat[p] = '\0';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
| 
						 | 
				
			
			@ -1292,6 +1355,7 @@ updatewinid(Client *c) {
 | 
			
		|||
static void
 | 
			
		||||
usage(void) {
 | 
			
		||||
	die("usage: %s [-bBfFgGiIkKnNpPsSvx]"
 | 
			
		||||
		" [-a cookiepolicies ] "
 | 
			
		||||
		" [-c cookiefile] [-e xid] [-r scriptfile]"
 | 
			
		||||
		" [-t stylefile] [-u useragent] [-z zoomlevel]"
 | 
			
		||||
		" [uri]\n", basename(argv0));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue