aboutsummaryrefslogtreecommitdiffstats
path: root/embed
diff options
context:
space:
mode:
authorXan Lopez <xan@src.gnome.org>2009-02-23 19:48:51 +0800
committerXan Lopez <xan@src.gnome.org>2009-02-23 19:48:51 +0800
commit6e63719484801e93f2b570d8c416645d71815c8e (patch)
tree63a6c258190a829d5c65587efe66331f161f0d1b /embed
parent8256ad318861ef0fa4c4a9f88c915afc56ab09bb (diff)
downloadgsoc2013-epiphany-6e63719484801e93f2b570d8c416645d71815c8e.tar
gsoc2013-epiphany-6e63719484801e93f2b570d8c416645d71815c8e.tar.gz
gsoc2013-epiphany-6e63719484801e93f2b570d8c416645d71815c8e.tar.bz2
gsoc2013-epiphany-6e63719484801e93f2b570d8c416645d71815c8e.tar.lz
gsoc2013-epiphany-6e63719484801e93f2b570d8c416645d71815c8e.tar.xz
gsoc2013-epiphany-6e63719484801e93f2b570d8c416645d71815c8e.tar.zst
gsoc2013-epiphany-6e63719484801e93f2b570d8c416645d71815c8e.zip
Use libsoup, getting the session from webkit, to handle cookies.
Requires libsoup-gnome for SoupCookieJarSQLite storage. Depending on 2.25.91, although we actually need trunk to get working code. svn path=/trunk/; revision=8811
Diffstat (limited to 'embed')
-rw-r--r--embed/Makefile.am2
-rw-r--r--embed/ephy-cookie-manager.c257
-rw-r--r--embed/ephy-cookie-manager.h104
-rw-r--r--embed/webkit/webkit-embed-single.c45
4 files changed, 14 insertions, 394 deletions
diff --git a/embed/Makefile.am b/embed/Makefile.am
index e9486b1fa..e0c8b516f 100644
--- a/embed/Makefile.am
+++ b/embed/Makefile.am
@@ -21,7 +21,6 @@ INST_H_FILES = \
ephy-adblock-manager.h \
ephy-base-embed.h \
ephy-command-manager.h \
- ephy-cookie-manager.h \
ephy-embed.h \
ephy-embed-container.h \
ephy-embed-event.h \
@@ -45,7 +44,6 @@ libephyembed_la_SOURCES = \
ephy-base-embed.c \
downloader-view.c \
ephy-command-manager.c \
- ephy-cookie-manager.c \
ephy-download.c \
ephy-embed.c \
ephy-embed-container.c \
diff --git a/embed/ephy-cookie-manager.c b/embed/ephy-cookie-manager.c
deleted file mode 100644
index 8a8f74605..000000000
--- a/embed/ephy-cookie-manager.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright © 2000-2003 Marco Pesenti Gritti
- * Copyright © 2003 Christian Persch
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "config.h"
-
-#include "ephy-cookie-manager.h"
-
-GType
-ephy_cookie_get_type (void)
-{
- static GType type = 0;
-
- if (G_UNLIKELY (type == 0))
- {
- type = g_boxed_type_register_static ("EphyCookie",
- (GBoxedCopyFunc) ephy_cookie_copy,
- (GBoxedFreeFunc) ephy_cookie_free);
- }
-
- return type;
-}
-
-/**
- * ephy_cookie_new:
- *
- * Return value: a new #EphyCookie.
- **/
-EphyCookie *
-ephy_cookie_new (void)
-{
- return g_slice_new0 (EphyCookie);
-}
-
-/**
- * ephy_cookie_copy:
- * @cookie: a #EphyCookie
- *
- * Return value: a copy of @cookie.
- **/
-EphyCookie *
-ephy_cookie_copy (const EphyCookie *cookie)
-{
- EphyCookie *copy = g_slice_new0 (EphyCookie);
-
- copy->name = g_strdup (cookie->name);
- copy->value = g_strdup (cookie->value);
- copy->domain = g_strdup (cookie->domain);
- copy->path = g_strdup (cookie->path);
- copy->expires = cookie->expires;
- copy->real_expires = cookie->real_expires;
- copy->is_secure = cookie->is_secure;
- copy->is_session = cookie->is_session;
-
- return copy;
-}
-
-/**
- * ephy_cookie_free:
- * @cookie: a #EphyCookie
- *
- * Frees @cookie.
- **/
-void
-ephy_cookie_free (EphyCookie *cookie)
-{
- if (cookie != NULL)
- {
- g_free (cookie->name);
- g_free (cookie->value);
- g_free (cookie->domain);
- g_free (cookie->path);
-
- g_slice_free (EphyCookie, cookie);
- }
-}
-
-/* EphyCookieManager */
-
-static void ephy_cookie_manager_base_init (gpointer base_iface);
-
-GType
-ephy_cookie_manager_get_type (void)
-{
- static GType type = 0;
-
- if (G_UNLIKELY (type == 0))
- {
- const GTypeInfo our_info =
- {
- sizeof (EphyCookieManagerIface),
- ephy_cookie_manager_base_init,
- NULL,
- };
-
- type = g_type_register_static (G_TYPE_INTERFACE,
- "EphyCookieManager",
- &our_info,
- (GTypeFlags) 0);
- }
-
- return type;
-}
-
-static void
-ephy_cookie_manager_base_init (gpointer base_iface)
-{
- static gboolean initialised = FALSE;
-
- if (initialised == FALSE)
- {
- /**
- * EphyCookieManager::cookie-added
- * @manager: the #EphyCookieManager
- * @cookie: the added #EphyCookie
- *
- * The cookie-added signal is emitted when a cookie has been added.
- **/
- g_signal_new ("cookie-added",
- EPHY_TYPE_COOKIE_MANAGER,
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EphyCookieManagerIface, added),
- NULL, NULL,
- g_cclosure_marshal_VOID__BOXED,
- G_TYPE_NONE,
- 1,
- EPHY_TYPE_COOKIE | G_SIGNAL_TYPE_STATIC_SCOPE);
-
- /**
- * EphyCookieManager::cookie-changed
- * @manager: the #EphyCookieManager
- * @cookie: the changed #EphyCookie
- *
- * The cookie-changed signal is emitted when a cookie has been changed.
- **/
- g_signal_new ("cookie-changed",
- EPHY_TYPE_COOKIE_MANAGER,
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EphyCookieManagerIface, changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__BOXED,
- G_TYPE_NONE,
- 1,
- EPHY_TYPE_COOKIE | G_SIGNAL_TYPE_STATIC_SCOPE);
-
- /**
- * EphyCookieManager::cookie-deleted
- * @manager: the #EphyCookieManager
- * @cookie: the deleted #EphyCookie
- *
- * The cookie-deleted signal is emitted when a cookie has been deleted.
- **/
- g_signal_new ("cookie-deleted",
- EPHY_TYPE_COOKIE_MANAGER,
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EphyCookieManagerIface, deleted),
- NULL, NULL,
- g_cclosure_marshal_VOID__BOXED,
- G_TYPE_NONE,
- 1,
- EPHY_TYPE_COOKIE | G_SIGNAL_TYPE_STATIC_SCOPE);
-
- /**
- * EphyCookieManager::cookie-rejected
- * @manager: the #EphyCookieManager
- * @address: the address of the page that wanted to set the cookie
- *
- * The cookie-rejected signal is emitted when a cookie has been rejected.
- **/
- g_signal_new ("cookie-rejected",
- EPHY_TYPE_COOKIE_MANAGER,
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EphyCookieManagerIface, rejected),
- NULL, NULL,
- g_cclosure_marshal_VOID__STRING,
- G_TYPE_NONE,
- 1,
- G_TYPE_STRING | G_SIGNAL_TYPE_STATIC_SCOPE);
-
- /**
- * EphyCookieManager::cookies-cleared
- * @manager: the #EphyCookieManager
- *
- * The cookies-cleared signal is emitted when the cookie database has
- * been cleared.
- **/
- g_signal_new ("cookies-cleared",
- EPHY_TYPE_COOKIE_MANAGER,
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EphyCookieManagerIface, cleared),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
-
- initialised = TRUE;
- }
-}
-
-/**
- * ephy_cookie_manager_list_cookies:
- * @manager: the #EphyCookieManager
- *
- * Lists all cookies in the cookies database.
- *
- * Return value: the cookies list
- **/
-GList *
-ephy_cookie_manager_list_cookies (EphyCookieManager *manager)
-{
- EphyCookieManagerIface *iface = EPHY_COOKIE_MANAGER_GET_IFACE (manager);
- return iface->list (manager);
-}
-
-/**
- * ephy_cookie_manager_remove_cookie:
- * @manager: the #EphyCookieManager
- * @cookie: a #EphyCookie
- *
- * Removes @cookie from the cookies database. You must free @cookie yourself.
- **/
-void
-ephy_cookie_manager_remove_cookie (EphyCookieManager *manager,
- const EphyCookie *cookie)
-{
- EphyCookieManagerIface *iface = EPHY_COOKIE_MANAGER_GET_IFACE (manager);
- iface->remove (manager, cookie);
-}
-
-/**
- * ephy_cookie_manager_clear:
- * @manager: the #EphyCookieManager
- *
- * Clears the cookies database.
- **/
-void
-ephy_cookie_manager_clear (EphyCookieManager *manager)
-{
- EphyCookieManagerIface *iface = EPHY_COOKIE_MANAGER_GET_IFACE (manager);
- iface->clear (manager);
-}
diff --git a/embed/ephy-cookie-manager.h b/embed/ephy-cookie-manager.h
deleted file mode 100644
index 2f12d4073..000000000
--- a/embed/ephy-cookie-manager.h
+++ /dev/null
@@ -1,104 +0,0 @@
- /*
- * Copyright © 2003 Marco Pesenti Gritti
- * Copyright © 2003 Christian Persch
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#if !defined (__EPHY_EPIPHANY_H_INSIDE__) && !defined (EPIPHANY_COMPILATION)
-#error "Only <epiphany/epiphany.h> can be included directly."
-#endif
-
-#ifndef EPHY_COOKIE_MANAGER_H
-#define EPHY_COOKIE_MANAGER_H
-
-#include <glib-object.h>
-#include <glib.h>
-#include <time.h>
-
-G_BEGIN_DECLS
-
-#define EPHY_TYPE_COOKIE_MANAGER (ephy_cookie_manager_get_type ())
-#define EPHY_COOKIE_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EPHY_TYPE_COOKIE_MANAGER, EphyCookieManager))
-#define EPHY_COOKIE_MANAGER_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EPHY_TYPE_COOKIE_MANAGER, EphyCookieManagerIface))
-#define EPHY_IS_COOKIE_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EPHY_TYPE_COOKIE_MANAGER))
-#define EPHY_IS_COOKIE_MANAGER_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EPHY_TYPE_COOKIE_MANAGER))
-#define EPHY_COOKIE_MANAGER_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EPHY_TYPE_COOKIE_MANAGER, EphyCookieManagerIface))
-
-#define EPHY_TYPE_COOKIE (ephy_cookie_get_type ())
-
-typedef struct _EphyCookieManager EphyCookieManager;
-typedef struct _EphyCookieManagerIface EphyCookieManagerIface;
-
-typedef struct
-{
- char *name;
- char *value;
- char *domain;
- char *path;
- time_t expires;
- glong real_expires;
- guint is_secure : 1;
- guint is_session : 1;
- guint is_http_only : 1;
-} EphyCookie;
-
-struct _EphyCookieManagerIface
-{
- GTypeInterface base_iface;
-
- /* Signals */
- void (* added) (EphyCookieManager *manager,
- EphyCookie *cookie);
- void (* changed) (EphyCookieManager *manager,
- EphyCookie *cookie);
- void (* deleted) (EphyCookieManager *manager,
- EphyCookie *cookie);
- void (* rejected) (EphyCookieManager *manager,
- const char *url);
- void (* cleared) (EphyCookieManager *manager);
-
- /* Methods */
- GList * (* list) (EphyCookieManager *manager);
- void (* remove) (EphyCookieManager *manager,
- const EphyCookie *cookie);
- void (* clear) (EphyCookieManager *manager);
-};
-
-/* EphyCookie */
-
-GType ephy_cookie_get_type (void);
-
-EphyCookie *ephy_cookie_new (void);
-
-EphyCookie *ephy_cookie_copy (const EphyCookie *cookie);
-
-void ephy_cookie_free (EphyCookie *cookie);
-
-/* EphyCookieManager */
-
-GType ephy_cookie_manager_get_type (void);
-
-GList * ephy_cookie_manager_list_cookies (EphyCookieManager *manager);
-
-void ephy_cookie_manager_remove_cookie (EphyCookieManager *manager,
- const EphyCookie *cookie);
-
-void ephy_cookie_manager_clear (EphyCookieManager *manager);
-
-G_END_DECLS
-
-#endif
diff --git a/embed/webkit/webkit-embed-single.c b/embed/webkit/webkit-embed-single.c
index 2aa778c74..849d44127 100644
--- a/embed/webkit/webkit-embed-single.c
+++ b/embed/webkit/webkit-embed-single.c
@@ -20,11 +20,13 @@
#include "config.h"
#include <glib/gi18n.h>
#include <webkit/webkit.h>
+#include <libsoup/soup.h>
+#include <libsoup/soup-gnome.h>
#include "webkit-embed-single.h"
#include "webkit-embed-prefs.h"
#include "ephy-embed-single.h"
-#include "ephy-cookie-manager.h"
+#include "ephy-file-helpers.h"
#include "ephy-password-manager.h"
#include "ephy-permission-manager.h"
@@ -46,7 +48,6 @@ enum {
static void webkit_embed_single_class_init (WebKitEmbedSingleClass *klass);
static void webkit_embed_single_init (WebKitEmbedSingle *wes);
static void ephy_embed_single_iface_init (EphyEmbedSingleIface *iface);
-static void ephy_cookie_manager_iface_init (EphyCookieManagerIface *iface);
static void ephy_password_manager_iface_init (EphyPasswordManagerIface *iface);
static void ephy_permission_manager_iface_init (EphyPermissionManagerIface *iface);
@@ -61,8 +62,6 @@ static void ephy_certificate_manager_iface_init (EphyCertificateManagerIface *if
G_DEFINE_TYPE_WITH_CODE (WebKitEmbedSingle, webkit_embed_single, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (EPHY_TYPE_EMBED_SINGLE,
ephy_embed_single_iface_init)
- G_IMPLEMENT_INTERFACE (EPHY_TYPE_COOKIE_MANAGER,
- ephy_cookie_manager_iface_init)
G_IMPLEMENT_INTERFACE (EPHY_TYPE_PASSWORD_MANAGER,
ephy_password_manager_iface_init)
G_IMPLEMENT_INTERFACE (EPHY_TYPE_CERTIFICATE_MANAGER,
@@ -73,8 +72,6 @@ G_DEFINE_TYPE_WITH_CODE (WebKitEmbedSingle, webkit_embed_single, G_TYPE_OBJECT,
G_DEFINE_TYPE_WITH_CODE (WebKitEmbedSingle, webkit_embed_single, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (EPHY_TYPE_EMBED_SINGLE,
ephy_embed_single_iface_init)
- G_IMPLEMENT_INTERFACE (EPHY_TYPE_COOKIE_MANAGER,
- ephy_cookie_manager_iface_init)
G_IMPLEMENT_INTERFACE (EPHY_TYPE_PASSWORD_MANAGER,
ephy_password_manager_iface_init)
G_IMPLEMENT_INTERFACE (EPHY_TYPE_PERMISSION_MANAGER,
@@ -147,23 +144,6 @@ impl_get_font_list (EphyEmbedSingle *shell,
}
static GList *
-impl_list_cookies (EphyCookieManager *manager)
-{
- return NULL;
-}
-
-static void
-impl_remove_cookie (EphyCookieManager *manager,
- const EphyCookie *cookie)
-{
-}
-
-static void
-impl_clear_cookies (EphyCookieManager *manager)
-{
-}
-
-static GList *
impl_list_passwords (EphyPasswordManager *manager)
{
return NULL;
@@ -219,8 +199,19 @@ impl_permission_manager_test (EphyPermissionManager *manager,
static gboolean
impl_init (EphyEmbedSingle *esingle)
{
+ SoupSession *session;
+ SoupCookieJar *jar;
+ char *filename;
+
webkit_embed_prefs_init ();
+ filename = g_build_filename (ephy_dot_dir (), "cookies.sqlite", NULL);
+ jar = soup_cookie_jar_sqlite_new (filename, FALSE);
+ g_free (filename);
+
+ session = webkit_get_default_session ();
+ soup_session_add_feature (session, SOUP_SESSION_FEATURE(jar));
+
return TRUE;
}
@@ -332,14 +323,6 @@ ephy_embed_single_iface_init (EphyEmbedSingleIface *iface)
}
static void
-ephy_cookie_manager_iface_init (EphyCookieManagerIface *iface)
-{
- iface->list = impl_list_cookies;
- iface->remove = impl_remove_cookie;
- iface->clear = impl_clear_cookies;
-}
-
-static void
ephy_password_manager_iface_init (EphyPasswordManagerIface *iface)
{
iface->add = impl_add_password;