Introduction
Introduction Statistics Contact Development Disclaimer Help
tAdd a way to define the cookie policy. - surf - customized build of surf, the …
git clone git://src.adamsgaard.dk/surf
Log
Files
Refs
README
LICENSE
---
commit 780cca964ca0cf622746ad6e8cae8beb8047d1df
parent e4869357f1c625a2b56ca1327ed8c89864341d77
Author: Christoph Lohmann <[email protected]>
Date: Thu, 30 Jan 2014 20:36:06 +0100
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
tthis would only add a burden when toggling through accept and not accept.
Thanks Quentin Rameau <[email protected]> for the suggestions!
Diffstat:
M config.def.h | 18 ++++++++++++------
M surf.1 | 31 ++++++++++++++++++++++++-----…
M surf.c | 112 ++++++++++++++++++++++++-----…
3 files changed, 124 insertions(+), 37 deletions(-)
---
diff --git a/config.def.h b/config.def.h
t@@ -4,10 +4,7 @@ static char *useragent = "Mozilla/5.0 (X11; U; Unix; en-…
"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 */
t@@ -16,6 +13,14 @@ static Bool runinfullscreen = FALSE; /* Run in fullscreen m…
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;
t@@ -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 } },
};
diff --git a/surf.1 b/surf.1
t@@ -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]
t@@ -18,6 +19,16 @@ which makes it possible to embed it in another application.…
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
t@@ -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.
t@@ -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.
diff --git a/surf.c b/surf.c
t@@ -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,
t@@ -92,12 +93,16 @@ static gboolean buttonrelease(WebKitWebView *web, GdkEvent…
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,
t@@ -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);
t@@ -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
t@@ -311,6 +319,36 @@ cookiejar_set_property(GObject *self, guint prop_id, cons…
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;
t@@ -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) *
t@@ -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->…
g_error_free(error);
}
t@@ -1156,6 +1194,37 @@ toggle(Client *c, const Arg *arg) {
}
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;
gdouble v;
t@@ -1174,15 +1243,6 @@ 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@@ -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
t@@ -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));
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.