summaryrefslogtreecommitdiff
path: root/Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-01-06 14:44:00 +0100
committerSimon Hausmann <simon.hausmann@nokia.com>2012-01-06 14:44:00 +0100
commit40736c5763bf61337c8c14e16d8587db021a87d4 (patch)
treeb17a9c00042ad89cb1308e2484491799aa14e9f8 /Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp
downloadqtwebkit-40736c5763bf61337c8c14e16d8587db021a87d4.tar.gz
Imported WebKit commit 2ea9d364d0f6efa8fa64acf19f451504c59be0e4 (http://svn.webkit.org/repository/webkit/trunk@104285)
Diffstat (limited to 'Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp')
-rw-r--r--Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp113
1 files changed, 113 insertions, 0 deletions
diff --git a/Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp b/Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp
new file mode 100644
index 000000000..2b4b7772e
--- /dev/null
+++ b/Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2009 Igalia S.L.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "webkitsoupauthdialog.h"
+
+#include "GtkAuthenticationDialog.h"
+#include "webkitmarshal.h"
+
+using namespace WebCore;
+
+/**
+ * SECTION:webkitsoupauthdialog
+ * @short_description: A #SoupSessionFeature to provide a simple
+ * authentication dialog for HTTP basic auth support.
+ *
+ * #WebKitSoupAuthDialog is a #SoupSessionFeature that you can attach to your
+ * #SoupSession to provide a simple authentication dialog while
+ * handling HTTP basic auth.
+ */
+
+static void webkit_soup_auth_dialog_session_feature_init(SoupSessionFeatureInterface*, gpointer);
+static void attach(SoupSessionFeature*, SoupSession*);
+static void detach(SoupSessionFeature*, SoupSession*);
+
+enum {
+ CURRENT_TOPLEVEL,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE_WITH_CODE(WebKitSoupAuthDialog, webkit_soup_auth_dialog, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE(SOUP_TYPE_SESSION_FEATURE,
+ webkit_soup_auth_dialog_session_feature_init))
+
+static void webkit_soup_auth_dialog_class_init(WebKitSoupAuthDialogClass* klass)
+{
+ GObjectClass* objectClass = G_OBJECT_CLASS(klass);
+
+ /**
+ * WebKitSoupAuthDialog::current-toplevel:
+ * @authDialog: the object on which the signal is emitted
+ * @message: the #SoupMessage being used in the authentication process
+ *
+ * This signal is emitted by the @authDialog when it needs to know
+ * the current toplevel widget in order to correctly set the
+ * transiency for the authentication dialog.
+ *
+ * Return value: (transfer none): the current toplevel #GtkWidget or %NULL if there's none
+ *
+ * Since: 1.1.1
+ */
+ signals[CURRENT_TOPLEVEL] =
+ g_signal_new("current-toplevel",
+ G_OBJECT_CLASS_TYPE(objectClass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(WebKitSoupAuthDialogClass, current_toplevel),
+ 0, 0,
+ webkit_marshal_OBJECT__OBJECT,
+ GTK_TYPE_WIDGET, 1,
+ SOUP_TYPE_MESSAGE);
+}
+
+static void webkit_soup_auth_dialog_init(WebKitSoupAuthDialog*)
+{
+}
+
+static void webkit_soup_auth_dialog_session_feature_init(SoupSessionFeatureInterface *featureInterface, gpointer)
+{
+ featureInterface->attach = attach;
+ featureInterface->detach = detach;
+}
+
+static void sessionAuthenticate(SoupSession* session, SoupMessage* message, SoupAuth* auth, gboolean, SoupSessionFeature* manager)
+{
+ GtkAuthenticationDialog* authDialog;
+ GtkWidget* toplevel = 0;
+
+ /* Get the current toplevel */
+ g_signal_emit(manager, signals[CURRENT_TOPLEVEL], 0, message, &toplevel);
+
+ authDialog = new GtkAuthenticationDialog(toplevel ? GTK_WINDOW(toplevel) : 0, session, message, auth);
+ authDialog->show();
+}
+
+static void attach(SoupSessionFeature* manager, SoupSession* session)
+{
+ g_signal_connect(session, "authenticate", G_CALLBACK(sessionAuthenticate), manager);
+}
+
+static void detach(SoupSessionFeature* manager, SoupSession* session)
+{
+ g_signal_handlers_disconnect_by_func(session, reinterpret_cast<gpointer>(sessionAuthenticate), manager);
+}
+
+