Commit aa5bf36f authored by xan@webkit.org's avatar xan@webkit.org

2009-08-12 Xan Lopez <xlopez@igalia.com>

        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  <xlopez@igalia.com>

        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: http://svn.webkit.org/repository/webkit/trunk@47129 268f45cc-cd09-0410-ab3c-d52691b4dbfc
parent 1a6c9142
2009-08-12 Xan Lopez <xlopez@igalia.com>
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 <atwilson@google.com>
Reviewed by NOBODY (Build break).
......
......@@ -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 \
......
2009-08-12 Xan Lopez <xlopez@igalia.com>
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 <otte@gnome.org>
Reviewed by Xan Lopez.
......
......@@ -22,22 +22,19 @@
#include <glib/gi18n-lib.h>
#include <gtk/gtk.h>
#include <libsoup/soup.h>
#if USE(GNOMEKEYRING)
#include <gnome-keyring.h>
#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)
......
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment