diff options
Diffstat (limited to 'embed')
-rw-r--r-- | embed/mozilla/GtkNSSSecurityWarningDialogs.cpp | 276 | ||||
-rw-r--r-- | embed/mozilla/GtkNSSSecurityWarningDialogs.h | 81 | ||||
-rw-r--r-- | embed/mozilla/Makefile.am | 4 | ||||
-rw-r--r-- | embed/mozilla/MozRegisterComponents.cpp | 8 |
4 files changed, 368 insertions, 1 deletions
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, |