aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Persch <chpe@cvs.gnome.org>2004-07-07 21:20:17 +0800
committerChristian Persch <chpe@src.gnome.org>2004-07-07 21:20:17 +0800
commit07c8bedfbcfaba7db6d32b8f9b6cf870ca35c0ba (patch)
tree6f6f2604113f95ad9e4b11b9e35019bfa7848515
parenta6e72cfbdb3417707205f66de0e8e3974d5f12f4 (diff)
downloadgsoc2013-epiphany-07c8bedfbcfaba7db6d32b8f9b6cf870ca35c0ba.tar
gsoc2013-epiphany-07c8bedfbcfaba7db6d32b8f9b6cf870ca35c0ba.tar.gz
gsoc2013-epiphany-07c8bedfbcfaba7db6d32b8f9b6cf870ca35c0ba.tar.bz2
gsoc2013-epiphany-07c8bedfbcfaba7db6d32b8f9b6cf870ca35c0ba.tar.lz
gsoc2013-epiphany-07c8bedfbcfaba7db6d32b8f9b6cf870ca35c0ba.tar.xz
gsoc2013-epiphany-07c8bedfbcfaba7db6d32b8f9b6cf870ca35c0ba.tar.zst
gsoc2013-epiphany-07c8bedfbcfaba7db6d32b8f9b6cf870ca35c0ba.zip
Unescape the mailto: address, fixes bug #144462 (merged from HEAD).
2004-07-07 Christian Persch <chpe@cvs.gnome.org> * embed/mozilla/EventContext.cpp: * embed/mozilla/EventContext.h: * embed/mozilla/Makefile.am: Unescape the mailto: address, fixes bug #144462 (merged from HEAD).
-rw-r--r--ChangeLog9
-rw-r--r--embed/mozilla/EphyHeaderSniffer.cpp2
-rw-r--r--embed/mozilla/EventContext.cpp46
-rw-r--r--embed/mozilla/EventContext.h1
-rw-r--r--embed/mozilla/Makefile.am1
5 files changed, 56 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 4598393db..70aa23e9d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2004-07-07 Christian Persch <chpe@cvs.gnome.org>
+
+ * embed/mozilla/EventContext.cpp:
+ * embed/mozilla/EventContext.h:
+ * embed/mozilla/Makefile.am:
+
+ Unescape the mailto: address, fixes bug #144462
+ (merged from HEAD).
+
2004-07-06 Christian Persch <chpe@cvs.gnome.org>
* configure.in:
diff --git a/embed/mozilla/EphyHeaderSniffer.cpp b/embed/mozilla/EphyHeaderSniffer.cpp
index f90a3a0cd..a8efe449c 100644
--- a/embed/mozilla/EphyHeaderSniffer.cpp
+++ b/embed/mozilla/EphyHeaderSniffer.cpp
@@ -337,7 +337,7 @@ nsresult EphyHeaderSniffer::PerformSave (nsIURI* inOriginalURI)
/* Validate the file name to ensure legality. */
char *default_name = g_strdup (NS_ConvertUCS2toUTF8 (defaultFileName).get());
- default_name = g_strdelimit (default_name, "/", ' ');
+ default_name = g_strdelimit (default_name, "/\\:", ' ');
const char *key;
key = ephy_embed_persist_get_persist_key (EPHY_EMBED_PERSIST (mEmbedPersist));
diff --git a/embed/mozilla/EventContext.cpp b/embed/mozilla/EventContext.cpp
index e8a945291..13c4249bf 100644
--- a/embed/mozilla/EventContext.cpp
+++ b/embed/mozilla/EventContext.cpp
@@ -24,6 +24,7 @@
#endif
#include "EventContext.h"
+#include "nsString.h"
#include "nsIDOMEventTarget.h"
#include "nsIDocument.h"
#include "nsIDOMHTMLInputElement.h"
@@ -46,6 +47,9 @@
#include <gdk/gdkkeysyms.h>
#include "nsIPrivateDOMEvent.h"
#include "nsIDOMNSUIEvent.h"
+#include "nsIServiceManager.h"
+#include "nsITextToSubURI.h"
+#include "nsIDocCharset.h"
#define KEY_CODE 256
@@ -143,6 +147,38 @@ nsresult EventContext::GatherTextUnder (nsIDOMNode* aNode, nsString& aResult)
return NS_OK;
}
+nsresult EventContext::Unescape (const nsAString &aEscaped, nsAString &aUnescaped)
+{
+#if MOZILLA_SNAPSHOT >= 11
+ if (!aEscaped.Length()) return NS_ERROR_FAILURE;
+
+ NS_ENSURE_TRUE (mBrowser, NS_ERROR_FAILURE);
+ NS_ENSURE_TRUE (mBrowser->mWebBrowser, NS_ERROR_FAILURE);
+
+ nsCOMPtr<nsITextToSubURI> escaper
+ (do_CreateInstance ("@mozilla.org/intl/texttosuburi;1"));
+ NS_ENSURE_TRUE (escaper, NS_ERROR_FAILURE);
+
+ nsCOMPtr<nsIDocCharset> docCharset = do_GetInterface (mBrowser->mWebBrowser);
+ NS_ENSURE_TRUE (docCharset, NS_ERROR_FAILURE);
+
+ nsCAutoString encoding;
+ char *charset;
+ nsresult rv;
+ rv = docCharset->GetCharset (&charset);
+ NS_ENSURE_SUCCESS (rv, NS_ERROR_FAILURE);
+
+ encoding = charset;
+ if (charset) nsMemory::Free (charset);
+
+ NS_ConvertUCS2toUTF8 escaped (aEscaped);
+ return escaper->UnEscapeNonAsciiURI (encoding, escaped, aUnescaped);
+#else
+ aUnescaped = aEscaped;
+ return NS_OK;
+#endif
+}
+
nsresult EventContext::ResolveBaseURL (nsIDocument *doc, const nsAString &relurl, nsACString &url)
{
#if MOZILLA_SNAPSHOT > 13
@@ -405,9 +441,15 @@ nsresult EventContext::GetEventContext (nsIDOMEventTarget *EventTarget,
substr.Assign (Substring (tmp, 0, 7));
if (substr.EqualsIgnoreCase("mailto:"))
{
- info->context |= EMBED_CONTEXT_EMAIL_LINK;
const nsAString &address = Substring(tmp, 7, tmp.Length()-7);
- SetStringProperty ("email", address);
+
+ nsAutoString unescapedHref;
+ rv = Unescape (address, unescapedHref);
+ if (NS_SUCCEEDED (rv) && unescapedHref.Length())
+ {
+ SetStringProperty ("email", unescapedHref);
+ info->context |= EMBED_CONTEXT_EMAIL_LINK;
+ }
}
if (anchor && !tmp.IsEmpty())
diff --git a/embed/mozilla/EventContext.h b/embed/mozilla/EventContext.h
index 2f7a64a9f..d68bca6b5 100644
--- a/embed/mozilla/EventContext.h
+++ b/embed/mozilla/EventContext.h
@@ -56,6 +56,7 @@ private:
nsCOMPtr<nsIDOMDocument> mDOMDocument;
nsresult GatherTextUnder (nsIDOMNode* aNode, nsString& aResult);
+ nsresult Unescape (const nsAString &aEscaped, nsAString &aUnescaped);
nsresult ResolveBaseURL (nsIDocument *doc, const nsAString &relurl, nsACString &url);
nsresult ResolveDocumentURL (nsIDocument *doc, const nsAString &relurl, nsACString &url);
nsresult GetEventContext (nsIDOMEventTarget *EventTarget,
diff --git a/embed/mozilla/Makefile.am b/embed/mozilla/Makefile.am
index 063d16d1b..7fd8421ee 100644
--- a/embed/mozilla/Makefile.am
+++ b/embed/mozilla/Makefile.am
@@ -29,6 +29,7 @@ INCLUDES = \
-I$(MOZILLA_INCLUDE_ROOT)/string \
-I$(MOZILLA_INCLUDE_ROOT)/unicharutil \
-I$(MOZILLA_INCLUDE_ROOT)/uriloader \
+ -I$(MOZILLA_INCLUDE_ROOT)/uconv \
-I$(MOZILLA_INCLUDE_ROOT)/wallet \
-I$(MOZILLA_INCLUDE_ROOT)/webbrowserpersist \
-I$(MOZILLA_INCLUDE_ROOT)/webbrwsr \