[Kazehakase-devel 2394] Certificate Dialog (Re: Please allow the redistribution of binary linking with OpenSSL)

Zurück zum Archiv-Index

Hidetaka Iwai tyuyu****@sings*****
2005年 9月 27日 (火) 01:55:25 JST


岩井@札幌 です。

Hidetaka Iwai <tyuyu****@sings*****> wrote:
Message-ID: <20050****@sings*****>

> > 以前に鵜飼さんの日記にも書いてあったんですが,証明書の
> > 内容を見るような機能も将来的には備わった方がいいのかも
> > しれませんね.
> 
> ええ、必要だと思います。それも早急に。
> 
> Mozilla で通信したものと、KzHTTP で通信したものを透過的に扱えるような
> のが望ましいんですが、取り敢えず Mozilla に関するものだけでもダイアロ
> グを出せた方が良いと思います。

というわけで、とりあえず Mozilla の分だけ書きました。

# ほとんど galeon のパクリですが ;p

regards,
--
 Hidetaka Iwai
 tyuyu****@sings*****

-------------- next part --------------
Index: configure.in
===================================================================
RCS file: /cvsroot/kazehakase/kazehakase/configure.in,v
retrieving revision 1.131
diff -u -r1.131 configure.in
--- configure.in	23 Sep 2005 11:47:04 -0000	1.131
+++ configure.in	26 Sep 2005 16:53:38 -0000
@@ -263,11 +263,6 @@
 	[AC_CHECK_FILE([$MOZILLA_INCLUDE_ROOT/layout/nsIPresContext.h],
 		[AC_DEFINE([HAVE_NSIPRESCONTEXT_H],[1],[Define if nsIPresContext.h exists])])])
 
-dnl restore flags
-CPPFLAGS=$_SAVE_CPPFLAGS
-CXXFLAGS=$_SAVE_CXXFLAGS
-
-AC_LANG_POP([C++])
 dnl Not a simple file check due to the header being in the SDK since 1.8a6
 dnl https://bugzilla.mozilla.org/show_bug.cgi?id=271068
 
@@ -284,6 +279,30 @@
 		[Define if mozilla nsIPassword header is available])])
 fi
 
