Introduction
Introduction Statistics Contact Development Disclaimer Help
tTrying a different cookie handling system. - surf - customized build of surf, …
git clone git://src.adamsgaard.dk/surf
Log
Files
Refs
README
LICENSE
---
commit 0835ea21245ee6db049619f3c49ce6c4c41d0be2
parent 75cc43047fc21ddcacd564766bb3211d9d0746e6
Author: Enno Boland (tox) <[email protected]>
Date: Tue, 20 Oct 2009 14:10:21 +0200
Trying a different cookie handling system.
Diffstat:
M surf.c | 87 ++++++++++++++++-------------…
1 file changed, 46 insertions(+), 41 deletions(-)
---
diff --git a/surf.c b/surf.c
t@@ -62,8 +62,6 @@ typedef struct {
static Display *dpy;
static Atom uriprop;
-static SoupCookieJar *cookiejar;
-static SoupSession *session;
static Client *clients = NULL;
static GdkNativeWindow embed = 0;
static gboolean showxid = FALSE;
t@@ -73,7 +71,6 @@ static char *progname;
static const char *autouri(Client *c);
static char *buildpath(const char *path);
-static void changecookie(SoupCookieJar *jar, SoupCookie *o, SoupCookie *n, gpo…
static void cleanup(void);
static void clipboard(Client *c, const Arg *arg);
static void context(WebKitWebView *v, GtkMenu *m, Client *c);
t@@ -93,7 +90,6 @@ static void itemclick(GtkMenuItem *mi, Client *c);
static gboolean keypress(GtkWidget *w, GdkEventKey *ev, Client *c);
static void linkhover(WebKitWebView *v, const char* t, const char* l, Client *…
static void loadcommit(WebKitWebView *v, WebKitWebFrame *f, Client *c);
-static void loadfinished(WebKitWebView *v, WebKitWebFrame *f, Client *c);
static void loadstart(WebKitWebView *v, WebKitWebFrame *f, Client *c);
static void loaduri(Client *c, const Arg *arg);
static void navigate(Client *c, const Arg *arg);
t@@ -105,8 +101,9 @@ static GdkFilterReturn processx(GdkXEvent *xevent, GdkEven…
static void print(Client *c, const Arg *arg);
static void progresschange(WebKitWebView *v, gint p, Client *c);
static void reload(Client *c, const Arg *arg);
-static void reloadcookie();
+static void request(SoupSession *s, SoupMessage *m, gpointer p);
static void sigchld(int unused);
+static void setcookie(SoupMessage *m, gpointer p);
static void setup(void);
static void spawn(Client *c, const Arg *arg);
static void scroll(Client *c, const Arg *arg);
t@@ -157,18 +154,6 @@ buildpath(const char *path) {
}
void
-changecookie(SoupCookieJar *jar, SoupCookie *oc, SoupCookie *c, gpointer p) {
- SoupDate *e;
-
- if(c && c->expires == NULL) {
- e = soup_date_new_from_time_t(time(NULL) + sessiontime);
- c = soup_cookie_copy(c);
- soup_cookie_set_expires(c, e);
- soup_cookie_jar_add_cookie(cookiejar, c);
- }
-}
-
-void
cleanup(void) {
while(clients)
destroyclient(clients);
t@@ -181,11 +166,15 @@ cleanup(void) {
void
clipboard(Client *c, const Arg *arg) {
gboolean paste = *(gboolean *)arg;
+ const char *uri;
if(paste)
gtk_clipboard_request_text(gtk_clipboard_get(GDK_SELECTION_PRI…
- else
- gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY…
+ else {
+ if(!(uri = autouri(c)))
+ uri = geturi(c);
+ gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY…
+ }
}
void
t@@ -410,13 +399,7 @@ loadcommit(WebKitWebView *view, WebKitWebFrame *f, Client…
}
void
-loadfinished(WebKitWebView *v, WebKitWebFrame *f, Client *c) {
- reloadcookie();
-}
-
-void
loadstart(WebKitWebView *view, WebKitWebFrame *f, Client *c) {
- reloadcookie();
c->progress = 0;
update(c);
}
t@@ -488,7 +471,6 @@ newclient(void) {
c->view = WEBKIT_WEB_VIEW(webkit_web_view_new());
g_signal_connect(G_OBJECT(c->view), "title-changed", G_CALLBACK(titlec…
g_signal_connect(G_OBJECT(c->view), "load-progress-changed", G_CALLBAC…
- g_signal_connect(G_OBJECT(c->view), "load-finished", G_CALLBACK(loadfi…
g_signal_connect(G_OBJECT(c->view), "load-committed", G_CALLBACK(loadc…
g_signal_connect(G_OBJECT(c->view), "load-started", G_CALLBACK(loadsta…
g_signal_connect(G_OBJECT(c->view), "hovering-over-link", G_CALLBACK(l…
t@@ -587,7 +569,7 @@ createwindow(WebKitWebView *v, WebKitWebFrame *f, Client …
void
pasteuri(GtkClipboard *clipboard, const char *text, gpointer d) {
- Arg arg = {.v = text };
+ Arg arg = { .v = text };
if(text != NULL)
loaduri((Client *) d, &arg);
}
t@@ -641,16 +623,6 @@ reload(Client *c, const Arg *arg) {
}
void
-reloadcookie(void) {
- SoupSession *s;
-
- /* This forces the cookie to be written to hdd */
- s = webkit_get_default_session();
- soup_session_remove_feature(s, SOUP_SESSION_FEATURE(cookiejar));
- soup_session_add_feature(s, SOUP_SESSION_FEATURE(cookiejar));
-}
-
-void
scroll(Client *c, const Arg *arg) {
gdouble v;
GtkAdjustment *a;
t@@ -664,6 +636,42 @@ scroll(Client *c, const Arg *arg) {
}
void
+request(SoupSession *s, SoupMessage *m, gpointer p) {
+ SoupCookieJar *cookies;
+ SoupMessageHeaders *h;
+ char *cookiestr;
+ soup_message_add_header_handler(m, "got-headers", "Set-Cookie",
+ G_CALLBACK(setcookie), NULL);
+
+ h = m->request_headers;
+ cookies = soup_cookie_jar_text_new(cookiefile, TRUE);
+ cookiestr = soup_cookie_jar_get_cookies(cookies, soup_message_get_uri(…
+ if(cookiestr)
+ soup_message_headers_append(h, "Cookie", cookiestr);
+ g_object_unref(cookies);
+}
+
+void
+setcookie(SoupMessage *m, gpointer p) {
+ SoupCookieJar *cookies;
+ SoupCookie *c;
+ SoupDate *e;
+ GSList *l;
+
+ cookies = soup_cookie_jar_text_new(cookiefile, FALSE);
+ for (l = soup_cookies_from_response(m); l; l = l->next){
+ c = (SoupCookie *)l->data;
+ if(c && c->expires == NULL) {
+ e = soup_date_new_from_time_t(time(NULL) + sessiontime…
+ c = soup_cookie_copy(c);
+ soup_cookie_set_expires(c, e);
+ }
+ soup_cookie_jar_add_cookie(cookies, c);
+ }
+ g_slist_free(l);
+ g_object_unref(cookies);
+}
+void
sigchld(int unused) {
if(signal(SIGCHLD, sigchld) == SIG_ERR)
die("Can't install SIGCHLD handler");
t@@ -681,7 +689,6 @@ setup(void) {
g_thread_init(NULL);
dpy = GDK_DISPLAY();
- session = webkit_get_default_session();
uriprop = XInternAtom(dpy, "_SURF_URI", False);
/* create dirs and files */
t@@ -692,9 +699,7 @@ setup(void) {
/* cookie persistance */
s = webkit_get_default_session();
- cookiejar = soup_cookie_jar_text_new(cookiefile, FALSE);
- soup_session_add_feature(s, SOUP_SESSION_FEATURE(cookiejar));
- g_signal_connect(cookiejar, "changed", G_CALLBACK(changecookie), NULL);
+ g_signal_connect_after(s, "request-queued", G_CALLBACK(request), NULL);
}
void
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.