aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Persch <chpe@src.gnome.org>2008-08-15 03:41:56 +0800
committerChristian Persch <chpe@src.gnome.org>2008-08-15 03:41:56 +0800
commit93601ab889e0284f607b532921c59ea06f2785fa (patch)
treeb6b04a000a2a7bd5d1fe19100e4186ecf6f47f7c
parent3be63f81456440cad187fb7250e35c7158ebb6d9 (diff)
downloadgsoc2013-epiphany-93601ab889e0284f607b532921c59ea06f2785fa.tar
gsoc2013-epiphany-93601ab889e0284f607b532921c59ea06f2785fa.tar.gz
gsoc2013-epiphany-93601ab889e0284f607b532921c59ea06f2785fa.tar.bz2
gsoc2013-epiphany-93601ab889e0284f607b532921c59ea06f2785fa.tar.lz
gsoc2013-epiphany-93601ab889e0284f607b532921c59ea06f2785fa.tar.xz
gsoc2013-epiphany-93601ab889e0284f607b532921c59ea06f2785fa.tar.zst
gsoc2013-epiphany-93601ab889e0284f607b532921c59ea06f2785fa.zip
Allow remembering the selected user cert.
svn path=/branches/gnome-2-24/; revision=8417
-rw-r--r--configure.ac11
-rw-r--r--embed/mozilla/GtkNSSClientAuthDialogs.cpp25
2 files changed, 35 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index aa7ea6807..709d95a98 100644
--- a/configure.ac
+++ b/configure.ac
@@ -390,6 +390,17 @@ GECKO_CHECK_HEADERS([spellchecker],[mozISpellCheckingEngine.h],
GECKO_CHECK_HEADERS([],[nsIBadCertListener.h],[have_nsibadcertlistener=yes],[have_nsibadcertlistener=no])
+# Check for nsIClientAuthUserDecision in nsIClientAuthDialogs.h
+
+GECKO_COMPILE_IFELSE([],
+ [GECKO_XPCOM_PROGRAM([[#include <nsIClientAuthDialogs.h>]],
+ [[nsIClientAuthUserDecision *decision;]])],
+ [have_nsIClientAuthUserDecision=yes],[have_nsIClientAuthUserDecision=no])
+
+if test "$have_nsIClientAuthUserDecision" = "yes"; then
+ AC_DEFINE([HAVE_NSICLIENTAUTHUSERDECISION],[1],[Define if nsIClientAuthUserDecision exists])
+fi
+
# Check for some contractIDs that we need but are provided by extensions
# which may or may not have been built.
diff --git a/embed/mozilla/GtkNSSClientAuthDialogs.cpp b/embed/mozilla/GtkNSSClientAuthDialogs.cpp
index ee699a23d..9c3320ec1 100644
--- a/embed/mozilla/GtkNSSClientAuthDialogs.cpp
+++ b/embed/mozilla/GtkNSSClientAuthDialogs.cpp
@@ -267,13 +267,36 @@ GtkNSSClientAuthDialogs::ChooseCertificate (nsIInterfaceRequestor *ctx,
gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
+#ifdef HAVE_NSICLIENTAUTHUSERDECISION
+ GtkWidget *rememberButton;
+ nsCOMPtr<nsIClientAuthUserDecision> userDecision (do_QueryInterface (ctx));
+
+ if (userDecision)
+ {
+ PRBool remember = PR_FALSE;
+ userDecision->GetRememberClientAuthCertificate (&remember);
+
+ rememberButton = gtk_check_button_new_with_mnemonic ("_Remember this choice"); /* FIXME i18n */
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rememberButton), remember != PR_FALSE);
+ gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), rememberButton, FALSE, FALSE, 0);
+ gtk_widget_show (rememberButton);
+ }
+#endif /* HAVE_NSICLIENTAUTHUSERDECISION */
+
/* run the dialog */
int res = modalDialog.Run (GTK_DIALOG (dialog));
if (res == GTK_RESPONSE_OK)
{
*canceled = PR_FALSE;
*selectedIndex = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
- }
+
+#ifdef HAVE_NSICLIENTAUTHUSERDECISION
+ if (userDecision)
+ {
+ userDecision->SetRememberClientAuthCertificate (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (rememberButton)) != FALSE);
+ }
+#endif /* HAVE_NSICLIENTAUTHUSERDECISION */
+ }
else
{
*canceled = PR_TRUE;