+dnl Check for nsIDocShell::GetSecurityUI
+dnl This code is picked from galeon-1.3.21.
+dnl nsIDocShell::GetSecurityUI was added in 1.8b2 as part of the fastback
+dnl patch
+dnl https://bugzilla.mozilla.org/show_bug.cgi?id=274784
+
+AC_MSG_CHECKING([whether nsIDocShell::GetSecureUI exists])
+AC_COMPILE_IFELSE(
+	[AC_LANG_PROGRAM(
+		[[#include <nsIDocShell.h>]],
+		[[ nsIDocShell *p;
+		   p->GetSecurityUI( nsnull ); ]]
+	)],
+	[AC_DEFINE([HAVE_NSIDOCSHELL_GETSECUREUI], [1],
+		   [Define if nsIDocShell::GetSecureUI exists]) result=yes],
+	[result=no])
+AC_MSG_RESULT([$result])
+
+dnl restore flags
+CPPFLAGS=$_SAVE_CPPFLAGS
+CXXFLAGS=$_SAVE_CXXFLAGS
+
+AC_LANG_POP([C++])
+
 dnl **************************************************************
 dnl Check for Gtk+2.
 dnl **************************************************************
Index: etc/kz-ui-expert.xml
===================================================================
RCS file: /cvsroot/kazehakase/kazehakase/etc/kz-ui-expert.xml,v
retrieving revision 1.73
diff -u -r1.73 kz-ui-expert.xml
--- etc/kz-ui-expert.xml	26 Sep 2005 10:03:31 -0000	1.73
+++ etc/kz-ui-expert.xml	26 Sep 2005 16:53:38 -0000
@@ -51,6 +51,7 @@
       <menuitem name="ZoomOut" action="ZoomOut" />
       <separator name="view-sep3" />
       <menuitem name="ViewPageSource" action="ViewPageSource" />
+      <menuitem name="ShowPageCertificate" action="ShowPageCertificate" />
       <menuitem name="ShowHideSidebar" action="ShowHideSidebar" />
       <menu name="SidebarPosMenu" action="StockSidebarPosMenu">
         <menuitem name="SidebarPosLeft" action="SidebarPosLeft" />
Index: src/kz-embed.c
===================================================================
RCS file: /cvsroot/kazehakase/kazehakase/src/kz-embed.c,v
retrieving revision 1.18
diff -u -r1.18 kz-embed.c
--- src/kz-embed.c	13 Aug 2005 09:33:13 -0000	1.18
+++ src/kz-embed.c	26 Sep 2005 16:53:39 -0000
@@ -1058,6 +1058,14 @@
 	return KZ_EMBED_GET_IFACE(kzembed)->get_allow_images(kzembed);
 }
 
+void
+kz_embed_show_page_certificate (KzEmbed *kzembed)
+{
+	g_return_if_fail(KZ_IS_EMBED(kzembed));
+	g_return_if_fail(KZ_EMBED_GET_IFACE(kzembed)->show_page_certificate);
+
+	return KZ_EMBED_GET_IFACE(kzembed)->show_page_certificate(kzembed);
+}
 
 static gchar *
 kz_embed_get_up_location(KzEmbed *kzembed)
Index: src/kz-embed.h
===================================================================
RCS file: /cvsroot/kazehakase/kazehakase/src/kz-embed.h,v
retrieving revision 1.23
diff -u -r1.23 kz-embed.h
--- src/kz-embed.h	13 Aug 2005 09:33:13 -0000	1.23
+++ src/kz-embed.h	26 Sep 2005 16:53:40 -0000
@@ -109,7 +109,7 @@
 
 	gboolean	(*selection_is_collapsed)
 						(KzEmbed       *kzembed);
-	
+
 	gboolean	(*get_links)		(KzEmbed       *kzembed,
 						 GList	      **list,
 						 gboolean	selected_only);
@@ -236,7 +236,8 @@
 	    					 gboolean	allow);
 	gboolean	(*get_allow_images)	(KzEmbed       *kzembed);
 	void		(*set_allow_images)	(KzEmbed       *kzembed,
-	    					 gboolean	allow);
+						 gboolean	allow);
+        void            (*show_page_certificate)(KzEmbed       *kzembed);
 
 	/* signals */
 	void     (*link_message)        (KzEmbed      *embed);
@@ -448,6 +449,8 @@
 void		kz_embed_set_allow_images	(KzEmbed       *kzembed,
     						 gboolean	allow);
 
+void            kz_embed_show_page_certificate  (KzEmbed       *kzembed);
+
 G_END_DECLS
 
 #endif /* __KZ_EMBED_H__ */
Index: src/actions/kz-actions.c
===================================================================
RCS file: /cvsroot/kazehakase/kazehakase/src/actions/kz-actions.c,v
retrieving revision 1.210
diff -u -r1.210 kz-actions.c
--- src/actions/kz-actions.c	23 Sep 2005 12:16:08 -0000	1.210
+++ src/actions/kz-actions.c	26 Sep 2005 16:53:41 -0000
@@ -574,6 +574,18 @@
 	}
 }
 
+static void 
+act_show_page_certificate (GtkAction *action, KzWindow *kz)
+{
+	GtkWidget *widget = KZ_WINDOW_CURRENT_PAGE(kz);
+	g_return_if_fail(KZ_IS_WINDOW(kz));
+
+	if (KZ_IS_EMBED(widget))
+	{
+		kz_embed_show_page_certificate(KZ_EMBED(widget));
+	}
+}
+
 #if 0
 static void 
 act_set_edit_mode (GtkAction *action, KzWindow *kz)
@@ -1988,6 +2000,7 @@
   {"ZoomOut",   GTK_STOCK_ZOOM_OUT, N_("Zoom out"),    NULL, N_("Zoom out this page"),  G_CALLBACK(act_zoom_out)},
 
   {"ViewPageSource", KZ_STOCK_VIEW_SOURCE, N_("View page source"), NULL, N_("View the source code of the page"), G_CALLBACK(act_view_source)},
