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; }