diff options
author | Xan Lopez <xan@src.gnome.org> | 2008-12-12 08:09:41 +0800 |
---|---|---|
committer | Xan Lopez <xan@src.gnome.org> | 2008-12-12 08:09:41 +0800 |
commit | c4d95ec8b49d437f3372390f1662c67bfd56b64b (patch) | |
tree | ae0e087b41c9850e43b322e01bd1fe03fe142073 /src/pdm-dialog.c | |
parent | d9316c22dde31d8fe2907ca30f23532412363d01 (diff) | |
download | gsoc2013-epiphany-c4d95ec8b49d437f3372390f1662c67bfd56b64b.tar gsoc2013-epiphany-c4d95ec8b49d437f3372390f1662c67bfd56b64b.tar.gz gsoc2013-epiphany-c4d95ec8b49d437f3372390f1662c67bfd56b64b.tar.bz2 gsoc2013-epiphany-c4d95ec8b49d437f3372390f1662c67bfd56b64b.tar.lz gsoc2013-epiphany-c4d95ec8b49d437f3372390f1662c67bfd56b64b.tar.xz gsoc2013-epiphany-c4d95ec8b49d437f3372390f1662c67bfd56b64b.tar.zst gsoc2013-epiphany-c4d95ec8b49d437f3372390f1662c67bfd56b64b.zip |
Port ephy to use libsoup for cookies.
svn path=/trunk/; revision=8632
Diffstat (limited to 'src/pdm-dialog.c')
-rw-r--r-- | src/pdm-dialog.c | 203 |
1 files changed, 92 insertions, 111 deletions
diff --git a/src/pdm-dialog.c b/src/pdm-dialog.c index a1b41f3ac..28c491487 100644 --- a/src/pdm-dialog.c +++ b/src/pdm-dialog.c @@ -24,7 +24,6 @@ #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" @@ -39,8 +38,11 @@ #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; @@ -123,12 +125,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 } }; @@ -137,7 +139,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); @@ -186,6 +188,22 @@ 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) { @@ -193,6 +211,18 @@ 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) @@ -208,7 +238,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; @@ -218,17 +248,16 @@ 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))) { - EphyCookieManager *manager; + SoupCookieJar *jar; - manager = EPHY_COOKIE_MANAGER (ephy_embed_shell_get_embed_single - (EPHY_EMBED_SHELL (ephy_shell))); + jar = get_cookie_jar (); - ephy_cookie_manager_clear (manager); + clear_all_cookies (jar); } if (gtk_toggle_button_get_active - (GTK_TOGGLE_BUTTON (checkbuttons->checkbutton_passwords))) + (GTK_TOGGLE_BUTTON (checkbuttons->checkbutton_passwords))) { EphyPasswordManager *manager; @@ -262,7 +291,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; @@ -406,7 +435,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); @@ -588,7 +617,7 @@ setup_action (PdmActionInfo *action) static void show_cookies_properties (PdmDialog *dialog, - EphyCookie *info) + SoupCookie *info) { GtkWidget *gdialog; GtkWidget *table; @@ -659,7 +688,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->is_secure ? _("Encrypted connections only") : _("Any type of connection") ); + label = gtk_label_new (info->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); @@ -674,14 +703,16 @@ show_cookies_properties (PdmDialog *dialog, gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 0); - if (info->is_session) + if (info->expires == NULL) { + /* Session cookie */ str = g_strdup (_("End of current session")); } else { struct tm t; - str = eel_strdup_strftime ("%c", localtime_r (&info->expires, &t)); + time_t out = soup_date_to_time_t(info->expires); + str = eel_strdup_strftime ("%c", localtime_r (&out, &t)); } label = gtk_label_new (str); g_free (str); @@ -711,7 +742,7 @@ cookies_properties_clicked_cb (GtkWidget *button, GValue val = {0, }; GtkTreeIter iter; GtkTreePath *path; - EphyCookie *cookie; + SoupCookie *cookie; GList *l; GtkTreeSelection *selection; @@ -723,7 +754,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 = (EphyCookie *) g_value_get_boxed (&val); + cookie = (SoupCookie *) g_value_get_boxed (&val); show_cookies_properties (dialog, cookie); @@ -792,7 +823,7 @@ pdm_dialog_cookies_construct (PdmActionInfo *info) G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, - EPHY_TYPE_COOKIE); + SOUP_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); @@ -844,19 +875,8 @@ 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 EphyCookie *cookie, + const SoupCookie *cookie, GtkTreeIter *iter) { gboolean valid; @@ -866,15 +886,15 @@ cookie_to_iter (GtkTreeModel *model, while (valid) { - EphyCookie *data; + SoupCookie *data; gtk_tree_model_get (model, iter, COL_COOKIES_DATA, &data, -1); - found = compare_cookies (cookie, data); + found = soup_cookie_equal (cookie, data); - ephy_cookie_free (data); + soup_cookie_free (data); if (found) break; @@ -885,20 +905,9 @@ cookie_to_iter (GtkTreeModel *model, } static void -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, +cookie_changed_cb (SoupCookieJar *jar, + const SoupCookie *old_cookie, + const SoupCookie *new_cookie, PdmDialog *dialog) { PdmActionInfo *info = dialog->priv->cookies; @@ -906,48 +915,30 @@ cookie_changed_cb (EphyCookieManager *manager, LOG ("cookie_changed_cb"); - if (cookie_to_iter (info->model, cookie, &iter)) - { - 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"); + g_return_if_fail (info); - if (cookie_to_iter (info->model, cookie, &iter)) + if (old_cookie) { - gtk_list_store_remove (GTK_LIST_STORE (info->model), &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"); + } } - else + + if (new_cookie) { - g_warning ("Unable to find deleted cookie in list!\n"); + /* Cookie changed or added, let's add the new cookie in + any case */ + info->add (info, (gpointer) soup_cookie_copy (new_cookie)); } } -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, @@ -1039,15 +1030,13 @@ compare_cookie_host_keys (GtkTreeModel *model, static void pdm_dialog_fill_cookies_list (PdmActionInfo *info) { - EphyCookieManager *manager; - GList *list, *l; + SoupCookieJar *jar; + GSList *list, *l; g_assert (info->filled == FALSE); - manager = EPHY_COOKIE_MANAGER (ephy_embed_shell_get_embed_single - (EPHY_EMBED_SHELL (ephy_shell))); - - list = ephy_cookie_manager_list_cookies (manager); + jar = get_cookie_jar (); + list = soup_cookie_jar_all_cookies (jar); for (l = list; l != NULL; l = l->next) { @@ -1055,7 +1044,7 @@ pdm_dialog_fill_cookies_list (PdmActionInfo *info) } /* the element data has been consumed, so we need only to free the list */ - g_list_free (list); + g_slist_free (list); /* Now turn on sorting */ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (info->model), @@ -1068,15 +1057,8 @@ pdm_dialog_fill_cookies_list (PdmActionInfo *info) info->filled = TRUE; - /* 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); + g_signal_connect (jar, "changed", + G_CALLBACK (cookie_changed_cb), info->dialog); info->scroll_to (info); } @@ -1092,7 +1074,7 @@ static void pdm_dialog_cookie_add (PdmActionInfo *info, gpointer data) { - EphyCookie *cookie = (EphyCookie *) data; + SoupCookie *cookie = (SoupCookie *) data; GtkListStore *store; GtkTreeIter iter; int column[4] = { COL_COOKIES_HOST, COL_COOKIES_HOST_KEY, COL_COOKIES_NAME, COL_COOKIES_DATA }; @@ -1109,7 +1091,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], EPHY_TYPE_COOKIE); + g_value_init (&value[3], SOUP_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)); @@ -1130,13 +1112,12 @@ static void pdm_dialog_cookie_remove (PdmActionInfo *info, gpointer data) { - EphyCookie *cookie = (EphyCookie *) data; - EphyCookieManager *manager; + SoupCookie *cookie = (SoupCookie *) data; + SoupCookieJar *jar; - manager = EPHY_COOKIE_MANAGER (ephy_embed_shell_get_embed_single - (EPHY_EMBED_SHELL (ephy_shell))); + jar = get_cookie_jar(); - ephy_cookie_manager_remove_cookie (manager, cookie); + soup_cookie_jar_delete_cookie (jar, cookie); } static void |