diff options
author | Christian Persch <chpe@cvs.gnome.org> | 2004-02-29 21:21:53 +0800 |
---|---|---|
committer | Christian Persch <chpe@src.gnome.org> | 2004-02-29 21:21:53 +0800 |
commit | b739c9c7b5cdf56705049b9fd5e9d745b7c3d1e6 (patch) | |
tree | e6fa5c970cbbceb86dbd9c38bb419aaa0c48d18e /embed | |
parent | e384714845c1bd7a98dc2a3652a7192423e96bb6 (diff) | |
download | gsoc2013-epiphany-b739c9c7b5cdf56705049b9fd5e9d745b7c3d1e6.tar gsoc2013-epiphany-b739c9c7b5cdf56705049b9fd5e9d745b7c3d1e6.tar.gz gsoc2013-epiphany-b739c9c7b5cdf56705049b9fd5e9d745b7c3d1e6.tar.bz2 gsoc2013-epiphany-b739c9c7b5cdf56705049b9fd5e9d745b7c3d1e6.tar.lz gsoc2013-epiphany-b739c9c7b5cdf56705049b9fd5e9d745b7c3d1e6.tar.xz gsoc2013-epiphany-b739c9c7b5cdf56705049b9fd5e9d745b7c3d1e6.tar.zst gsoc2013-epiphany-b739c9c7b5cdf56705049b9fd5e9d745b7c3d1e6.zip |
Decode RFC 2231 and RFC 2047 encoded filenames in content-disposition
2004-02-29 Christian Persch <chpe@cvs.gnome.org>
* embed/mozilla/EphyHeaderSniffer.cpp: (PerformSave):
Decode RFC 2231 and RFC 2047 encoded filenames in content-disposition
headers. Ported from mozilla Camino, see
http://bugzilla.mozilla.org/show_bug.cgi?id=233798 .
Diffstat (limited to 'embed')
-rw-r--r-- | embed/mozilla/EphyHeaderSniffer.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/embed/mozilla/EphyHeaderSniffer.cpp b/embed/mozilla/EphyHeaderSniffer.cpp index c9240c1b3..35af9763f 100644 --- a/embed/mozilla/EphyHeaderSniffer.cpp +++ b/embed/mozilla/EphyHeaderSniffer.cpp @@ -67,6 +67,9 @@ #include "nsIMIMEInfo.h" #include "nsIDOMHTMLDocument.h" #include "nsIDownload.h" +#if MOZILLA_SNAPSHOT > 10 +#include "nsIMIMEHeaderParam.h" +#endif #include <glib/gi18n.h> #include <libgnomevfs/gnome-vfs-utils.h> @@ -242,6 +245,36 @@ nsresult EphyHeaderSniffer::PerformSave (nsIURI* inOriginalURI) if (defaultFileName.IsEmpty() && !mContentDisposition.IsEmpty()) { /* 1 Use the HTTP header suggestion. */ +#if MOZILLA_SNAPSHOT > 10 + nsCOMPtr<nsIMIMEHeaderParam> mimehdrpar = + do_GetService("@mozilla.org/network/mime-hdrparam;1"); + + if (mimehdrpar) + {g_print ("Using nsIMIMEHeaderParam!\n"); + nsCAutoString fallbackCharset; + if (mURL) + { + mURL->GetOriginCharset(fallbackCharset); + } + + nsAutoString fileName; + + rv = mimehdrpar->GetParameter (mContentDisposition, "filename", + fallbackCharset, PR_TRUE, nsnull, + fileName); + if (NS_FAILED(rv) || fileName.IsEmpty()) + { + rv = mimehdrpar->GetParameter (mContentDisposition, "name", + fallbackCharset, PR_TRUE, nsnull, + fileName); + } + + if (NS_SUCCEEDED(rv) && !fileName.IsEmpty()) + { + defaultFileName = fileName; + } + } +#else PRInt32 index = mContentDisposition.Find("filename="); if (index >= 0) { @@ -251,6 +284,7 @@ nsresult EphyHeaderSniffer::PerformSave (nsIURI* inOriginalURI) mContentDisposition.Right(filename, mContentDisposition.Length() - index); defaultFileName = NS_ConvertUTF8toUCS2(filename); } +#endif } if (defaultFileName.IsEmpty()) @@ -262,6 +296,9 @@ nsresult EphyHeaderSniffer::PerformSave (nsIURI* inOriginalURI) { nsCAutoString fileNameCString; url->GetFileName(fileNameCString); + /* FIXME: when we can depend on moz >= 1.5, use + * CopyUTF8toUTF16 instead + */ defaultFileName = NS_ConvertUTF8toUCS2(fileNameCString); } } @@ -282,6 +319,9 @@ nsresult EphyHeaderSniffer::PerformSave (nsIURI* inOriginalURI) /* 4 Use the host. */ nsCAutoString hostName; mURL->GetHost(hostName); + /* FIXME: when we can depend on moz >= 1.5, use + * CopyUTF8toUTF16 instead + */ defaultFileName = NS_ConvertUTF8toUCS2(hostName); } |