aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am1
-rw-r--r--src/epiphany.defs73
-rw-r--r--src/epiphany.h.in1
-rw-r--r--src/epiphany.override13
-rw-r--r--src/pdm-dialog.c203
5 files changed, 199 insertions, 92 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index f35b62c62..ad7ff3646 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -332,6 +332,7 @@ if ENABLE_PYTHON
BINDING_HEADERS_SRCDIR_IN = \
embed/ephy-command-manager.h \
+ embed/ephy-cookie-manager.h \
embed/ephy-embed-event.h \
embed/ephy-embed-factory.h \
embed/ephy-embed.h \
diff --git a/src/epiphany.defs b/src/epiphany.defs
index ea2263275..b96b50560 100644
--- a/src/epiphany.defs
+++ b/src/epiphany.defs
@@ -20,6 +20,12 @@
(gtype-id "EPHY_TYPE_COMMAND_MANAGER")
)
+(define-interface CookieManager
+ (in-module "Ephy")
+ (c-name "EphyCookieManager")
+ (gtype-id "EPHY_TYPE_COOKIE_MANAGER")
+)
+
(define-object Dialog
(in-module "Ephy")
(parent "GObject")
@@ -469,6 +475,57 @@
+;; From ../../embed/ephy-cookie-manager.h
+
+(define-function ephy_cookie_get_type
+ (c-name "ephy_cookie_get_type")
+ (return-type "GType")
+)
+
+(define-function ephy_cookie_new
+ (c-name "ephy_cookie_new")
+ (is-constructor-of "EphyCookie")
+ (return-type "EphyCookie*")
+)
+
+(define-method copy
+ (of-object "EphyCookie")
+ (c-name "ephy_cookie_copy")
+ (return-type "EphyCookie*")
+)
+
+(define-method free
+ (of-object "EphyCookie")
+ (c-name "ephy_cookie_free")
+ (return-type "none")
+)
+
+(define-function ephy_cookie_manager_get_type
+ (c-name "ephy_cookie_manager_get_type")
+ (return-type "GType")
+)
+
+(define-method list_cookies
+ (of-object "EphyCookieManager")
+ (c-name "ephy_cookie_manager_list_cookies")
+ (return-type "GList*")
+)
+
+(define-method remove_cookie
+ (of-object "EphyCookieManager")
+ (c-name "ephy_cookie_manager_remove_cookie")
+ (return-type "none")
+ (parameters
+ '("const-EphyCookie*" "cookie")
+ )
+)
+
+(define-method clear
+ (of-object "EphyCookieManager")
+ (c-name "ephy_cookie_manager_clear")
+ (return-type "none")
+)
+
;; From ../../embed/ephy-embed-container.h
(define-method set_active_child
@@ -3463,6 +3520,22 @@
;; Boxed types ...
+(define-boxed Cookie
+ (in-module "Ephy")
+ (c-name "EphyCookie")
+ (gtype-id "EPHY_TYPE_COOKIE")
+ (fields
+ '("char*" "name")
+ '("char*" "value")
+ '("char*" "domain")
+ '("char*" "path")
+ '("gulong" "expires")
+ '("glong" "real_expires")
+ '("guint" "is_secure")
+ '("guint" "is_session")
+ )
+)
+
(define-boxed PasswordInfo
(in-module "Ephy")
(c-name "EphyPasswordInfo")
diff --git a/src/epiphany.h.in b/src/epiphany.h.in
index e23d1a3a6..667f84283 100644
--- a/src/epiphany.h.in
+++ b/src/epiphany.h.in
@@ -39,6 +39,7 @@
#include <epiphany/ephy-bookmarks.h>
#include <epiphany/ephy-bookmarks-type-builtins.h>
#include <epiphany/ephy-command-manager.h>
+#include <epiphany/ephy-cookie-manager.h>
#include <epiphany/ephy-dialog.h>
#include <epiphany/ephy-embed-container.h>
#include <epiphany/ephy-embed-event.h>
diff --git a/src/epiphany.override b/src/epiphany.override
index 3b183a171..28622fd6c 100644
--- a/src/epiphany.override
+++ b/src/epiphany.override
@@ -28,6 +28,7 @@ headers
#include "ephy-bookmarks.h"
#include "ephy-bookmarks-type-builtins.h"
#include "ephy-command-manager.h"
+#include "ephy-cookie-manager.h"
#include "ephy-dialog.h"
#include "ephy-embed-event.h"
#include "ephy-embed-factory.h"
@@ -359,6 +360,18 @@ _wrap_ephy_password_manager_list_passwords (PyGObject *self)
return _helper_wrap_boxed_glist (EPHY_TYPE_PASSWORD_INFO, list);
}
+%%
+override ephy_cookie_manager_list_cookies noargs
+static PyObject *
+_wrap_ephy_cookie_manager_list_cookies(PyGObject *self)
+{
+ GList *list;
+
+ list = ephy_cookie_manager_list_cookies(EPHY_COOKIE_MANAGER (self->obj));
+
+ return _helper_wrap_boxed_glist (EPHY_TYPE_COOKIE, list);
+}
+%%
//override ephy_permission_manager_list_permissions kwargs
// static PyObject *
// _wrap_ephy_permission_manager_list_permissions (PyGObject *self,
diff --git a/src/pdm-dialog.c b/src/pdm-dialog.c
index 28c491487..a1b41f3ac 100644
--- a/src/pdm-dialog.c
+++ b/src/pdm-dialog.c
@@ -24,6 +24,7 @@
#include "pdm-dialog.h"
#include "ephy-shell.h"
+#include "ephy-cookie-manager.h"
#include "ephy-file-helpers.h"
#include "ephy-password-manager.h"
#include "ephy-gui.h"
@@ -38,11 +39,8 @@
#include <gtk/gtk.h>
#include <glib/gi18n.h>
-#include <libsoup/soup.h>
-#include <webkit/webkit.h>
#include <string.h>
-#include <time.h>
typedef struct PdmActionInfo PdmActionInfo;
@@ -125,12 +123,12 @@ EphyDialogProperty properties [] =
{ "pdm_dialog", NULL, PT_NORMAL, 0 },
{ "pdm_notebook", NULL, PT_NORMAL, 0 },
- { "cookies_treeview", NULL, PT_NORMAL, 0 },
- { "cookies_remove_button", NULL, PT_NORMAL, 0 },
- { "cookies_properties_button", NULL, PT_NORMAL, 0 },
- { "passwords_treeview", NULL, PT_NORMAL, 0 },
- { "passwords_remove_button", NULL, PT_NORMAL, 0 },
- { "passwords_show_button", NULL, PT_NORMAL, 0 },
+ { "cookies_treeview", NULL, PT_NORMAL, 0 },
+ { "cookies_remove_button", NULL, PT_NORMAL, 0 },
+ { "cookies_properties_button", NULL, PT_NORMAL, 0 },
+ { "passwords_treeview", NULL, PT_NORMAL, 0 },
+ { "passwords_remove_button", NULL, PT_NORMAL, 0 },
+ { "passwords_show_button", NULL, PT_NORMAL, 0 },
{ NULL }
};
@@ -139,7 +137,7 @@ static void pdm_dialog_class_init (PdmDialogClass *klass);
static void pdm_dialog_init (PdmDialog *dialog);
static void pdm_dialog_finalize (GObject *object);
-static void passwords_changed_cb (EphyPasswordManager *manager,
+static void passwords_changed_cb (EphyPasswordManager *manager,
PdmDialog *dialog);
@@ -188,22 +186,6 @@ typedef struct
guint num_checked;
} PdmClearAllDialogButtons;
-static SoupCookieJar*
-get_cookie_jar ()
-{
- GSList *l;
- /* This is not finished webkit API, just testing */
- SoupSession* session = webkit_web_view_get_session ();
-
- for (l = soup_session_get_features (session); l; l = l->next)
- {
- if (SOUP_IS_COOKIE_JAR (l->data))
- return l->data;
- }
-
- return NULL;
-}
-
static void
clear_all_dialog_release_cb (PdmClearAllDialogButtons *data)
{
@@ -211,18 +193,6 @@ clear_all_dialog_release_cb (PdmClearAllDialogButtons *data)
}
static void
-clear_all_cookies (SoupCookieJar *jar)
-{
- GSList *l, *p;
-
- l = soup_cookie_jar_all_cookies (jar);
- for (p = l; p; p = p->next)
- soup_cookie_jar_delete_cookie (jar, (SoupCookie*)p->data);
-
- soup_cookies_free (l);
-}
-
-static void
clear_all_dialog_response_cb (GtkDialog *dialog,
int response,
PdmClearAllDialogButtons *checkbuttons)
@@ -238,7 +208,7 @@ clear_all_dialog_response_cb (GtkDialog *dialog,
if (response == GTK_RESPONSE_OK)
{
if (gtk_toggle_button_get_active
- (GTK_TOGGLE_BUTTON (checkbuttons->checkbutton_history)))
+ (GTK_TOGGLE_BUTTON (checkbuttons->checkbutton_history)))
{
EphyEmbedShell *shell;
EphyHistory *history;
@@ -248,16 +218,17 @@ clear_all_dialog_response_cb (GtkDialog *dialog,
ephy_history_clear (history);
}
if (gtk_toggle_button_get_active
- (GTK_TOGGLE_BUTTON (checkbuttons->checkbutton_cookies)))
+ (GTK_TOGGLE_BUTTON (checkbuttons->checkbutton_cookies)))
{
- SoupCookieJar *jar;
+ EphyCookieManager *manager;
- jar = get_cookie_jar ();
+ manager = EPHY_COOKIE_MANAGER (ephy_embed_shell_get_embed_single
+ (EPHY_EMBED_SHELL (ephy_shell)));
- clear_all_cookies (jar);
+ ephy_cookie_manager_clear (manager);
}
if (gtk_toggle_button_get_active
- (GTK_TOGGLE_BUTTON (checkbuttons->checkbutton_passwords)))
+ (GTK_TOGGLE_BUTTON (checkbuttons->checkbutton_passwords)))
{
EphyPasswordManager *manager;
@@ -291,7 +262,7 @@ clear_all_dialog_response_cb (GtkDialog *dialog,
}
}
if (gtk_toggle_button_get_active
- (GTK_TOGGLE_BUTTON (checkbuttons->checkbutton_cache)))
+ (GTK_TOGGLE_BUTTON (checkbuttons->checkbutton_cache)))
{
EphyEmbedShell *shell;
EphyEmbedSingle *single;
@@ -435,7 +406,7 @@ pdm_dialog_show_clear_all_dialog (EphyDialog *edialog,
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label),
_("<small><i><b>Note:</b> You cannot undo this action. "
- "The data you are choosing to clear "
+ "The data you are choosing to clear "
"will be deleted forever.</i></small>"));
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
label, FALSE, FALSE, 0);
@@ -617,7 +588,7 @@ setup_action (PdmActionInfo *action)
static void
show_cookies_properties (PdmDialog *dialog,
- SoupCookie *info)
+ EphyCookie *info)
{
GtkWidget *gdialog;
GtkWidget *table;
@@ -688,7 +659,7 @@ show_cookies_properties (PdmDialog *dialog,
gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3,
GTK_FILL, GTK_FILL, 0, 0);
- label = gtk_label_new (info->secure ? _("Encrypted connections only") : _("Any type of connection") );
+ label = gtk_label_new (info->is_secure ? _("Encrypted connections only") : _("Any type of connection") );
gtk_label_set_selectable (GTK_LABEL (label), TRUE);
gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
gtk_widget_show (label);
@@ -703,16 +674,14 @@ show_cookies_properties (PdmDialog *dialog,
gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4,
GTK_FILL, GTK_FILL, 0, 0);
- if (info->expires == NULL)
+ if (info->is_session)
{
- /* Session cookie */
str = g_strdup (_("End of current session"));
}
else
{
struct tm t;
- time_t out = soup_date_to_time_t(info->expires);
- str = eel_strdup_strftime ("%c", localtime_r (&out, &t));
+ str = eel_strdup_strftime ("%c", localtime_r (&info->expires, &t));
}
label = gtk_label_new (str);
g_free (str);
@@ -742,7 +711,7 @@ cookies_properties_clicked_cb (GtkWidget *button,
GValue val = {0, };
GtkTreeIter iter;
GtkTreePath *path;
- SoupCookie *cookie;
+ EphyCookie *cookie;
GList *l;
GtkTreeSelection *selection;
@@ -754,7 +723,7 @@ cookies_properties_clicked_cb (GtkWidget *button,
gtk_tree_model_get_iter (model, &iter, path);
gtk_tree_model_get_value
(model, &iter, COL_COOKIES_DATA, &val);
- cookie = (SoupCookie *) g_value_get_boxed (&val);
+ cookie = (EphyCookie *) g_value_get_boxed (&val);
show_cookies_properties (dialog, cookie);
@@ -823,7 +792,7 @@ pdm_dialog_cookies_construct (PdmActionInfo *info)
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_STRING,
- SOUP_TYPE_COOKIE);
+ EPHY_TYPE_COOKIE);
gtk_tree_view_set_model (treeview, GTK_TREE_MODEL(liststore));
gtk_tree_view_set_headers_visible (treeview, TRUE);
selection = gtk_tree_view_get_selection (treeview);
@@ -875,8 +844,19 @@ pdm_dialog_cookies_construct (PdmActionInfo *info)
}
static gboolean
+compare_cookies (const EphyCookie *cookie1,
+ const EphyCookie *cookie2)
+{
+ g_return_val_if_fail (cookie1 != NULL || cookie2 != NULL, FALSE);
+
+ return (strcmp (cookie1->domain, cookie2->domain) == 0
+ && strcmp (cookie1->path, cookie2->path) == 0
+ && strcmp (cookie1->name, cookie2->name) == 0);
+}
+
+static gboolean
cookie_to_iter (GtkTreeModel *model,
- const SoupCookie *cookie,
+ const EphyCookie *cookie,
GtkTreeIter *iter)
{
gboolean valid;
@@ -886,15 +866,15 @@ cookie_to_iter (GtkTreeModel *model,
while (valid)
{
- SoupCookie *data;
+ EphyCookie *data;
gtk_tree_model_get (model, iter,
COL_COOKIES_DATA, &data,
-1);
- found = soup_cookie_equal (cookie, data);
+ found = compare_cookies (cookie, data);
- soup_cookie_free (data);
+ ephy_cookie_free (data);
if (found) break;
@@ -905,9 +885,20 @@ cookie_to_iter (GtkTreeModel *model,
}
static void
-cookie_changed_cb (SoupCookieJar *jar,
- const SoupCookie *old_cookie,
- const SoupCookie *new_cookie,
+cookie_added_cb (EphyCookieManager *manager,
+ const EphyCookie *cookie,
+ PdmDialog *dialog)
+{
+ PdmActionInfo *info = dialog->priv->cookies;
+
+ LOG ("cookie_added_cb");
+
+ info->add (info, (gpointer) ephy_cookie_copy (cookie));
+}
+
+static void
+cookie_changed_cb (EphyCookieManager *manager,
+ const EphyCookie *cookie,
PdmDialog *dialog)
{
PdmActionInfo *info = dialog->priv->cookies;
@@ -915,30 +906,48 @@ cookie_changed_cb (SoupCookieJar *jar,
LOG ("cookie_changed_cb");
- g_return_if_fail (info);
-
- if (old_cookie)
+ if (cookie_to_iter (info->model, cookie, &iter))
{
- /* Cookie changed or deleted, let's get rid of the old one
- in any case */
- if (cookie_to_iter (info->model, old_cookie, &iter))
- {
- gtk_list_store_remove (GTK_LIST_STORE (info->model), &iter);
- }
- else
- {
- g_warning ("Unable to find changed cookie in list!\n");
- }
+ gtk_list_store_remove (GTK_LIST_STORE (info->model), &iter);
+ info->add (info, (gpointer) ephy_cookie_copy (cookie));
}
+ else
+ {
+ g_warning ("Unable to find changed cookie in list!\n");
+ }
+}
+
+static void
+cookie_deleted_cb (EphyCookieManager *manager,
+ const EphyCookie *cookie,
+ PdmDialog *dialog)
+{
+ PdmActionInfo *info = dialog->priv->cookies;
+ GtkTreeIter iter;
+
+ LOG ("cookie_deleted_cb");
- if (new_cookie)
+ if (cookie_to_iter (info->model, cookie, &iter))
+ {
+ gtk_list_store_remove (GTK_LIST_STORE (info->model), &iter);
+ }
+ else
{
- /* Cookie changed or added, let's add the new cookie in
- any case */
- info->add (info, (gpointer) soup_cookie_copy (new_cookie));
+ g_warning ("Unable to find deleted cookie in list!\n");
}
}
+static void
+cookies_cleared_cb (EphyCookieManager *manager,
+ PdmDialog *dialog)
+{
+ PdmActionInfo *info = dialog->priv->cookies;
+
+ LOG ("cookies_cleared_cb");
+
+ gtk_list_store_clear (GTK_LIST_STORE (info->model));
+}
+
static gboolean
cookie_host_to_iter (GtkTreeModel *model,
const char *key1,
@@ -1030,13 +1039,15 @@ compare_cookie_host_keys (GtkTreeModel *model,
static void
pdm_dialog_fill_cookies_list (PdmActionInfo *info)
{
- SoupCookieJar *jar;
- GSList *list, *l;
+ EphyCookieManager *manager;
+ GList *list, *l;
g_assert (info->filled == FALSE);
- jar = get_cookie_jar ();
- list = soup_cookie_jar_all_cookies (jar);
+ manager = EPHY_COOKIE_MANAGER (ephy_embed_shell_get_embed_single
+ (EPHY_EMBED_SHELL (ephy_shell)));
+
+ list = ephy_cookie_manager_list_cookies (manager);
for (l = list; l != NULL; l = l->next)
{
@@ -1044,7 +1055,7 @@ pdm_dialog_fill_cookies_list (PdmActionInfo *info)
}
/* the element data has been consumed, so we need only to free the list */
- g_slist_free (list);
+ g_list_free (list);
/* Now turn on sorting */
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (info->model),
@@ -1057,8 +1068,15 @@ pdm_dialog_fill_cookies_list (PdmActionInfo *info)
info->filled = TRUE;
- g_signal_connect (jar, "changed",
- G_CALLBACK (cookie_changed_cb), info->dialog);
+ /* Now connect the callbacks on the EphyCookieManager */
+ g_signal_connect (manager, "cookie-added",
+ G_CALLBACK (cookie_added_cb), info->dialog);
+ g_signal_connect (manager, "cookie-changed",
+ G_CALLBACK (cookie_changed_cb), info->dialog);
+ g_signal_connect (manager, "cookie-deleted",
+ G_CALLBACK (cookie_deleted_cb), info->dialog);
+ g_signal_connect (manager, "cookies-cleared",
+ G_CALLBACK (cookies_cleared_cb), info->dialog);
info->scroll_to (info);
}
@@ -1074,7 +1092,7 @@ static void
pdm_dialog_cookie_add (PdmActionInfo *info,
gpointer data)
{
- SoupCookie *cookie = (SoupCookie *) data;
+ EphyCookie *cookie = (EphyCookie *) data;
GtkListStore *store;
GtkTreeIter iter;
int column[4] = { COL_COOKIES_HOST, COL_COOKIES_HOST_KEY, COL_COOKIES_NAME, COL_COOKIES_DATA };
@@ -1091,7 +1109,7 @@ pdm_dialog_cookie_add (PdmActionInfo *info,
g_value_init (&value[0], G_TYPE_STRING);
g_value_init (&value[1], G_TYPE_STRING);
g_value_init (&value[2], G_TYPE_STRING);
- g_value_init (&value[3], SOUP_TYPE_COOKIE);
+ g_value_init (&value[3], EPHY_TYPE_COOKIE);
g_value_set_static_string (&value[0], cookie->domain);
g_value_take_string (&value[1], ephy_string_collate_key_for_domain (cookie->domain, -1));
@@ -1112,12 +1130,13 @@ static void
pdm_dialog_cookie_remove (PdmActionInfo *info,
gpointer data)
{
- SoupCookie *cookie = (SoupCookie *) data;
- SoupCookieJar *jar;
+ EphyCookie *cookie = (EphyCookie *) data;
+ EphyCookieManager *manager;
- jar = get_cookie_jar();
+ manager = EPHY_COOKIE_MANAGER (ephy_embed_shell_get_embed_single
+ (EPHY_EMBED_SHELL (ephy_shell)));
- soup_cookie_jar_delete_cookie (jar, cookie);
+ ephy_cookie_manager_remove_cookie (manager, cookie);
}
static void