aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog13
-rw-r--r--data/default-prefs-common.js1
-rw-r--r--embed/mozilla/GtkNSSSecurityWarningDialogs.cpp276
-rw-r--r--embed/mozilla/GtkNSSSecurityWarningDialogs.h81
-rw-r--r--embed/mozilla/Makefile.am4
-rw-r--r--embed/mozilla/MozRegisterComponents.cpp8
6 files changed, 382 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 8925d35b0..062f2abe3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2005-01-09 Christian Persch <chpe@cvs.gnome.org>
+
+ * data/default-prefs-common.js:
+ * embed/mozilla/GtkNSSSecurityWarningDialogs.cpp:
+ * embed/mozilla/GtkNSSSecurityWarningDialogs.h:
+ * embed/mozilla/Makefile.am:
+ * embed/mozilla/MozRegisterComponents.cpp:
+
+ Override the default security warning dialogues implementation with our own
+ class which follows HIG and our interface design. Fixes bug #163371.
+ Also show the entering-secure dialogue once, to inform about the
+ lock icon in the statusbar.
+
2005-01-08 Christian Persch <chpe@cvs.gnome.org>
* embed/Makefile.am:
diff --git a/data/default-prefs-common.js b/data/default-prefs-common.js
index 3586f757f..c43cff84e 100644
--- a/data/default-prefs-common.js
+++ b/data/default-prefs-common.js
@@ -36,6 +36,7 @@ pref("keyword.enabled", true);
// disable usless security warnings
pref("security.warn_entering_secure", false);
+pref("security.warn_entering_secure.show_once", true);
pref("security.warn_leaving_secure", false);
pref("security.warn_submit_insecure", false);
diff --git a/embed/mozilla/GtkNSSSecurityWarningDialogs.cpp b/embed/mozilla/GtkNSSSecurityWarningDialogs.cpp
new file mode 100644
index 000000000..631e1f04d
--- /dev/null
+++ b/embed/mozilla/GtkNSSSecurityWarningDialogs.cpp
@@ -0,0 +1,276 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2001
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Terry Hayes <thayes@netscape.com>
+ * Javier Delgadillo <javi@netscape.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK *****
+ *
+ * Copyright (C) 2005 Christian Persch
+ *
+ * $Id$
+ */
+
+#include "mozilla-config.h"
+
+#include "config.h"
+
+#include "GtkNSSSecurityWarningDialogs.h"
+#include "EphyUtils.h"
+
+#include <nsCOMPtr.h>
+#include <nsIPrefBranch.h>
+#include <nsIPrefService.h>
+#include <nsIServiceManager.h>
+#include <nsIInterfaceRequestor.h>
+#include <nsIInterfaceRequestorUtils.h>
+#include <nsIDOMWindow.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtkdialog.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtktogglebutton.h>
+#include <gtk/gtkcheckbutton.h>
+#include <gtk/gtkbox.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtklabel.h>
+
+/* FIXME why threadsafe? it's proxied by nsSecureBrowserImpl */
+/* NS_IMPL_THREADSAFE_ISUPPORTS1 (GtkNSSSecurityWarningDialogs, nsISecurityWarningDialogs) */
+NS_IMPL_ISUPPORTS1 (GtkNSSSecurityWarningDialogs, nsISecurityWarningDialogs)
+
+#define ENTER_SITE_PREF "security.warn_entering_secure"
+#define WEAK_SITE_PREF "security.warn_entering_weak"
+#define MIXEDCONTENT_PREF "security.warn_viewing_mixed"
+#define INSECURE_SUBMIT_PREF "security.warn_submit_insecure"
+
+GtkNSSSecurityWarningDialogs::GtkNSSSecurityWarningDialogs()
+{
+}
+
+GtkNSSSecurityWarningDialogs::~GtkNSSSecurityWarningDialogs()
+{
+}
+
+NS_IMETHODIMP
+GtkNSSSecurityWarningDialogs::ConfirmEnteringSecure (nsIInterfaceRequestor *aContext,
+ PRBool *_retval)
+{
+ DoDialog (aContext,
+ ENTER_SITE_PREF,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_OK,
+ _("Security Notice"),
+ _("This page is loaded over a secure connection."),
+ _("You can always see the security status of a page from "
+ "the icon on the left side of the statusbar."),
+ nsnull, _retval);
+
+ *_retval = PR_TRUE;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+GtkNSSSecurityWarningDialogs::ConfirmEnteringWeak (nsIInterfaceRequestor *aContext,
+ PRBool *_retval)
+{
+ DoDialog (aContext,
+ WEAK_SITE_PREF,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_OK,
+ _("Security Warning"),
+ _("This page is loaded over a low security connection."),
+ _("Any information you see or enter on this page could "
+ "easily be intercepted by a third party."),
+ nsnull, _retval);
+
+ *_retval = PR_TRUE;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+GtkNSSSecurityWarningDialogs::ConfirmLeavingSecure (nsIInterfaceRequestor *aContext,
+ PRBool *_retval)
+{
+ /* don't prompt */
+ *_retval = PR_TRUE;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+GtkNSSSecurityWarningDialogs::ConfirmMixedMode (nsIInterfaceRequestor *aContext,
+ PRBool *_retval)
+{
+ DoDialog (aContext,
+ MIXEDCONTENT_PREF,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_OK,
+ _("Security Warning"),
+ _("Some parts of this page are loaded over an unencrypted connection."),
+ _("Some information you see or enter will be sent over an unencrypted "
+ "connection, and could easily be intercepted by a third party."),
+ nsnull, _retval);
+
+ *_retval = PR_TRUE;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+GtkNSSSecurityWarningDialogs::ConfirmPostToInsecure (nsIInterfaceRequestor *aContext,
+ PRBool* _retval)
+{
+ DoDialog (aContext,
+ INSECURE_SUBMIT_PREF,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_OK,
+ _("Security Warning"),
+ _("Send this information over an unencrypted connection?"),
+ _("The information you have entered will be sent over an "
+ "unencrypted connection, and could easily be intercepted "
+ "by a third party."),
+ _("Send anyway"),
+ _retval);
+
+ *_retval = PR_TRUE;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+GtkNSSSecurityWarningDialogs::ConfirmPostToInsecureFromSecure (nsIInterfaceRequestor *aContext,
+ PRBool* _retval)
+{
+ DoDialog (aContext,
+ nsnull, /* No preference for this one - it's too important */
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_CANCEL,
+ _("Security Warning"),
+ _("Send this information over an unencrypted connection?"),
+ _("Although this page was loaded over an encrypted connection, "
+ "the information you have entered will be sent over an "
+ "unencrypted connection, and could easily be intercepted by "
+ "a third party."),
+ _("Send anyway"),
+ _retval);
+
+ return NS_OK;
+}
+
+void
+GtkNSSSecurityWarningDialogs::DoDialog (nsIInterfaceRequestor *aContext,
+ const char *aPrefName,
+ GtkMessageType aType,
+ GtkButtonsType aButtons,
+ const char *aTitle,
+ const char *aPrimary,
+ const char *aSecondary,
+ const char *aButtonText,
+ PRBool *_retval)
+{
+ *_retval = PR_FALSE;
+
+ nsresult rv;
+ PRBool show = PR_TRUE;
+ nsCOMPtr<nsIPrefBranch> prefBranch
+ (do_GetService (NS_PREFSERVICE_CONTRACTID));
+ if (prefBranch && aPrefName)
+ {
+ rv = prefBranch->GetBoolPref (aPrefName, &show);
+ if (NS_FAILED(rv)) show = PR_TRUE;
+ }
+
+ char *showOncePref = NULL;
+ PRBool showOnce = PR_FALSE;
+ if (prefBranch && aPrefName)
+ {
+ showOncePref = g_strconcat (aPrefName, ".show_once", NULL);
+ rv = prefBranch->GetBoolPref (showOncePref, &showOnce);
+ if (NS_FAILED (rv)) showOnce = PR_TRUE;
+ }
+
+ if (!show && !showOnce)
+ {
+ g_free (showOncePref);
+ *_retval = PR_TRUE;
+ return;
+ }
+
+ /* Didn't you know it, mozilla SUCKS!
+ * the "aContext" interface requestor is made from a nsIDOMWindow,
+ * but can only give out a nsIPrompt, from where there's no way to get
+ * the nsIDOMWindow back! Therefore we cannot display this dialogue with
+ * a parent, and HAVE TO make it modal.
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=277587
+ */
+ /* domWin will be always nsnull, until the mozilla bug is fixed */
+ nsCOMPtr<nsIDOMWindow> domWin (do_GetInterface (aContext));
+ GtkWidget *parent = EphyUtils::FindGtkParent (domWin);
+
+ GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
+ GTK_DIALOG_MODAL, aType,
+ aButtons, aPrimary);
+
+ if (aSecondary)
+ {
+ gtk_message_dialog_format_secondary_markup
+ (GTK_MESSAGE_DIALOG (dialog), aSecondary);
+ }
+
+ if (aButtonText)
+ {
+ gtk_dialog_add_button (GTK_DIALOG (dialog), aButtonText,
+ GTK_RESPONSE_ACCEPT);
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog),
+ GTK_RESPONSE_CANCEL);
+ }
+ else
+ {
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog),
+ GTK_RESPONSE_OK);
+ }
+
+ gtk_window_set_title (GTK_WINDOW (dialog), aTitle);
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), "web-browser");
+
+ int response = gtk_dialog_run (GTK_DIALOG (dialog));
+
+ *_retval = response == GTK_RESPONSE_ACCEPT;
+
+ if (prefBranch && showOncePref && showOnce)
+ {
+ prefBranch->SetBoolPref (showOncePref, PR_FALSE);
+ }
+
+ gtk_widget_destroy (dialog);
+ g_free (showOncePref);
+}
diff --git a/embed/mozilla/GtkNSSSecurityWarningDialogs.h b/embed/mozilla/GtkNSSSecurityWarningDialogs.h
new file mode 100644
index 000000000..3b8197253
--- /dev/null
+++ b/embed/mozilla/GtkNSSSecurityWarningDialogs.h
@@ -0,0 +1,81 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2001
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Terry Hayes <thayes@netscape.com>
+ * Javier Delgadillo <javi@netscape.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK *****
+ *
+ * Copyright (C) 2005 Christian Persch
+ *
+ * $Id$
+ */
+
+#ifndef GTK_NSSSECURITYDIALOGS_H
+#define GTK_NSSSECURITYDIALOGS_H
+
+#include <nsISecurityWarningDialogs.h>
+#include <gtk/gtkmessagedialog.h>
+
+#define GTK_NSSSECURITYWARNINGDIALOGS_CLASSNAME "Epiphany Security Warning Dialogs Class"
+#define GTK_NSSSECURITYWARNINGDIALOGS_CID \
+{ \
+ /* 1f5eac0a-d7e3-4f8e-b4d5-7240f7cba269 */ \
+ 0x1f5eac0a, \
+ 0xd7e3, \
+ 0x4f8e, \
+ { 0xb4, 0xd5, 0x72, 0x40, 0xf7, 0xcb, 0xa2, 0x69 } \
+}
+
+class GtkNSSSecurityWarningDialogs : public nsISecurityWarningDialogs
+{
+public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSISECURITYWARNINGDIALOGS
+
+ GtkNSSSecurityWarningDialogs();
+ virtual ~GtkNSSSecurityWarningDialogs();
+
+protected:
+ void DoDialog (nsIInterfaceRequestor *aContext,
+ const char *aPrefName,
+ GtkMessageType aType,
+ GtkButtonsType aButtons,
+ const char *aTitle,
+ const char *aPrimary,
+ const char *aSecondary,
+ const char *aButtonText,
+ PRBool *_retval);
+};
+
+#endif /* !GTK_NSSSECURITYDIALOGS_H */
diff --git a/embed/mozilla/Makefile.am b/embed/mozilla/Makefile.am
index 9ad41b50f..1a8e483c2 100644
--- a/embed/mozilla/Makefile.am
+++ b/embed/mozilla/Makefile.am
@@ -55,7 +55,9 @@ libephymozillaembed_la_SOURCES += \
GtkNSSDialogs.cpp \
GtkNSSDialogs.h \
GtkNSSKeyPairDialogs.cpp \
- GtkNSSKeyPairDialogs.h
+ GtkNSSKeyPairDialogs.h \
+ GtkNSSSecurityWarningDialogs.cpp\
+ GtkNSSSecurityWarningDialogs.h
endif
mozilla_include_subdirs = \
diff --git a/embed/mozilla/MozRegisterComponents.cpp b/embed/mozilla/MozRegisterComponents.cpp
index 7d8b3223d..8dd86b6ee 100644
--- a/embed/mozilla/MozRegisterComponents.cpp
+++ b/embed/mozilla/MozRegisterComponents.cpp
@@ -38,6 +38,7 @@
#include "GtkNSSClientAuthDialogs.h"
#include "GtkNSSDialogs.h"
#include "GtkNSSKeyPairDialogs.h"
+#include "GtkNSSSecurityWarningDialogs.h"
#endif
#include <nsMemory.h>
@@ -66,6 +67,7 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(GFilePicker)
NS_GENERIC_FACTORY_CONSTRUCTOR(GtkNSSClientAuthDialogs)
NS_GENERIC_FACTORY_CONSTRUCTOR(GtkNSSDialogs)
NS_GENERIC_FACTORY_CONSTRUCTOR(GtkNSSKeyPairDialogs)
+NS_GENERIC_FACTORY_CONSTRUCTOR(GtkNSSSecurityWarningDialogs)
#endif
static NS_METHOD
@@ -142,6 +144,12 @@ static const nsModuleComponentInfo sAppComps[] = {
NS_GENERATINGKEYPAIRINFODIALOGS_CONTRACTID,
GtkNSSKeyPairDialogsConstructor
},
+ {
+ GTK_NSSSECURITYWARNINGDIALOGS_CLASSNAME,
+ GTK_NSSSECURITYWARNINGDIALOGS_CID,
+ NS_SECURITYWARNINGDIALOGS_CONTRACTID,
+ GtkNSSSecurityWarningDialogsConstructor
+ },
#endif
{
NS_IHELPERAPPLAUNCHERDLG_CLASSNAME,