+  {"ShowPageCertificate", NULL, N_("Show page certificate"), NULL, N_("Show the certificate of the page"), G_CALLBACK(act_show_page_certificate)},
   {"AutoScrollMode", NULL,          N_("Autoscroll mode"), NULL, N_("set auto-scroll mode"), G_CALLBACK(act_auto_scroll_mode)},
   {"ThumbnailTabList", NULL,          N_("ThumbnailTabList"), NULL, N_("Display the tab list with thumbnail"), G_CALLBACK(act_thumbnail_tablist)},
 /*
Index: src/mozilla/Makefile.am
===================================================================
RCS file: /cvsroot/kazehakase/kazehakase/src/mozilla/Makefile.am,v
retrieving revision 1.45
diff -u -r1.45 Makefile.am
--- src/mozilla/Makefile.am	22 Jul 2005 09:25:59 -0000	1.45
+++ src/mozilla/Makefile.am	26 Sep 2005 16:53:41 -0000
@@ -32,6 +32,7 @@
 	-I$(MOZILLA_INCLUDE_ROOT)/nkcache \
 	-I$(MOZILLA_INCLUDE_ROOT)/oji \
 	-I$(MOZILLA_INCLUDE_ROOT)/pipnss\
+	-I$(MOZILLA_INCLUDE_ROOT)/pipboot\
 	-I$(MOZILLA_INCLUDE_ROOT)/pref \
 	-I$(MOZILLA_INCLUDE_ROOT)/profdirserviceprovider \
 	-I$(MOZILLA_INCLUDE_ROOT)/progressDlg \
Index: src/mozilla/kz-mozembed.cpp
===================================================================
RCS file: /cvsroot/kazehakase/kazehakase/src/mozilla/kz-mozembed.cpp,v
retrieving revision 1.192
diff -u -r1.192 kz-mozembed.cpp
--- src/mozilla/kz-mozembed.cpp	11 Sep 2005 01:02:43 -0000	1.192
+++ src/mozilla/kz-mozembed.cpp	26 Sep 2005 16:53:43 -0000
@@ -310,6 +310,7 @@
 static gboolean	     kz_moz_embed_get_allow_images	(KzEmbed      *kzembed);
 static void	     kz_moz_embed_set_allow_images	(KzEmbed      *kzembed,
     							 gboolean      allow);
+static void          kz_moz_embed_show_page_certificate (KzEmbed       *kzembed);
 
 static GtkMozEmbedClass *parent_class = NULL;
 
@@ -387,6 +388,9 @@
 	iface->set_allow_javascript   = kz_moz_embed_set_allow_javascript;
 	iface->get_allow_images       = kz_moz_embed_get_allow_images;
 	iface->set_allow_images       = kz_moz_embed_set_allow_images;
+	iface->show_page_certificate  = kz_moz_embed_show_page_certificate;
+
+
 #if 0
 	iface->set_edit_mode          = set_edit_mode;
 	iface->set_view_mode          = set_view_mode;
@@ -3223,3 +3227,17 @@
 	priv->wrapper->SetAllowImages(allow);
 }
 
+static void
+kz_moz_embed_show_page_certificate (KzEmbed       *kzembed)
+{
+	g_return_if_fail(KZ_IS_MOZ_EMBED(kzembed));
+
+	KzMozEmbedPrivate *priv = KZ_MOZ_EMBED_GET_PRIVATE (kzembed);
+
+	if (!priv->wrapper) return;
+
+	priv->wrapper->ShowPageCertificate();
+
+}
+
+
Index: src/mozilla/kz-mozwrapper.cpp
===================================================================
RCS file: /cvsroot/kazehakase/kazehakase/src/mozilla/kz-mozwrapper.cpp,v
retrieving revision 1.106
diff -u -r1.106 kz-mozwrapper.cpp
--- src/mozilla/kz-mozwrapper.cpp	20 Jul 2005 21:52:36 -0000	1.106
+++ src/mozilla/kz-mozwrapper.cpp	26 Sep 2005 16:53:44 -0000
@@ -80,6 +80,12 @@
 #include "utils.h"
 #include "MozillaPrivate.h"
 
+# include <nsISSLStatus.h>
+# include <nsISSLStatusProvider.h>
+# include <nsICertificateDialogs.h>
+# include <nsIX509Cert.h>
+# include <nsISecureBrowserUI.h>
+
 #ifdef HAVE_CONFIG_H
 #	include "config.h"
 #endif /* HAVE_CONFIG_H */
