diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/epiphany.defs | 73 | ||||
-rw-r--r-- | src/epiphany.h.in | 1 | ||||
-rw-r--r-- | src/epiphany.override | 13 | ||||
-rw-r--r-- | src/pdm-dialog.c | 203 |
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 |