Bug 1787633 - Make nsTextToSubURI::UnEscapeNonAsciiURI static. r=m_kato

Differential Revision: https://phabricator.services.mozilla.com/D156007
This commit is contained in:
Masatoshi Kimura 2022-09-06 15:59:06 +00:00
parent eaf1544bc4
commit e7b3d513d4
6 changed files with 27 additions and 22 deletions

View File

@ -36,10 +36,10 @@
#include "mozilla/dom/Document.h"
#include "nsIObjectInputStream.h"
#include "nsIObjectOutputStream.h"
#include "nsITextToSubURI.h"
#include "nsIWritablePropertyBag2.h"
#include "nsIContentSecurityPolicy.h"
#include "nsSandboxFlags.h"
#include "nsTextToSubURI.h"
#include "mozilla/BasePrincipal.h"
#include "mozilla/CycleCollectedJSContext.h"
#include "mozilla/dom/AutoEntryScript.h"
@ -1102,15 +1102,9 @@ NS_IMPL_ISUPPORTS(nsJSProtocolHandler, nsIProtocolHandler)
const nsCString& aSpec, const char* aCharset, nsACString& aUTF8Spec) {
aUTF8Spec.Truncate();
nsresult rv;
nsCOMPtr<nsITextToSubURI> txtToSubURI =
do_GetService(NS_ITEXTTOSUBURI_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
nsAutoString uStr;
rv = txtToSubURI->UnEscapeNonAsciiURI(nsDependentCString(aCharset), aSpec,
uStr);
nsresult rv = nsTextToSubURI::UnEscapeNonAsciiURI(
nsDependentCString(aCharset), aSpec, uStr);
NS_ENSURE_SUCCESS(rv, rv);
if (!IsAscii(uStr)) {

View File

@ -15,6 +15,7 @@ XPIDL_MODULE = "uconv"
EXPORTS += [
"nsConverterInputStream.h",
"nsTextToSubURI.h",
]
UNIFIED_SOURCES += [

View File

@ -55,5 +55,6 @@ interface nsITextToSubURI : nsISupports
* @throws NS_ERROR_UCONV_NOCONV when there is no decoder for aCharset
* or NS_ERROR_UDEC_ILLEGALINPUT in case of conversion failure
*/
[binaryname(UnEscapeNonAsciiURIJS)]
AString unEscapeNonAsciiURI(in ACString aCharset, in AUTF8String aURIFragment);
};

View File

@ -71,6 +71,7 @@ static bool statefulCharset(const char* charset) {
return false;
}
// static
nsresult nsTextToSubURI::convertURItoUnicode(const nsCString& aCharset,
const nsCString& aURI,
nsAString& aOut) {
@ -141,9 +142,16 @@ NS_IMETHODIMP nsTextToSubURI::UnEscapeURIForUI(const nsACString& aURIFragment,
}
NS_IMETHODIMP
nsTextToSubURI::UnEscapeNonAsciiURI(const nsACString& aCharset,
const nsACString& aURIFragment,
nsAString& _retval) {
nsTextToSubURI::UnEscapeNonAsciiURIJS(const nsACString& aCharset,
const nsACString& aURIFragment,
nsAString& _retval) {
return UnEscapeNonAsciiURI(aCharset, aURIFragment, _retval);
}
// static
nsresult nsTextToSubURI::UnEscapeNonAsciiURI(const nsACString& aCharset,
const nsACString& aURIFragment,
nsAString& _retval) {
nsAutoCString unescapedSpec;
NS_UnescapeURL(PromiseFlatCString(aURIFragment),
esc_AlwaysCopy | esc_OnlyNonASCII, unescapedSpec);

View File

@ -15,12 +15,18 @@ class nsTextToSubURI : public nsITextToSubURI {
NS_DECL_ISUPPORTS
NS_DECL_NSITEXTTOSUBURI
// Thread-safe function for C++ callers
static nsresult UnEscapeNonAsciiURI(const nsACString& aCharset,
const nsACString& aURIFragment,
nsAString& _retval);
private:
virtual ~nsTextToSubURI();
// We assume that the URI is encoded as UTF-8.
nsresult convertURItoUnicode(const nsCString& aCharset, const nsCString& aURI,
nsAString& _retval);
static nsresult convertURItoUnicode(const nsCString& aCharset,
const nsCString& aURI,
nsAString& _retval);
// Characters defined in netwerk/dns/IDNCharacterBlocklist.inc or via the
// network.IDN.extra_allowed_chars and network.IDN.extra_blocked_chars prefs.

View File

@ -16,7 +16,7 @@
#include <shlobj.h>
#include "nsIWindowsRegKey.h"
#include "nsUnicharUtils.h"
#include "nsITextToSubURI.h"
#include "nsTextToSubURI.h"
#include "nsVariant.h"
#include "mozilla/CmdLineAndEnvUtils.h"
#include "mozilla/ShellHeaderOnlyUtils.h"
@ -287,13 +287,8 @@ nsresult nsMIMEInfoWin::LoadUriInternal(nsIURI* aURL) {
// Unescape non-ASCII characters in the URL
nsAutoString utf16Spec;
nsCOMPtr<nsITextToSubURI> textToSubURI =
do_GetService(NS_ITEXTTOSUBURI_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
if (NS_FAILED(textToSubURI->UnEscapeNonAsciiURI("UTF-8"_ns, urlSpec,
utf16Spec))) {
if (NS_FAILED(nsTextToSubURI::UnEscapeNonAsciiURI("UTF-8"_ns, urlSpec,
utf16Spec))) {
CopyASCIItoUTF16(urlSpec, utf16Spec);
}