@@ -158,6 +164,31 @@
 
 	if (NS_FAILED (rv)) g_warning("failed to add a history listener");
 #endif
+
+// SSL related code
+// These codes are picked from mozilla/GaleonWrapper in Galeon 1.3.21.
+// Original copywrite notice.
+// Copyright (C) 2000 Marco Pesenti Gritti
+
+#ifdef HAVE_NSIDOCSHELL_GETSECUREUI
+	nsCOMPtr<nsIDocShell> docShell (do_GetInterface (mWebBrowser, &rv));
+	NS_ENSURE_SUCCESS (rv, rv);
+
+	rv = docShell->GetSecurityUI (getter_AddRefs (mSecurityInfo));
+	NS_ENSURE_SUCCESS (rv, rv);
+#else
+	// Workaround for http://bugzilla.gnome.org/show_bug.cgi?id=164670
+	mSecurityInfo = do_CreateInstance("@kazehakase.sf.jp/hacks/secure-browser-ui;1");
+	if (mSecurityInfo)
+	{
+		mSecurityInfo->Init (mDOMWindow);
+	}
+	else
+	{
+		g_warning ("Failed to instantiate nsISecureBrowserUI!\n");
+	}
+#endif
+
 	return NS_OK;
 }
 
@@ -1906,3 +1937,42 @@
 	return DocShell->SetAllowImages(aAllow);
 }
 
+
+// SSL related code
+// These codes are picked from mozilla/GaleonWrapper in Galeon 1.3.21.
+// Original copywrite notice.
+// Copyright (C) 2000 Marco Pesenti Gritti
+nsresult
+KzMozWrapper::GetSSLStatus (nsISSLStatus **aSSLStatus)
+{
+	NS_ENSURE_TRUE (mSecurityInfo, NS_ERROR_FAILURE);
+
+	nsCOMPtr<nsISSLStatusProvider> sp = do_QueryInterface (mSecurityInfo);
+	NS_ENSURE_TRUE (sp, NS_ERROR_FAILURE);
+
+	nsCOMPtr<nsISSLStatus> SSLStatus;
+	sp->GetSSLStatus(getter_AddRefs(SSLStatus));
+	NS_ENSURE_TRUE (SSLStatus, NS_ERROR_FAILURE);
+
+	NS_ADDREF(*aSSLStatus = SSLStatus);
+	return NS_OK;
+}
+
+nsresult
+KzMozWrapper::ShowPageCertificate (void)
+{
+	nsresult rv;
+	nsCOMPtr<nsISSLStatus> SSLStatus;
+	GetSSLStatus (getter_AddRefs(SSLStatus));
+	NS_ENSURE_TRUE (SSLStatus, NS_ERROR_FAILURE);
+
+	nsCOMPtr<nsIX509Cert> serverCert;
+	SSLStatus->GetServerCert (getter_AddRefs (serverCert));
+	NS_ENSURE_TRUE (serverCert, NS_ERROR_FAILURE);
+
+	nsCOMPtr<nsICertificateDialogs> certDialogs =
+		do_GetService (NS_CERTIFICATEDIALOGS_CONTRACTID, &rv);
+	NS_ENSURE_TRUE (certDialogs, NS_ERROR_FAILURE);
+
+	return certDialogs->ViewCert (NULL, serverCert);
+}
Index: src/mozilla/kz-mozwrapper.h
===================================================================
RCS file: /cvsroot/kazehakase/kazehakase/src/mozilla/kz-mozwrapper.h,v
retrieving revision 1.49
diff -u -r1.49 kz-mozwrapper.h
--- src/mozilla/kz-mozwrapper.h	6 Apr 2005 22:56:57 -0000	1.49
+++ src/mozilla/kz-mozwrapper.h	26 Sep 2005 16:53:44 -0000
@@ -36,6 +36,8 @@
 #include "kz-mozselectionlistener.h"
 #include "kz-mozeventlistener.h"
 
+class nsISecureBrowserUI;
+class nsISSLStatus;
 
 class KzMozWrapper
 {
@@ -141,6 +143,8 @@
 	    				  nsIDOMRange **startRange,
 	    				  nsIDOMRange **endRange);
 
