From 9ee6e66d990a9e605843ea2cfbff4c2d30bc720a Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 28 Aug 2011 16:03:07 +0200 Subject: [PATCH] Cookie-Whitelist: core --- midori/main.c | 21 ++++++++++++++++++++- midori/midori-websettings.c | 26 +++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/midori/main.c b/midori/main.c index b7dd32e..7d5d1b4 100644 --- a/midori/main.c +++ b/midori/main.c @@ -1748,11 +1748,30 @@ midori_clear_web_cookies_cb (void) GSList* cookies = soup_cookie_jar_all_cookies (SOUP_COOKIE_JAR (jar)); SoupSessionFeature* feature; + gchar* wl; + gchar* wle; + gchar** extensions; + GList *whitelist = NULL; + gchar* config = g_build_filename (g_get_user_config_dir (), PACKAGE_NAME, NULL); + MidoriWebSettings* settings = settings_and_accels_new (config, &extensions); + + g_object_get (settings, "cookies-whitelist", &wl, NULL); + wle = (gchar*) strtok(wl, ","); + while(wle) { + whitelist = g_list_append(whitelist, wle); + wle = (gchar*) strtok(NULL, ","); + } + for (; cookies != NULL; cookies = g_slist_next (cookies)) { SoupCookie* cookie = cookies->data; - soup_cookie_jar_delete_cookie ((SoupCookieJar*)jar, cookie); + + char* domain = cookie->domain; + if(!g_list_find_custom (whitelist, domain, (GCompareFunc) strcmp)) + soup_cookie_jar_delete_cookie ((SoupCookieJar*)jar, cookie); } + g_object_unref (settings); + g_list_free(whitelist); soup_cookies_free (cookies); /* Removing KatzeHttpCookies makes it save outstanding changes */ if ((feature = soup_session_get_feature (session, KATZE_TYPE_HTTP_COOKIES))) diff --git a/midori/midori-websettings.c b/midori/midori-websettings.c index b882f53..8332b80 100644 --- a/midori/midori-websettings.c +++ b/midori/midori-websettings.c @@ -90,6 +90,7 @@ struct _MidoriWebSettings gboolean enable_dns_prefetching; #endif gboolean strip_referer; + gchar* cookies_whitelist; }; struct _MidoriWebSettingsClass @@ -167,7 +168,8 @@ enum PROP_CLEAR_PRIVATE_DATA, PROP_CLEAR_DATA, PROP_ENABLE_DNS_PREFETCHING, - PROP_STRIP_REFERER + PROP_STRIP_REFERER, + PROP_COOKIES_WHITELIST }; GType @@ -993,6 +995,22 @@ midori_web_settings_class_init (MidoriWebSettingsClass* class) FALSE, flags)); + /** + * MidoriWebSettings:cookies-whitelist: + * + * Sites which cookies will not be deleted. + * + * Since: 0.4.? + */ + g_object_class_install_property (gobject_class, + PROP_COOKIES_WHITELIST, + g_param_spec_string ( + "cookies-whitelist", + _("Cookies whitelist"), + _("Sites which cookies will not be deleted"), + NULL, + flags)); + } static void @@ -1380,6 +1398,9 @@ midori_web_settings_set_property (GObject* object, case PROP_STRIP_REFERER: web_settings->strip_referer = g_value_get_boolean (value); break; + case PROP_COOKIES_WHITELIST: + katze_assign (web_settings->cookies_whitelist, g_value_dup_string (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1629,6 +1650,9 @@ midori_web_settings_get_property (GObject* object, case PROP_STRIP_REFERER: g_value_set_boolean (value, web_settings->strip_referer); break; + case PROP_COOKIES_WHITELIST: + g_value_set_string (value, web_settings->cookies_whitelist); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; -- 1.7.4.1