diff options
author | Christian Persch <chpe@cvs.gnome.org> | 2004-07-07 21:20:17 +0800 |
---|---|---|
committer | Christian Persch <chpe@src.gnome.org> | 2004-07-07 21:20:17 +0800 |
commit | 07c8bedfbcfaba7db6d32b8f9b6cf870ca35c0ba (patch) | |
tree | 6f6f2604113f95ad9e4b11b9e35019bfa7848515 | |
parent | a6e72cfbdb3417707205f66de0e8e3974d5f12f4 (diff) | |
download | gsoc2013-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-- | ChangeLog | 9 | ||||
-rw-r--r-- | embed/mozilla/EphyHeaderSniffer.cpp | 2 | ||||
-rw-r--r-- | embed/mozilla/EventContext.cpp | 46 | ||||
-rw-r--r-- | embed/mozilla/EventContext.h | 1 | ||||
-rw-r--r-- | embed/mozilla/Makefile.am | 1 |
5 files changed, 56 insertions, 3 deletions
@@ -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 \ |