+	nsresult ShowPageCertificate     (void);
+
 	nsCOMPtr<nsIWebBrowser>    mWebBrowser;
 protected:
 	nsCOMPtr<nsIDOMEventTarget>   mEventTarget;
@@ -149,6 +153,7 @@
 	KzMozEventListener           *mKzMozEventListener;
 	KzMozSelectionListener       *mKzMozSelectionListener;
 	PRPackedBool                  mSelectionWasCollapsed;
+	nsCOMPtr<nsISecureBrowserUI> mSecurityInfo;
 
 	nsresult GetListener         (void);
 	nsresult AttachListeners     (void);
@@ -182,4 +187,5 @@
 				     const gchar *storedir,
 				     const gchar *type,
 				     nsAString &LocalFile);
+	nsresult  GetSSLStatus      (nsISSLStatus **aSSLStatus);
 };
Index: src/mozilla/mozilla.cpp
===================================================================
RCS file: /cvsroot/kazehakase/kazehakase/src/mozilla/mozilla.cpp,v
retrieving revision 1.27
diff -u -r1.27 mozilla.cpp
--- src/mozilla/mozilla.cpp	20 Jul 2005 22:06:32 -0000	1.27
+++ src/mozilla/mozilla.cpp	26 Sep 2005 16:53:44 -0000
@@ -118,6 +118,40 @@
 };
 static const int sNumAppComps = G_N_ELEMENTS(sAppComps);
 
+#ifndef HAVE_NSIDOCSHELL_GETSECUREUI
+/* bee4dc31-1326-4c08-9bda-7b230dca97e9 */
+#define NEW_CID { 0xbee4dc31, 0x1326, 0x4c08, { 0x9b, 0xda, 0x7b, 0x23, 0x0d, 0xca, 0x97, 0xe9 } }
+
+static nsresult
+reregister_secure_browser_ui (nsIComponentManager *cm, nsIComponentRegistrar *cr)
+{
+	nsresult rv;
+	
+	/* Workaround as a result of:
+	 *  https://bugzilla.mozilla.org/show_bug.cgi?id=94974
+	 * see
+	 *  http://bugzilla.gnome.org/show_bug.cgi?id=164670
+	 */
+	nsCOMPtr<nsIFactory> factory;
+	rv = cm->GetClassObjectByContractID ("@mozilla.org/secure_browser_ui;1", 
+					     NS_GET_IID(nsIFactory), getter_AddRefs (factory));
+	NS_ENSURE_SUCCESS (rv, rv);
+
+	nsCID *cidPtr = nsnull;
+	rv = cr->ContractIDToCID("@mozilla.org/secure_browser_ui;1", &cidPtr);
+	NS_ENSURE_SUCCESS (rv, rv);
+
+	rv = cr->UnregisterFactory (*cidPtr, factory);
+	NS_ENSURE_SUCCESS (rv, rv);
+
+	const nsCID new_cid = NEW_CID;
+	rv = cr->RegisterFactory (new_cid, "Kazehakase Secure Browser Class",
+				  "@kazehakase.sf.jp/hacks/secure-browser-ui;1", factory);
+	NS_ENSURE_SUCCESS (rv, rv);
+
+	return NS_OK;
+}
+#endif
 
 static gboolean
 mozilla_register_components (void)
@@ -129,6 +163,10 @@
 	rv = NS_GetComponentRegistrar(getter_AddRefs(cr));
 	NS_ENSURE_SUCCESS(rv, rv);
 
+	nsCOMPtr<nsIComponentManager> cm;
+	NS_GetComponentManager (getter_AddRefs (cm));
+	NS_ENSURE_TRUE (cm, FALSE);
+
 	for (int i = 0; i < sNumAppComps; i++)
 	{
 		nsCOMPtr<nsIGenericFactory> componentFactory;
@@ -148,6 +186,10 @@
 			ret = FALSE;
 	}
 
+#ifndef HAVE_NSIDOCSHELL_GETSECUREUI
+        // Workaround for http://bugzilla.gnome.org/show_bug.cgi?id=164670
+        reregister_secure_browser_ui (cm, cr);
+#endif
 	return ret;
 }
 


Kazehakase-devel メーリングリストの案内
Zurück zum Archiv-Index