Implement Accept Cookies and Maximum Cookie Age preferences

This commit is contained in:
Christian Dywan 2008-12-07 15:12:42 +01:00
parent 7e68ef90c0
commit 86dcb8b284
3 changed files with 56 additions and 22 deletions

View file

@ -1234,6 +1234,10 @@ cookie_jar_changed_cb (SoupCookieJar* jar,
SoupCookie* new_cookie,
gchar* filename)
{
MidoriApp* app;
MidoriWebSettings* settings;
MidoriAcceptCookies accept_cookies;
if (old_cookie)
delete_cookie (filename, old_cookie);
@ -1241,16 +1245,32 @@ cookie_jar_changed_cb (SoupCookieJar* jar,
{
FILE *out;
out = fopen (filename, "a");
if (!out)
app = g_type_get_qdata (SOUP_TYPE_COOKIE_JAR,
g_quark_from_static_string ("midori-app"));
settings = katze_object_get_object (G_OBJECT (app), "settings");
accept_cookies = katze_object_get_enum (settings, "accept-cookies");
if (accept_cookies == MIDORI_ACCEPT_COOKIES_NONE)
{
soup_cookie_jar_delete_cookie (jar, new_cookie);
}
else if (accept_cookies == MIDORI_ACCEPT_COOKIES_SESSION
&& new_cookie->expires)
{
soup_cookie_jar_delete_cookie (jar, new_cookie);
}
else if (new_cookie->expires)
{
gint age = katze_object_get_int (settings, "maximum-cookie-age");
soup_cookie_set_max_age (new_cookie,
age * SOUP_COOKIE_MAX_AGE_ONE_DAY);
if (!(out = fopen (filename, "a")))
return;
if (new_cookie->expires)
write_cookie (out, new_cookie);
if (fclose (out) != 0)
return;
}
}
}
/* The following code hooks up to any created cookie jar in order to
@ -1268,6 +1288,8 @@ cookie_jar_constructed_cb (GObject* object)
if (old_jar_constructed_cb)
old_jar_constructed_cb (object);
g_type_set_qdata (SOUP_TYPE_COOKIE_JAR,
g_quark_from_static_string ("midori-has-jar"), (void*)1);
config_path = g_build_filename (g_get_user_config_dir (),
PACKAGE_NAME, NULL);
@ -1346,18 +1368,6 @@ main (int argc,
stock_items_init ();
g_set_application_name (_("Midori"));
#if HAVE_LIBSOUP_2_25_2
/* This is a nasty trick that allows us to manipulate cookies
even without having a pointer to the jar. */
soup_cookie_jar_get_type ();
SoupCookieJarClass* jar_class = g_type_class_ref (SOUP_TYPE_COOKIE_JAR);
if (jar_class)
{
old_jar_constructed_cb = G_OBJECT_CLASS (jar_class)->constructed;
G_OBJECT_CLASS (jar_class)->constructed = cookie_jar_constructed_cb;
}
#endif
if (version)
{
g_print (
@ -1413,6 +1423,20 @@ main (int argc,
return 1;
}
#if HAVE_LIBSOUP_2_25_2
/* This is a nasty trick that allows us to manipulate cookies
even without having a pointer to the jar. */
soup_cookie_jar_get_type ();
SoupCookieJarClass* jar_class = g_type_class_ref (SOUP_TYPE_COOKIE_JAR);
if (jar_class)
{
g_type_set_qdata (SOUP_TYPE_COOKIE_JAR,
g_quark_from_static_string ("midori-app"), app);
old_jar_constructed_cb = G_OBJECT_CLASS (jar_class)->constructed;
G_OBJECT_CLASS (jar_class)->constructed = cookie_jar_constructed_cb;
}
#endif
/* Load configuration files */
GString* error_messages = g_string_new (NULL);
gchar* config_path = g_build_filename (g_get_user_config_dir (),

View file

@ -20,6 +20,10 @@
#include <string.h>
#include <glib/gi18n.h>
#if HAVE_LIBSOUP
#include <libsoup/soup.h>
#endif
struct _MidoriPreferences
{
GtkDialog parent_instance;
@ -496,12 +500,15 @@ midori_preferences_set_settings (MidoriPreferences* preferences,
/* Page "Privacy" */
PAGE_NEW (GTK_STOCK_INDEX, _("Privacy"));
#if 0
#if HAVE_LIBSOUP_2_25_2
FRAME_NEW (_("Web Cookies"));
TABLE_NEW (3, 2);
label = katze_property_label (settings, "accept-cookies");
INDENTED_ADD (label, 0, 1, 0, 1);
button = katze_property_proxy (settings, "accept-cookies", NULL);
/* If a cookie jar was created, WebKit is using Soup */
gtk_widget_set_sensitive (button, g_type_get_qdata (SOUP_TYPE_COOKIE_JAR,
g_quark_from_static_string ("midori-has-jar")) != NULL);
FILLED_ADD (button, 1, 2, 0, 1);
button = katze_property_proxy (settings, "original-cookies-only", "blurb");
SPANNED_ADD (button, 0, 2, 1, 2);
@ -509,6 +516,9 @@ midori_preferences_set_settings (MidoriPreferences* preferences,
INDENTED_ADD (label, 0, 1, 2, 3);
hbox = gtk_hbox_new (FALSE, 4);
entry = katze_property_proxy (settings, "maximum-cookie-age", NULL);
/* If a cookie jar was created, WebKit is using Soup */
gtk_widget_set_sensitive (entry, g_type_get_qdata (SOUP_TYPE_COOKIE_JAR,
g_quark_from_static_string ("midori-has-jar")) != NULL);
gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (hbox), gtk_label_new (_("days")),
FALSE, FALSE, 0);

View file

@ -538,7 +538,7 @@ midori_web_settings_class_init (MidoriWebSettingsClass* class)
_("What type of cookies to accept"),
MIDORI_TYPE_ACCEPT_COOKIES,
MIDORI_ACCEPT_COOKIES_ALL,
G_PARAM_READABLE));
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_ORIGINAL_COOKIES_ONLY,
@ -556,7 +556,7 @@ midori_web_settings_class_init (MidoriWebSettingsClass* class)
_("Maximum cookie age"),
_("The maximum number of days to save cookies for"),
0, G_MAXINT, 30,
G_PARAM_READABLE));
G_PARAM_READWRITE));