diff options
author | Xan Lopez <xan@src.gnome.org> | 2009-02-23 19:48:51 +0800 |
---|---|---|
committer | Xan Lopez <xan@src.gnome.org> | 2009-02-23 19:48:51 +0800 |
commit | 6e63719484801e93f2b570d8c416645d71815c8e (patch) | |
tree | 63a6c258190a829d5c65587efe66331f161f0d1b /embed | |
parent | 8256ad318861ef0fa4c4a9f88c915afc56ab09bb (diff) | |
download | gsoc2013-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.am | 2 | ||||
-rw-r--r-- | embed/ephy-cookie-manager.c | 257 | ||||
-rw-r--r-- | embed/ephy-cookie-manager.h | 104 | ||||
-rw-r--r-- | embed/webkit/webkit-embed-single.c | 45 |
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; |