From 42e97995a271c38245cd4ffe3f74900974cae4bd Mon Sep 17 00:00:00 2001 From: "nhotta%netscape.com" Date: Sun, 8 Sep 2002 15:08:45 +0000 Subject: [PATCH] Changed to use uconv util function to do the unescape which checks for valid UTF-8 and fallback to the doc charset, bug 161479, r=shanjian, sr=jst, a=dbaron. git-svn-id: svn://10.0.0.236/trunk@129064 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/dom/src/jsurl/nsJSProtocolHandler.cpp | 45 ++++--------------- mozilla/dom/src/jsurl/nsJSProtocolHandler.h | 7 +-- 2 files changed, 10 insertions(+), 42 deletions(-) diff --git a/mozilla/dom/src/jsurl/nsJSProtocolHandler.cpp b/mozilla/dom/src/jsurl/nsJSProtocolHandler.cpp index 5557881705f..d4cb3f29aad 100644 --- a/mozilla/dom/src/jsurl/nsJSProtocolHandler.cpp +++ b/mozilla/dom/src/jsurl/nsJSProtocolHandler.cpp @@ -750,49 +750,20 @@ nsJSProtocolHandler::EnsureUTF8Spec(const nsAFlatCString &aSpec, const char *aCh { aUTF8Spec.Truncate(); - // assume UTF-8 if the spec contains unescaped non ASCII - if (!nsCRT::IsAscii(aSpec.get())) - return NS_OK; - - nsCAutoString unescapedSpec; - NS_UnescapeURL(aSpec.get(), aSpec.Length(), - esc_OnlyNonASCII, unescapedSpec); - - if (IsASCII(unescapedSpec)) - return NS_OK; - nsresult rv; - if (!mCharsetConverterManager) { - mCharsetConverterManager = do_GetService(NS_CHARSETCONVERTERMANAGER_CONTRACTID, &rv); + + if (!mTextToSubURI) { + mTextToSubURI = do_GetService(NS_ITEXTTOSUBURI_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); } - nsCOMPtr charsetAtom; - rv = mCharsetConverterManager->GetCharsetAtom2(aCharset, getter_AddRefs(charsetAtom)); + nsAutoString uStr; + rv = mTextToSubURI->UnEscapeNonAsciiURI(nsDependentCString(aCharset), aSpec, uStr); NS_ENSURE_SUCCESS(rv, rv); - if (mCharsetAtom != charsetAtom) { - rv = mCharsetConverterManager->GetUnicodeDecoder(charsetAtom, - getter_AddRefs(mUnicodeDecoder)); - NS_ENSURE_SUCCESS(rv, rv); - mCharsetAtom = charsetAtom; - } + if (!IsASCII(uStr)) + NS_EscapeURL(NS_ConvertUCS2toUTF8(uStr), esc_AlwaysCopy | esc_OnlyNonASCII, aUTF8Spec); - PRInt32 srcLen = unescapedSpec.Length(); - PRInt32 dstLen; - rv = mUnicodeDecoder->GetMaxLength(unescapedSpec.get(), srcLen, &dstLen); - NS_ENSURE_SUCCESS(rv, rv); - - PRUnichar *ustr = (PRUnichar *) nsMemory::Alloc(dstLen * sizeof(PRUnichar)); - NS_ENSURE_TRUE(ustr, NS_ERROR_OUT_OF_MEMORY); - - rv = mUnicodeDecoder->Convert(unescapedSpec.get(), &srcLen, ustr, &dstLen); - if (NS_SUCCEEDED(rv)) { - NS_ConvertUCS2toUTF8 rawUTF8Spec(ustr, dstLen); - NS_EscapeURL(rawUTF8Spec, esc_AlwaysCopy | esc_OnlyNonASCII, aUTF8Spec); - } - nsMemory::Free(ustr); - - return rv; + return NS_OK; } //////////////////////////////////////////////////////////////////////////////// diff --git a/mozilla/dom/src/jsurl/nsJSProtocolHandler.h b/mozilla/dom/src/jsurl/nsJSProtocolHandler.h index e8dd2254be4..3535c31ff2a 100644 --- a/mozilla/dom/src/jsurl/nsJSProtocolHandler.h +++ b/mozilla/dom/src/jsurl/nsJSProtocolHandler.h @@ -40,8 +40,7 @@ #define nsJSProtocolHandler_h___ #include "nsIProtocolHandler.h" -#include "nsICharsetConverterManager.h" -#include "nsICharsetConverterManager2.h" +#include "nsITextToSubURI.h" #define NS_JSPROTOCOLHANDLER_CID \ { /* bfc310d2-38a0-11d3-8cd3-0060b0fc14a3 */ \ @@ -73,9 +72,7 @@ protected: nsresult EnsureUTF8Spec(const nsAFlatCString &aSpec, const char *aCharset, nsACString &aUTF8Spec); - nsCOMPtr mCharsetConverterManager; - nsCOMPtr mCharsetAtom; - nsCOMPtr mUnicodeDecoder; + nsCOMPtr mTextToSubURI; }; #endif /* nsJSProtocolHandler_h___ */