From 5eb5a753c49527da398aa3ce200ce0744fccd49b Mon Sep 17 00:00:00 2001 From: "xan@webkit.org" Date: Wed, 12 Aug 2009 18:37:14 +0000 Subject: [PATCH] 2009-08-12 Xan Lopez Reviewed by Jan Alonzo. [GTK] Remove keyring optional features https://bugs.webkit.org/show_bug.cgi?id=28173 Remove keyring support, we now do authentication storage through libsoup. We depend on libsoup master now, will bump the dependency when there's a new release. * GNUmakefile.am: * configure.ac: WebKit/gtk: 2009-08-12 Xan Lopez Reviewed by Jan Alonzo. [GTK] Remove keyring optional features https://bugs.webkit.org/show_bug.cgi?id=28173 Remove keyring support from our code and rely on libsoup to store the authentication data if the user requests that support in their application/library. * webkit/webkitsoupauthdialog.c: (response_callback): (show_auth_dialog): (session_authenticate): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@47129 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- ChangeLog | 14 +++ GNUmakefile.am | 7 -- WebKit/gtk/ChangeLog | 16 +++ WebKit/gtk/webkit/webkitsoupauthdialog.c | 163 +++++++++++-------------------- configure.ac | 20 ---- 5 files changed, 88 insertions(+), 132 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0e49cf5..a4a0d76 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2009-08-12 Xan Lopez + + Reviewed by Jan Alonzo. + + [GTK] Remove keyring optional features + https://bugs.webkit.org/show_bug.cgi?id=28173 + + Remove keyring support, we now do authentication storage through + libsoup. We depend on libsoup master now, will bump the dependency + when there's a new release. + + * GNUmakefile.am: + * configure.ac: + 2009-08-11 Drew Wilson Reviewed by NOBODY (Build break). diff --git a/GNUmakefile.am b/GNUmakefile.am index efac319..b63205f 100644 --- a/GNUmakefile.am +++ b/GNUmakefile.am @@ -87,7 +87,6 @@ corekit_cflags += \ $(GAIL_CFLAGS) \ $(GEOCLUE_CFLAGS) \ $(GLIB_CFLAGS) \ - $(GNOMEKEYRING_CFLAGS) \ $(GSTREAMER_CFLAGS) \ $(GTK_CFLAGS) \ $(HILDON_CFLAGS) \ @@ -247,7 +246,6 @@ libwebkit_1_0_la_LIBADD = \ $(GAIL_LIBS) \ $(GEOCLUE_LIBS) \ $(GLIB_LIBS) \ - $(GNOMEKEYRING_LIBS) \ $(GSTREAMER_LIBS) \ $(GTK_LIBS) \ $(HILDON_LIBS) \ @@ -380,11 +378,6 @@ webkitgtk_cppflags += \ -I$(srcdir)/WebKit/gtk/webkit \ -I$(top_builddir)/WebKit/gtk/webkit -if USE_GNOMEKEYRING -webkitgtk_cppflags += \ - -DWTF_USE_GNOMEKEYRING=1 -endif - webkitgtk_cleanfiles += \ $(top_builddir)/WebKit/gtk/docs/version.xml \ $(top_builddir)/WebKit/gtk/docs/GNUmakefile \ diff --git a/WebKit/gtk/ChangeLog b/WebKit/gtk/ChangeLog index 0a61be9..9fa384f0 100644 --- a/WebKit/gtk/ChangeLog +++ b/WebKit/gtk/ChangeLog @@ -1,3 +1,19 @@ +2009-08-12 Xan Lopez + + Reviewed by Jan Alonzo. + + [GTK] Remove keyring optional features + https://bugs.webkit.org/show_bug.cgi?id=28173 + + Remove keyring support from our code and rely on libsoup to store + the authentication data if the user requests that support in their + application/library. + + * webkit/webkitsoupauthdialog.c: + (response_callback): + (show_auth_dialog): + (session_authenticate): + 2009-08-11 Benjamin Otte Reviewed by Xan Lopez. diff --git a/WebKit/gtk/webkit/webkitsoupauthdialog.c b/WebKit/gtk/webkit/webkitsoupauthdialog.c index 9bc188e..9d8c7d7 100644 --- a/WebKit/gtk/webkit/webkitsoupauthdialog.c +++ b/WebKit/gtk/webkit/webkitsoupauthdialog.c @@ -22,22 +22,19 @@ #include #include #include -#if USE(GNOMEKEYRING) -#include -#endif #include "webkitmarshal.h" #include "webkitsoupauthdialog.h" /** * SECTION:webkitsoupauthdialog - * @short_description: A #SoupFeature to provide a simple + * @short_description: A #SoupSessionFeature to provide a simple * authentication dialog for HTTP basic auth support. * - * #WebKitSoupAuthDialog is a #SoupFeature that you can attach to your - * #SoupSession to provide a simple authentication dialog, with - * optional GNOME Keyring support, while handling HTTP basic auth. It - * is built as a simple C-only module to ease reuse. + * #WebKitSoupAuthDialog is a #SoupSessionFeature that you can attach to your + * #SoupSession to provide a simple authentication dialog while + * handling HTTP basic auth. It is built as a simple C-only module + * to ease reuse. */ static void webkit_soup_auth_dialog_session_feature_init(SoupSessionFeatureInterface* feature_interface, gpointer interface_data); @@ -88,9 +85,7 @@ typedef struct _WebKitAuthData { SoupSessionFeature* manager; GtkWidget* loginEntry; GtkWidget* passwordEntry; -#if USE(GNOMEKEYRING) GtkWidget* checkButton; -#endif char *username; char *password; } WebKitAuthData; @@ -103,63 +98,44 @@ static void free_authData(WebKitAuthData* authData) g_slice_free(WebKitAuthData, authData); } -#if USE(GNOMEKEYRING) -static void set_password_callback(GnomeKeyringResult result, guint32 val, gpointer user_data) -{ - /* Dummy callback, gnome_keyring_set_network_password does not accept a NULL one */ -} - static void save_password_callback(SoupMessage* msg, WebKitAuthData* authData) { - /* Check only for Success status codes (2xx) */ - if (msg->status_code >= 200 && msg->status_code < 300) { - SoupURI* uri = soup_message_get_uri(authData->msg); - gnome_keyring_set_network_password(NULL, - authData->username, - soup_auth_get_realm(authData->auth), - uri->host, - NULL, - uri->scheme, - soup_auth_get_scheme_name(authData->auth), - uri->port, - authData->password, - (GnomeKeyringOperationGetIntCallback)set_password_callback, - NULL, - NULL); - } + /* Anything but 401 and 5xx means the password was accepted */ + if (msg->status_code != 401 && msg->status_code < 500) + soup_auth_save_password(authData->auth, authData->username, authData->password); + free_authData(authData); } -#endif static void response_callback(GtkDialog* dialog, gint response_id, WebKitAuthData* authData) { - switch(response_id) { - case GTK_RESPONSE_OK: + gboolean freeAuthData = TRUE; + + if (response_id == GTK_RESPONSE_OK) { authData->username = g_strdup(gtk_entry_get_text(GTK_ENTRY(authData->loginEntry))); authData->password = g_strdup(gtk_entry_get_text(GTK_ENTRY(authData->passwordEntry))); + soup_auth_authenticate(authData->auth, authData->username, authData->password); -#if USE(GNOMEKEYRING) - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(authData->checkButton))) + if (authData->checkButton && + gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(authData->checkButton))) { g_signal_connect(authData->msg, "got-headers", G_CALLBACK(save_password_callback), authData); -#endif - default: - break; + freeAuthData = FALSE; + } } soup_session_unpause_message(authData->session, authData->msg); -#if !USE(GNOMEKEYRING) - free_authData(authData); -#endif + if (freeAuthData) + free_authData(authData); gtk_widget_destroy(GTK_WIDGET(dialog)); } static GtkWidget * -table_add_entry (GtkWidget* table, - int row, - const char* label_text, - const char* value, - gpointer user_data) +table_add_entry(GtkWidget* table, + int row, + const char* label_text, + const char* value, + gpointer user_data) { GtkWidget* entry; GtkWidget* label; @@ -182,6 +158,11 @@ table_add_entry (GtkWidget* table, return entry; } +static gboolean session_can_save_passwords(SoupSession* session) +{ + return soup_session_get_feature(session, SOUP_TYPE_PASSWORD_MANAGER) != NULL; +} + static void show_auth_dialog(WebKitAuthData* authData, const char* login, const char* password) { GtkWidget* toplevel; @@ -197,10 +178,8 @@ static void show_auth_dialog(WebKitAuthData* authData, const char* login, const GtkWidget* messageLabel; char* message; SoupURI* uri; -#if USE(GNOMEKEYRING) GtkWidget* rememberBox; GtkWidget* checkButton; -#endif /* From GTK+ gtkmountoperation.c, modified and simplified. LGPL 2 license */ @@ -215,9 +194,9 @@ static void show_auth_dialog(WebKitAuthData* authData, const char* login, const /* Set the dialog up with HIG properties */ gtk_dialog_set_has_separator(dialog, FALSE); - gtk_container_set_border_width(GTK_CONTAINER (dialog), 5); + gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); gtk_box_set_spacing(GTK_BOX(dialog->vbox), 2); /* 2 * 5 + 2 = 12 */ - gtk_container_set_border_width(GTK_CONTAINER (dialog->action_area), 5); + gtk_container_set_border_width(GTK_CONTAINER(dialog->action_area), 5); gtk_box_set_spacing(GTK_BOX(dialog->action_area), 6); gtk_window_set_resizable(window, FALSE); @@ -256,7 +235,7 @@ static void show_auth_dialog(WebKitAuthData* authData, const char* login, const FALSE, FALSE, 0); vbox = gtk_vbox_new(FALSE, 6); - gtk_box_pack_start(GTK_BOX (mainVBox), vbox, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(mainVBox), vbox, FALSE, FALSE, 0); /* The table that holds the entries */ entryContainer = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); @@ -268,8 +247,8 @@ static void show_auth_dialog(WebKitAuthData* authData, const char* login, const FALSE, FALSE, 0); table = gtk_table_new(2, 2, FALSE); - gtk_table_set_col_spacings(GTK_TABLE (table), 12); - gtk_table_set_row_spacings(GTK_TABLE (table), 6); + gtk_table_set_col_spacings(GTK_TABLE(table), 12); + gtk_table_set_row_spacings(GTK_TABLE(table), 6); gtk_container_add(GTK_CONTAINER(entryContainer), table); authData->loginEntry = table_add_entry(table, 0, _("Username:"), @@ -279,77 +258,51 @@ static void show_auth_dialog(WebKitAuthData* authData, const char* login, const gtk_entry_set_visibility(GTK_ENTRY(authData->passwordEntry), FALSE); -#if USE(GNOMEKEYRING) - rememberBox = gtk_vbox_new (FALSE, 6); - gtk_box_pack_start (GTK_BOX (vbox), rememberBox, - FALSE, FALSE, 0); - - checkButton = gtk_check_button_new_with_mnemonic(_("_Remember password")); - if (login && password) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkButton), TRUE); - gtk_label_set_line_wrap(GTK_LABEL(gtk_bin_get_child(GTK_BIN(checkButton))), TRUE); - gtk_box_pack_start (GTK_BOX (rememberBox), checkButton, FALSE, FALSE, 0); - authData->checkButton = checkButton; -#endif + if (session_can_save_passwords(authData->session)) { + rememberBox = gtk_vbox_new(FALSE, 6); + gtk_box_pack_start(GTK_BOX(vbox), rememberBox, + FALSE, FALSE, 0); + checkButton = gtk_check_button_new_with_mnemonic(_("_Remember password")); + if (login && password) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkButton), TRUE); + gtk_label_set_line_wrap(GTK_LABEL(gtk_bin_get_child(GTK_BIN(checkButton))), TRUE); + gtk_box_pack_start(GTK_BOX(rememberBox), checkButton, FALSE, FALSE, 0); + authData->checkButton = checkButton; + } g_signal_connect(dialog, "response", G_CALLBACK(response_callback), authData); gtk_widget_show_all(widget); } -#if USE(GNOMEKEYRING) -static void find_password_callback(GnomeKeyringResult result, GList* list, WebKitAuthData* authData) -{ - GList* p; - const char* login = NULL; - const char* password = NULL; - - for (p = list; p; p = p->next) { - /* FIXME: support multiple logins/passwords ? */ - GnomeKeyringNetworkPasswordData* data = (GnomeKeyringNetworkPasswordData*)p->data; - login = data->user; - password = data->password; - break; - } - - show_auth_dialog(authData, login, password); -} -#endif - static void session_authenticate(SoupSession* session, SoupMessage* msg, SoupAuth* auth, gboolean retrying, gpointer user_data) { SoupURI* uri; WebKitAuthData* authData; SoupSessionFeature* manager = (SoupSessionFeature*)user_data; + GSList* users; + const char *login, *password; soup_session_pause_message(session, msg); /* We need to make sure the message sticks around when pausing it */ g_object_ref(msg); uri = soup_message_get_uri(msg); - authData = g_slice_new(WebKitAuthData); + authData = g_slice_new0(WebKitAuthData); authData->msg = msg; authData->auth = auth; authData->session = session; authData->manager = manager; - /* - * If we have gnome-keyring let's try to find the password first in the ring. - * Otherwise just show the dialog straight away - */ -#if USE(GNOMEKEYRING) - gnome_keyring_find_network_password(NULL, - soup_auth_get_realm(auth), - uri->host, - NULL, - uri->scheme, - soup_auth_get_scheme_name(auth), - uri->port, - (GnomeKeyringOperationGetListCallback)find_password_callback, - authData, - NULL); -#else - show_auth_dialog(authData, NULL, NULL); -#endif + login = password = NULL; + + users = soup_auth_get_saved_users(auth); + if (users) { + login = users->data; + password = soup_auth_get_saved_password(auth, login); + soup_auth_free_saved_users(auth, users); + } + + show_auth_dialog(authData, login, password); } static void attach(SoupSessionFeature* manager, SoupSession* session) diff --git a/configure.ac b/configure.ac index 1c3effc..aa853d5 100644 --- a/configure.ac +++ b/configure.ac @@ -204,7 +204,6 @@ GTK_REQUIRED_VERSION=2.10 LIBXSLT_REQUIRED_VERSION=1.1.7 SQLITE_REQUIRED_VERSION=3.0 GSTREAMER_REQUIRED_VERSION=0.10 -GNOME_KEYRING_REQUIRED_VERSION=2.26.0 ENCHANT_REQUIRED_VERSION=0.22 GAIL_REQUIRED_VERSION=1.8 @@ -396,14 +395,6 @@ AC_ARG_ENABLE(geolocation, [],[enable_geolocation="no"]) AC_MSG_RESULT([$enable_geolocation]) -# check whether to enable gnomekeyring support -AC_MSG_CHECKING([whether to enable gnomekeyring support]) -AC_ARG_ENABLE(gnomekeyring, - AC_HELP_STRING([--enable-gnomekeyring], - [enable support for gnomekeyring [default=no]]), - [],[enable_gnomekeyring="no"]) -AC_MSG_RESULT([$enable_gnomekeyring]) - # check whether to enable SVG support AC_MSG_CHECKING([whether to enable SVG support]) AC_ARG_ENABLE(svg, @@ -596,13 +587,6 @@ PKG_CHECK_MODULES([LIBSOUP], AC_SUBST([LIBSOUP_CFLAGS]) AC_SUBST([LIBSOUP_LIBS]) -if test "$enable_gnomekeyring" = "yes"; then - PKG_CHECK_MODULES([GNOMEKEYRING], - [gnome-keyring-1 >= $GNOME_KEYRING_REQUIRED_VERSION]) - AC_SUBST([GNOMEKEYRING_CFLAGS]) - AC_SUBST([GNOMEKEYRING_LIBS]) -fi - # check if FreeType/FontConfig are available if test "$with_font_backend" = "freetype"; then if test "$with_target" = "directfb"; then @@ -686,9 +670,6 @@ AM_CONDITIONAL([TARGET_DIRECTFB], [test "$with_target" = "directfb"]) AM_CONDITIONAL([USE_ICU_UNICODE], [test "$with_unicode_backend" = "icu"]) AM_CONDITIONAL([USE_GLIB_UNICODE], [test "$with_unicode_backend" = "glib"]) -# Auth backend conditionals -AM_CONDITIONAL([USE_GNOMEKEYRING], [test "$enable_gnomekeyring" = "yes"]) - # Font backend conditionals AM_CONDITIONAL([USE_FREETYPE], [test "$with_font_backend" = "freetype"]) AM_CONDITIONAL([USE_PANGO], [test "$with_font_backend" = "pango"]) @@ -752,7 +733,6 @@ Features: Dashboard support : $enable_dashboard_support Filters support : $enable_filters Geolocation support : $enable_geolocation - GNOME Keyring support : $enable_gnomekeyring JavaScript debugger/profiler support : $enable_javascript_debugger HTML5 offline web applications support : $enable_offline_web_applications HTML5 channel messaging support : $enable_channel_messaging -- 1.8.3.1