aboutsummaryrefslogtreecommitdiffstats
path: root/embed
diff options
context:
space:
mode:
Diffstat (limited to 'embed')
-rw-r--r--embed/mozilla/EphyBrowser.cpp49
-rw-r--r--embed/mozilla/EphyBrowser.h11
-rw-r--r--embed/mozilla/mozilla-embed.cpp37
3 files changed, 42 insertions, 55 deletions
diff --git a/embed/mozilla/EphyBrowser.cpp b/embed/mozilla/EphyBrowser.cpp
index de5def194..bcda45c9e 100644
--- a/embed/mozilla/EphyBrowser.cpp
+++ b/embed/mozilla/EphyBrowser.cpp
@@ -362,6 +362,16 @@ nsresult EphyBrowser::Init (GtkMozEmbed *mozembed)
rv = GetListener();
NS_ENSURE_SUCCESS (rv, NS_ERROR_FAILURE);
+#ifdef HAVE_MOZILLA_PSM
+ /* FIXME: mozilla sucks! nsWebBrowser already has an instance of this,
+ * but we cannot get to it!
+ * See https://bugzilla.mozilla.org/show_bug.cgi?id=94974
+ */
+ mSecurityInfo = do_CreateInstance(NS_SECURE_BROWSER_UI_CONTRACTID, &rv);
+ NS_ENSURE_TRUE (NS_SUCCEEDED (rv) && mSecurityInfo, NS_ERROR_FAILURE);
+ mSecurityInfo->Init (mDOMWindow);
+#endif
+
mInitialized = PR_TRUE;
return AttachListeners();
@@ -1049,40 +1059,21 @@ nsresult EphyBrowser::GetHasModifiedForms (PRBool *modified)
}
nsresult
-EphyBrowser::SetSecurityInfo (nsIRequest *aRequest)
+EphyBrowser::GetSecurityInfo (PRUint32 *aState, nsACString &aDescription)
{
#ifdef HAVE_MOZILLA_PSM
- /* clear previous security info */
- mSecurityInfo = nsnull;
-
- nsCOMPtr<nsIChannel> channel (do_QueryInterface (aRequest));
- NS_ENSURE_TRUE (channel, NS_ERROR_FAILURE);
-
- channel->GetSecurityInfo (getter_AddRefs (mSecurityInfo));
-
- return NS_OK;
-#else
- return NS_ERROR_NOT_IMPLEMENTED;
-#endif
-}
-
-nsresult
-EphyBrowser::GetSecurityDescription (nsACString &aDescription)
-{
-#ifdef HAVE_MOZILLA_PSM
- if (!mSecurityInfo) return NS_ERROR_FAILURE;
-
- nsCOMPtr<nsITransportSecurityInfo> tsInfo (do_QueryInterface (mSecurityInfo));
- NS_ENSURE_TRUE (tsInfo, NS_ERROR_FAILURE);
+ NS_ENSURE_TRUE (mSecurityInfo, NS_ERROR_FAILURE);
nsresult rv;
- PRUnichar *tooltip = nsnull;
- rv = tsInfo->GetShortSecurityDescription (&tooltip);
- NS_ENSURE_TRUE (NS_SUCCEEDED (rv) && tooltip, NS_ERROR_FAILURE);
+ rv = mSecurityInfo->GetState (aState);
+ NS_ENSURE_SUCCESS (rv, NS_ERROR_FAILURE);
+
+ nsEmbedString tooltip;
+ rv = mSecurityInfo->GetTooltipText (tooltip);
+ NS_ENSURE_SUCCESS (rv, NS_ERROR_FAILURE);
- NS_UTF16ToCString (nsEmbedString (tooltip),
+ NS_UTF16ToCString (tooltip,
NS_CSTRING_ENCODING_UTF8, aDescription);
- if (tooltip) nsMemory::Free (tooltip);
return NS_OK;
#else
@@ -1094,7 +1085,7 @@ nsresult
EphyBrowser::ShowCertificate ()
{
#ifdef HAVE_MOZILLA_PSM
- if (!mSecurityInfo) return NS_ERROR_FAILURE;
+ NS_ENSURE_TRUE (mSecurityInfo, NS_ERROR_FAILURE);
nsCOMPtr<nsISSLStatusProvider> statusProvider (do_QueryInterface (mSecurityInfo));
NS_ENSURE_TRUE (statusProvider, NS_ERROR_FAILURE);
diff --git a/embed/mozilla/EphyBrowser.h b/embed/mozilla/EphyBrowser.h
index 76a5b6bfd..4a27ed106 100644
--- a/embed/mozilla/EphyBrowser.h
+++ b/embed/mozilla/EphyBrowser.h
@@ -39,7 +39,11 @@
#include <nsIRequest.h>
#ifdef ALLOW_PRIVATE_API
-#include "nsIContentViewer.h"
+#include <nsIContentViewer.h>
+#endif
+
+#ifdef HAVE_MOZILLA_PSM
+#include <nsISecureBrowserUI.h>
#endif
class EphyEventListener : public nsIDOMEventListener
@@ -134,8 +138,7 @@ public:
nsresult GetHasModifiedForms (PRBool *modified);
- nsresult SetSecurityInfo (nsIRequest *aRequest);
- nsresult GetSecurityDescription (nsACString &aDescription);
+ nsresult GetSecurityInfo (PRUint32 *aState, nsACString &aDescription);
nsresult ShowCertificate ();
nsCOMPtr<nsIWebBrowser> mWebBrowser;
@@ -144,7 +147,7 @@ private:
nsCOMPtr<nsIDOMDocument> mTargetDocument;
nsCOMPtr<nsIDOMEventTarget> mEventTarget;
nsCOMPtr<nsIDOMWindow> mDOMWindow;
- nsCOMPtr<nsISupports> mSecurityInfo;
+ nsCOMPtr<nsISecureBrowserUI> mSecurityInfo;
EphyFaviconEventListener *mFaviconEventListener;
EphyPopupBlockEventListener *mPopupBlockEventListener;
EphyModalAlertEventListener *mModalAlertListener;
diff --git a/embed/mozilla/mozilla-embed.cpp b/embed/mozilla/mozilla-embed.cpp
index dcd07d816..fd71b5cb9 100644
--- a/embed/mozilla/mozilla-embed.cpp
+++ b/embed/mozilla/mozilla-embed.cpp
@@ -72,8 +72,9 @@ static void mozilla_embed_new_window_cb (GtkMozEmbed *embed,
MozillaEmbed *membed);
static void mozilla_embed_security_change_cb (GtkMozEmbed *embed,
gpointer request,
- guint state, MozillaEmbed *membed);
-static EmbedSecurityLevel mozilla_embed_security_level (MozillaEmbed *membed);
+ PRUint32 state,
+ MozillaEmbed *membed);
+static EmbedSecurityLevel mozilla_embed_security_level (PRUint32 state);
#define MOZILLA_EMBED_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), MOZILLA_TYPE_EMBED, MozillaEmbedPrivate))
@@ -88,7 +89,6 @@ typedef enum
struct MozillaEmbedPrivate
{
EphyBrowser *browser;
- guint security_state;
MozillaEmbedLoadState load_state;
};
@@ -260,7 +260,6 @@ mozilla_embed_init (MozillaEmbed *embed)
{
embed->priv = MOZILLA_EMBED_GET_PRIVATE (embed);
embed->priv->browser = new EphyBrowser ();
- embed->priv->security_state = STATE_IS_UNKNOWN;
g_signal_connect_object (G_OBJECT (embed), "location",
G_CALLBACK (mozilla_embed_location_changed_cb),
@@ -632,24 +631,23 @@ impl_shistory_go_nth (EphyEmbed *embed,
}
static void
-impl_get_security_level (EphyEmbed *embed,
+impl_get_security_level (EphyEmbed *embed,
EmbedSecurityLevel *level,
char **description)
{
MozillaEmbedPrivate *mpriv = MOZILLA_EMBED (embed)->priv;
- g_return_if_fail (description != NULL && level != NULL);
-
- *description = NULL;
- *level = STATE_IS_UNKNOWN;
+ if (level) *level = STATE_IS_UNKNOWN;
+ if (description) *description = NULL;
nsresult rv;
+ PRUint32 state;
nsEmbedCString desc;
- rv = mpriv->browser->GetSecurityDescription (desc);
+ rv = mpriv->browser->GetSecurityInfo (&state, desc);
if (NS_FAILED (rv)) return;
- *description = g_strdup (desc.get());
- *level = mozilla_embed_security_level (MOZILLA_EMBED (embed));
+ if (level) *level = mozilla_embed_security_level (state);
+ if (description) *description = g_strdup (desc.get());
}
static void
@@ -1083,24 +1081,19 @@ mozilla_embed_new_window_cb (GtkMozEmbed *embed,
static void
mozilla_embed_security_change_cb (GtkMozEmbed *embed,
gpointer requestptr,
- guint state,
+ PRUint32 state,
MozillaEmbed *membed)
{
- EmbedSecurityLevel level;
-
- membed->priv->browser->SetSecurityInfo (static_cast<nsIRequest*>(requestptr));
- membed->priv->security_state = state;
- level = mozilla_embed_security_level (membed);
-
- g_signal_emit_by_name (membed, "ge_security_change", level);
+ g_signal_emit_by_name (membed, "ge_security_change",
+ mozilla_embed_security_level (state));
}
static EmbedSecurityLevel
-mozilla_embed_security_level (MozillaEmbed *membed)
+mozilla_embed_security_level (PRUint32 state)
{
EmbedSecurityLevel level;
- switch (membed->priv->security_state)
+ switch (state)
{
case nsIWebProgressListener::STATE_IS_INSECURE:
level = STATE_IS_INSECURE;