aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXan Lopez <xan@gnome.org>2010-02-05 05:05:16 +0800
committerXan Lopez <xan@gnome.org>2010-02-05 05:07:37 +0800
commit66053f00ec618994942aa8a4685376a792c26acc (patch)
treefb1641363918922669d0e9896383d60efdb41cee
parent3fd99f851981c9bf4fea17a65cb94353fc37511d (diff)
downloadgsoc2013-epiphany-66053f00ec618994942aa8a4685376a792c26acc.tar.gz
gsoc2013-epiphany-66053f00ec618994942aa8a4685376a792c26acc.tar.zst
gsoc2013-epiphany-66053f00ec618994942aa8a4685376a792c26acc.zip
Make SoupCookieJarAcceptPolicy match our cookie policies
Bug #607484
-rw-r--r--configure.ac2
-rw-r--r--embed/ephy-embed-prefs.c61
-rw-r--r--embed/ephy-embed-prefs.h8
-rw-r--r--embed/ephy-embed-single.c5
-rw-r--r--embed/ephy-embed-utils.c1
5 files changed, 71 insertions, 6 deletions
diff --git a/configure.ac b/configure.ac
index e923ca96c..04ad71314 100644
--- a/configure.ac
+++ b/configure.ac
@@ -101,7 +101,7 @@ LIBSTARTUP_NOTIFICATION_REQUIRED=0.5
LIBNOTIFY_REQUIRED=0.4
DBUS_GLIB_REQUIRED=0.35
WEBKIT_GTK_REQUIRED=1.1.19
-LIBSOUP_GNOME_REQUIRED=2.29.4
+LIBSOUP_GNOME_REQUIRED=2.29.90
GNOME_KEYRING_REQUIRED=2.26.0
PKG_CHECK_EXISTS([libnotify >= $LIBNOTIFY_REQUIRED],[have_libnotify=yes],[have_libnotify=no])
diff --git a/embed/ephy-embed-prefs.c b/embed/ephy-embed-prefs.c
index 0323d3282..382ff542f 100644
--- a/embed/ephy-embed-prefs.c
+++ b/embed/ephy-embed-prefs.c
@@ -329,6 +329,62 @@ webkit_pref_callback_accept_languages (GConfClient *client,
g_free (langs_str);
}
+void
+ephy_embed_prefs_set_cookie_jar_policy (SoupCookieJar *jar,
+ const char *gconf_policy)
+{
+ SoupCookieJarAcceptPolicy policy;
+
+ g_return_if_fail (SOUP_IS_COOKIE_JAR (jar));
+ g_return_if_fail (gconf_policy != NULL);
+
+ if (g_str_equal (gconf_policy, "nowhere"))
+ policy = SOUP_COOKIE_JAR_ACCEPT_NEVER;
+ else if (g_str_equal (gconf_policy, "anywhere"))
+ policy = SOUP_COOKIE_JAR_ACCEPT_ALWAYS;
+ else if (g_str_equal (gconf_policy, "current site"))
+ policy = SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY;
+ else {
+ g_warn_if_reached ();
+ return;
+ }
+
+ g_object_set (G_OBJECT (jar), SOUP_COOKIE_JAR_ACCEPT_POLICY, policy, NULL);
+}
+
+static void
+webkit_pref_callback_cookie_accept_policy (GConfClient *client,
+ guint cnxn_id,
+ GConfEntry *entry,
+ gpointer data)
+{
+ SoupSession *session;
+ char *webkit_pref;
+ GConfValue *gcvalue;
+ const char *value = NULL;
+
+ webkit_pref = data;
+
+ gcvalue = gconf_entry_get_value (entry);
+
+ /* happens on initial notify if the key doesn't exist */
+ if (gcvalue != NULL &&
+ gcvalue->type == GCONF_VALUE_STRING) {
+ value = gconf_value_get_string (gcvalue);
+ }
+
+ if (value) {
+ SoupSessionFeature *jar;
+
+ session = webkit_get_default_session ();
+ jar = soup_session_get_feature (session, SOUP_TYPE_COOKIE_JAR);
+ if (!jar)
+ return;
+
+ ephy_embed_prefs_set_cookie_jar_policy (SOUP_COOKIE_JAR (jar), value);
+ }
+}
+
static const PrefData webkit_pref_entries[] =
{
{ CONF_RENDERING_FONT_MIN_SIZE,
@@ -372,7 +428,10 @@ static const PrefData webkit_pref_entries[] =
webkit_pref_callback_accept_languages },
{ CONF_USER_AGENT,
"user-agent",
- webkit_pref_callback_user_agent }
+ webkit_pref_callback_user_agent },
+ { CONF_SECURITY_COOKIES_ACCEPT,
+ "accept-policy",
+ webkit_pref_callback_cookie_accept_policy }
};
static void
diff --git a/embed/ephy-embed-prefs.h b/embed/ephy-embed-prefs.h
index 4865aa0ed..c515eab80 100644
--- a/embed/ephy-embed-prefs.h
+++ b/embed/ephy-embed-prefs.h
@@ -72,9 +72,11 @@
G_BEGIN_DECLS
-void ephy_embed_prefs_init (void);
-void ephy_embed_prefs_shutdown (void);
-void ephy_embed_prefs_add_embed (EphyEmbed *embed);
+void ephy_embed_prefs_init (void);
+void ephy_embed_prefs_shutdown (void);
+void ephy_embed_prefs_add_embed (EphyEmbed *embed);
+void ephy_embed_prefs_set_cookie_jar_policy (SoupCookieJar *jar,
+ const char *gconf_policy);
G_END_DECLS
diff --git a/embed/ephy-embed-single.c b/embed/ephy-embed-single.c
index f8e0319a9..44efecaed 100644
--- a/embed/ephy-embed-single.c
+++ b/embed/ephy-embed-single.c
@@ -23,6 +23,7 @@
#define LIBSOUP_I_HAVE_READ_BUG_594377_AND_KNOW_SOUP_PASSWORD_MANAGER_MIGHT_GO_AWAY
#define NSPLUGINWRAPPER_SETUP "/usr/bin/mozilla-plugin-config"
+#include "eel-gconf-extensions.h"
#include "ephy-embed-single.h"
#include "ephy-embed-prefs.h"
#include "ephy-embed-type-builtins.h"
@@ -470,6 +471,7 @@ ephy_embed_single_initialize (EphyEmbedSingle *single)
SoupSession *session;
SoupCookieJar *jar;
char *filename;
+ char *cookie_policy;
/* Initialise nspluginwrapper's plugins if available */
if (g_file_test (NSPLUGINWRAPPER_SETUP, G_FILE_TEST_EXISTS) != FALSE)
@@ -483,6 +485,9 @@ ephy_embed_single_initialize (EphyEmbedSingle *single)
filename = g_build_filename (ephy_dot_dir (), "cookies.sqlite", NULL);
jar = soup_cookie_jar_sqlite_new (filename, FALSE);
g_free (filename);
+ cookie_policy = eel_gconf_get_string (CONF_SECURITY_COOKIES_ACCEPT);
+ ephy_embed_prefs_set_cookie_jar_policy (jar, cookie_policy);
+ g_free (cookie_policy);
soup_session_add_feature (session, SOUP_SESSION_FEATURE (jar));
g_object_unref (jar);
diff --git a/embed/ephy-embed-utils.c b/embed/ephy-embed-utils.c
index eb7c434c2..3463f2d52 100644
--- a/embed/ephy-embed-utils.c
+++ b/embed/ephy-embed-utils.c
@@ -19,7 +19,6 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $Id:
*/
#include "config.h"