]> spindle.queued.net Git - midori/commitdiff
Only update expiry of cookies if higher than maximum
authorChristian Dywan <christian@twotoasts.de>
Sun, 3 Oct 2010 04:13:55 +0000 (06:13 +0200)
committerChristian Dywan <christian@twotoasts.de>
Sun, 3 Oct 2010 05:15:43 +0000 (07:15 +0200)
Also assume 0 days to really mean 1 hour, and set the
maximum age accordingly. Otherwise SoupCookie thinks
that these cookies expire immediately.

katze/katze-http-cookies.c

index dc33efc0196781927a397413c8a75efe5416fa7c..9a38d74121c758f0942dc4e5495f2692f77342f3 100644 (file)
@@ -247,8 +247,6 @@ cookie_jar_changed_cb (SoupCookieJar* jar,
 
     if (new_cookie)
     {
-        FILE *out;
-
         settings = g_object_get_data (G_OBJECT (jar), "midori-settings");
         accept_cookies = katze_object_get_enum (settings, "accept-cookies");
         if (accept_cookies == 2 /* MIDORI_ACCEPT_COOKIES_NONE */)
@@ -263,14 +261,27 @@ cookie_jar_changed_cb (SoupCookieJar* jar,
         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;
-            write_cookie (out, new_cookie);
-            if (fclose (out) != 0)
-                return;
+            if (age > 0)
+            {
+                FILE *out;
+                SoupDate* max_date = soup_date_new_from_now (
+                    age * SOUP_COOKIE_MAX_AGE_ONE_DAY);
+                if (soup_date_to_time_t (new_cookie->expires)
+                  > soup_date_to_time_t (max_date))
+                    soup_cookie_set_expires (new_cookie, max_date);
+
+                if (!(out = fopen (filename, "a")))
+                    return;
+                write_cookie (out, new_cookie);
+                if (fclose (out) != 0)
+                    return;
+            }
+            else
+            {
+                /* An age of 0 to SoupCookie means already-expired
+                   A user choosing 0 days probably expects 1 hour. */
+                soup_cookie_set_max_age (new_cookie, SOUP_COOKIE_MAX_AGE_ONE_HOUR);
+            }
         }
     }
 }