diff --git a/dom/archivereader/ArchiveReader.cpp b/dom/archivereader/ArchiveReader.cpp index e2b6a9be676a..c0439c644fc7 100644 --- a/dom/archivereader/ArchiveReader.cpp +++ b/dom/archivereader/ArchiveReader.cpp @@ -37,7 +37,7 @@ ArchiveReader::Constructor(const GlobalObject& aGlobal, nsAutoCString encoding; if (!EncodingUtils::FindEncodingForLabelNoReplacement(aOptions.mEncoding, encoding)) { - aError.ThrowTypeError(MSG_ENCODING_NOT_SUPPORTED, &aOptions.mEncoding); + aError.ThrowRangeError(MSG_ENCODING_NOT_SUPPORTED, &aOptions.mEncoding); return nullptr; } diff --git a/dom/archivereader/test/test_nonUnicode.html b/dom/archivereader/test/test_nonUnicode.html index a3b485616473..aa148d2f962b 100644 --- a/dom/archivereader/test/test_nonUnicode.html +++ b/dom/archivereader/test/test_nonUnicode.html @@ -63,7 +63,7 @@ new ArchiveReader(binaryFile, { encoding: "random stuff" }); ok(false, "Should have thrown for bogus encoding label."); } catch (e) { - ok(e instanceof TypeError, "Expected a TypeError"); + ok(e instanceof RangeError, "Expected a RangeError"); finishTest(); } } diff --git a/dom/base/WindowNamedPropertiesHandler.cpp b/dom/base/WindowNamedPropertiesHandler.cpp index e450ab05ce47..c28e40e2aa09 100644 --- a/dom/base/WindowNamedPropertiesHandler.cpp +++ b/dom/base/WindowNamedPropertiesHandler.cpp @@ -159,7 +159,7 @@ WindowNamedPropertiesHandler::defineProperty(JSContext* aCx, { ErrorResult rv; rv.ThrowTypeError(MSG_DEFINEPROPERTY_ON_GSP); - rv.ReportTypeError(aCx); + rv.ReportErrorWithMessage(aCx); return false; } diff --git a/dom/base/domerr.msg b/dom/base/domerr.msg index 1c31d4d76c7a..7af3c7809a63 100644 --- a/dom/base/domerr.msg +++ b/dom/base/domerr.msg @@ -38,8 +38,6 @@ DOM4_MSG_DEF(RangeError, "The method parameter is out of valid range.", NS_ERROR /* StringEncoding API errors from http://wiki.whatwg.org/wiki/StringEncoding */ DOM4_MSG_DEF(EncodingError, "The given encoding is not supported.", NS_ERROR_DOM_ENCODING_NOT_SUPPORTED_ERR) -DOM4_MSG_DEF(EncodingError, "The encoding must be utf-8, utf-16, or utf-16be.", NS_ERROR_DOM_ENCODING_NOT_UTF_ERR) -DOM4_MSG_DEF(EncodingError, "The decoder failed to convert.", NS_ERROR_DOM_ENCODING_DECODE_ERR) /* WebCrypto API errors from http://www.w3.org/TR/WebCryptoAPI/ */ DOM4_MSG_DEF(UnknownError, "The operation failed for an unknown transient reason", NS_ERROR_DOM_UNKNOWN_ERR) diff --git a/dom/bindings/BindingUtils.cpp b/dom/bindings/BindingUtils.cpp index d89ebd144925..da8671176d3b 100644 --- a/dom/bindings/BindingUtils.cpp +++ b/dom/bindings/BindingUtils.cpp @@ -50,8 +50,8 @@ namespace mozilla { namespace dom { JSErrorFormatString ErrorFormatString[] = { -#define MSG_DEF(_name, _argc, _str) \ - { _str, _argc, JSEXN_TYPEERR }, +#define MSG_DEF(_name, _argc, _exn, _str) \ + { _str, _argc, _exn }, #include "mozilla/dom/Errors.msg" #undef MSG_DEF }; @@ -123,22 +123,20 @@ struct ErrorResult::Message { }; void -ErrorResult::ThrowTypeError(const dom::ErrNum errorNumber, ...) +ErrorResult::ThrowErrorWithMessage(va_list ap, const dom::ErrNum errorNumber, + nsresult errorType) { - va_list ap; - va_start(ap, errorNumber); if (IsJSException()) { // We have rooted our mJSException, and we don't have the info // needed to unroot here, so just bail. - va_end(ap); MOZ_ASSERT(false, - "Ignoring ThrowTypeError call because we have a JS exception"); + "Ignoring ThrowErrorWithMessage call because we have a JS exception"); return; } - if (IsTypeError()) { + if (IsErrorWithMessage()) { delete mMessage; } - mResult = NS_ERROR_TYPE_ERR; + mResult = errorType; Message* message = new Message(); message->mErrorNumber = errorNumber; uint16_t argCount = dom::GetErrorMessage(nullptr, errorNumber)->argCount; @@ -148,13 +146,30 @@ ErrorResult::ThrowTypeError(const dom::ErrNum errorNumber, ...) message->mArgs.AppendElement(*va_arg(ap, nsString*)); } mMessage = message; +} + +void +ErrorResult::ThrowTypeError(const dom::ErrNum errorNumber, ...) +{ + va_list ap; + va_start(ap, errorNumber); + ThrowErrorWithMessage(ap, errorNumber, NS_ERROR_TYPE_ERR); va_end(ap); } void -ErrorResult::ReportTypeError(JSContext* aCx) +ErrorResult::ThrowRangeError(const dom::ErrNum errorNumber, ...) { - MOZ_ASSERT(mMessage, "ReportTypeError() can be called only once"); + va_list ap; + va_start(ap, errorNumber); + ThrowErrorWithMessage(ap, errorNumber, NS_ERROR_RANGE_ERR); + va_end(ap); +} + +void +ErrorResult::ReportErrorWithMessage(JSContext* aCx) +{ + MOZ_ASSERT(mMessage, "ReportErrorWithMessage() can be called only once"); Message* message = mMessage; const uint32_t argCount = message->mArgs.Length(); @@ -174,7 +189,7 @@ ErrorResult::ReportTypeError(JSContext* aCx) void ErrorResult::ClearMessage() { - if (IsTypeError()) { + if (IsErrorWithMessage()) { delete mMessage; mMessage = nullptr; } @@ -186,7 +201,7 @@ ErrorResult::ThrowJSException(JSContext* cx, JS::Handle<JS::Value> exn) MOZ_ASSERT(mMightHaveUnreportedJSException, "Why didn't you tell us you planned to throw a JS exception?"); - if (IsTypeError()) { + if (IsErrorWithMessage()) { delete mMessage; } diff --git a/dom/bindings/BindingUtils.h b/dom/bindings/BindingUtils.h index 62d4e923cf71..efe9f05f34a2 100644 --- a/dom/bindings/BindingUtils.h +++ b/dom/bindings/BindingUtils.h @@ -103,8 +103,8 @@ ThrowMethodFailedWithDetails(JSContext* cx, ErrorResult& rv, const char* memberName, bool reportJSContentExceptions = false) { - if (rv.IsTypeError()) { - rv.ReportTypeError(cx); + if (rv.IsErrorWithMessage()) { + rv.ReportErrorWithMessage(cx); return false; } if (rv.IsJSException()) { diff --git a/dom/bindings/ErrorResult.h b/dom/bindings/ErrorResult.h index 9bd87d195450..15b8399e5ae9 100644 --- a/dom/bindings/ErrorResult.h +++ b/dom/bindings/ErrorResult.h @@ -23,7 +23,7 @@ namespace mozilla { namespace dom { enum ErrNum { -#define MSG_DEF(_name, _argc, _str) \ +#define MSG_DEF(_name, _argc, _exn, _str) \ _name, #include "mozilla/dom/Errors.msg" #undef MSG_DEF @@ -51,7 +51,7 @@ public: #ifdef DEBUG ~ErrorResult() { - MOZ_ASSERT_IF(IsTypeError(), !mMessage); + MOZ_ASSERT_IF(IsErrorWithMessage(), !mMessage); MOZ_ASSERT(!mMightHaveUnreportedJSException); } #endif @@ -59,7 +59,8 @@ public: void Throw(nsresult rv) { MOZ_ASSERT(NS_FAILED(rv), "Please don't try throwing success"); MOZ_ASSERT(rv != NS_ERROR_TYPE_ERR, "Use ThrowTypeError()"); - MOZ_ASSERT(!IsTypeError(), "Don't overwite TypeError"); + MOZ_ASSERT(rv != NS_ERROR_RANGE_ERR, "Use ThrowRangeError()"); + MOZ_ASSERT(!IsErrorWithMessage(), "Don't overwrite errors with message"); MOZ_ASSERT(rv != NS_ERROR_DOM_JS_EXCEPTION, "Use ThrowJSException()"); MOZ_ASSERT(!IsJSException(), "Don't overwrite JS exceptions"); MOZ_ASSERT(rv != NS_ERROR_XPC_NOT_ENOUGH_ARGS, "Use ThrowNotEnoughArgsError()"); @@ -68,9 +69,10 @@ public: } void ThrowTypeError(const dom::ErrNum errorNumber, ...); - void ReportTypeError(JSContext* cx); + void ThrowRangeError(const dom::ErrNum errorNumber, ...); + void ReportErrorWithMessage(JSContext* cx); void ClearMessage(); - bool IsTypeError() const { return ErrorCode() == NS_ERROR_TYPE_ERR; } + bool IsErrorWithMessage() const { return ErrorCode() == NS_ERROR_TYPE_ERR || ErrorCode() == NS_ERROR_RANGE_ERR; } // Facilities for throwing a preexisting JS exception value via this // ErrorResult. The contract is that any code which might end up calling @@ -123,7 +125,8 @@ public: // this. void operator=(nsresult rv) { MOZ_ASSERT(rv != NS_ERROR_TYPE_ERR, "Use ThrowTypeError()"); - MOZ_ASSERT(!IsTypeError(), "Don't overwite TypeError"); + MOZ_ASSERT(rv != NS_ERROR_RANGE_ERR, "Use ThrowRangeError()"); + MOZ_ASSERT(!IsErrorWithMessage(), "Don't overwrite errors with message"); MOZ_ASSERT(rv != NS_ERROR_DOM_JS_EXCEPTION, "Use ThrowJSException()"); MOZ_ASSERT(!IsJSException(), "Don't overwrite JS exceptions"); MOZ_ASSERT(rv != NS_ERROR_XPC_NOT_ENOUGH_ARGS, "Use ThrowNotEnoughArgsError()"); @@ -142,12 +145,12 @@ public: private: nsresult mResult; struct Message; - // mMessage is set by ThrowTypeError and cleared (and deallocatd) by - // ReportTypeError. + // mMessage is set by ThrowErrorWithMessage and cleared (and deallocated) by + // ReportErrorWithMessage. // mJSException is set (and rooted) by ThrowJSException and unrooted // by ReportJSException. union { - Message* mMessage; // valid when IsTypeError() + Message* mMessage; // valid when IsErrorWithMessage() JS::Value mJSException; // valid when IsJSException() }; @@ -160,6 +163,8 @@ private: // Not to be implemented, to make sure people always pass this by // reference, not by value. ErrorResult(const ErrorResult&) = delete; + void ThrowErrorWithMessage(va_list ap, const dom::ErrNum errorNumber, + nsresult errorType); }; /****************************************************************************** diff --git a/dom/bindings/Errors.msg b/dom/bindings/Errors.msg index ec6bd26d8101..c388123c4909 100644 --- a/dom/bindings/Errors.msg +++ b/dom/bindings/Errors.msg @@ -19,50 +19,55 @@ * be replaced with a string value when the error is reported. */ -MSG_DEF(MSG_INVALID_ENUM_VALUE, 3, "{0} '{1}' is not a valid value for enumeration {2}.") -MSG_DEF(MSG_MISSING_ARGUMENTS, 1, "Not enough arguments to {0}.") -MSG_DEF(MSG_NOT_OBJECT, 1, "{0} is not an object.") -MSG_DEF(MSG_NOT_CALLABLE, 1, "{0} is not callable.") -MSG_DEF(MSG_DOES_NOT_IMPLEMENT_INTERFACE, 2, "{0} does not implement interface {1}.") -MSG_DEF(MSG_METHOD_THIS_DOES_NOT_IMPLEMENT_INTERFACE, 2, "'{0}' called on an object that does not implement interface {1}.") -MSG_DEF(MSG_METHOD_THIS_UNWRAPPING_DENIED, 1, "Permission to call '{0}' denied.") -MSG_DEF(MSG_GETTER_THIS_DOES_NOT_IMPLEMENT_INTERFACE, 2, "'{0}' getter called on an object that does not implement interface {1}.") -MSG_DEF(MSG_GETTER_THIS_UNWRAPPING_DENIED, 1, "Permission to call '{0}' getter denied.") -MSG_DEF(MSG_SETTER_THIS_DOES_NOT_IMPLEMENT_INTERFACE, 2, "'{0}' setter called on an object that does not implement interface {1}.") -MSG_DEF(MSG_SETTER_THIS_UNWRAPPING_DENIED, 1, "Permission to call '{0}' setter denied.") -MSG_DEF(MSG_THIS_DOES_NOT_IMPLEMENT_INTERFACE, 1, "\"this\" object does not implement interface {0}.") -MSG_DEF(MSG_NOT_IN_UNION, 2, "{0} could not be converted to any of: {1}.") -MSG_DEF(MSG_ILLEGAL_CONSTRUCTOR, 0, "Illegal constructor.") -MSG_DEF(MSG_CONSTRUCTOR_WITHOUT_NEW, 1, "Constructor {0} requires 'new'") -MSG_DEF(MSG_NO_INDEXED_SETTER, 1, "{0} doesn't have an indexed property setter.") -MSG_DEF(MSG_NO_NAMED_SETTER, 1, "{0} doesn't have a named property setter.") -MSG_DEF(MSG_ENFORCE_RANGE_NON_FINITE, 1, "Non-finite value is out of range for {0}.") -MSG_DEF(MSG_ENFORCE_RANGE_OUT_OF_RANGE, 1, "Value is out of range for {0}.") -MSG_DEF(MSG_NOT_SEQUENCE, 1, "{0} can't be converted to a sequence.") -MSG_DEF(MSG_NOT_DICTIONARY, 1, "{0} can't be converted to a dictionary.") -MSG_DEF(MSG_OVERLOAD_RESOLUTION_FAILED, 3, "Argument {0} is not valid for any of the {1}-argument overloads of {2}.") -MSG_DEF(MSG_GLOBAL_NOT_NATIVE, 0, "Global is not a native object.") -MSG_DEF(MSG_ENCODING_NOT_SUPPORTED, 1, "The given encoding '{0}' is not supported.") -MSG_DEF(MSG_DOM_ENCODING_NOT_UTF, 0, "The encoding must be utf-8, utf-16, or utf-16be.") -MSG_DEF(MSG_NOT_FINITE, 1, "{0} is not a finite floating-point value.") -MSG_DEF(MSG_INVALID_VERSION, 0, "0 (Zero) is not a valid database version.") -MSG_DEF(MSG_INVALID_BYTESTRING, 2, "Cannot convert string to ByteString because the character" +MSG_DEF(MSG_INVALID_ENUM_VALUE, 3, JSEXN_TYPEERR, "{0} '{1}' is not a valid value for enumeration {2}.") +MSG_DEF(MSG_MISSING_ARGUMENTS, 1, JSEXN_TYPEERR, "Not enough arguments to {0}.") +MSG_DEF(MSG_NOT_OBJECT, 1, JSEXN_TYPEERR, "{0} is not an object.") +MSG_DEF(MSG_NOT_CALLABLE, 1, JSEXN_TYPEERR, "{0} is not callable.") +MSG_DEF(MSG_DOES_NOT_IMPLEMENT_INTERFACE, 2, JSEXN_TYPEERR, "{0} does not implement interface {1}.") +MSG_DEF(MSG_METHOD_THIS_DOES_NOT_IMPLEMENT_INTERFACE, 2, JSEXN_TYPEERR, "'{0}' called on an object that does not implement interface {1}.") +MSG_DEF(MSG_METHOD_THIS_UNWRAPPING_DENIED, 1, JSEXN_TYPEERR, "Permission to call '{0}' denied.") +MSG_DEF(MSG_GETTER_THIS_DOES_NOT_IMPLEMENT_INTERFACE, 2, JSEXN_TYPEERR, "'{0}' getter called on an object that does not implement interface {1}.") +MSG_DEF(MSG_GETTER_THIS_UNWRAPPING_DENIED, 1, JSEXN_TYPEERR, "Permission to call '{0}' getter denied.") +MSG_DEF(MSG_SETTER_THIS_DOES_NOT_IMPLEMENT_INTERFACE, 2, JSEXN_TYPEERR, "'{0}' setter called on an object that does not implement interface {1}.") +MSG_DEF(MSG_SETTER_THIS_UNWRAPPING_DENIED, 1, JSEXN_TYPEERR, "Permission to call '{0}' setter denied.") +MSG_DEF(MSG_THIS_DOES_NOT_IMPLEMENT_INTERFACE, 1, JSEXN_TYPEERR, "\"this\" object does not implement interface {0}.") +MSG_DEF(MSG_NOT_IN_UNION, 2, JSEXN_TYPEERR, "{0} could not be converted to any of: {1}.") +MSG_DEF(MSG_ILLEGAL_CONSTRUCTOR, 0, JSEXN_TYPEERR, "Illegal constructor.") +MSG_DEF(MSG_CONSTRUCTOR_WITHOUT_NEW, 1, JSEXN_TYPEERR, "Constructor {0} requires 'new'") +MSG_DEF(MSG_NO_INDEXED_SETTER, 1, JSEXN_TYPEERR, "{0} doesn't have an indexed property setter.") +MSG_DEF(MSG_NO_NAMED_SETTER, 1, JSEXN_TYPEERR, "{0} doesn't have a named property setter.") +MSG_DEF(MSG_ENFORCE_RANGE_NON_FINITE, 1, JSEXN_TYPEERR, "Non-finite value is out of range for {0}.") +MSG_DEF(MSG_ENFORCE_RANGE_OUT_OF_RANGE, 1, JSEXN_TYPEERR, "Value is out of range for {0}.") +MSG_DEF(MSG_NOT_SEQUENCE, 1, JSEXN_TYPEERR, "{0} can't be converted to a sequence.") +MSG_DEF(MSG_NOT_DICTIONARY, 1, JSEXN_TYPEERR, "{0} can't be converted to a dictionary.") +MSG_DEF(MSG_OVERLOAD_RESOLUTION_FAILED, 3, JSEXN_TYPEERR, "Argument {0} is not valid for any of the {1}-argument overloads of {2}.") +MSG_DEF(MSG_GLOBAL_NOT_NATIVE, 0, JSEXN_TYPEERR, "Global is not a native object.") +MSG_DEF(MSG_ENCODING_NOT_SUPPORTED, 1, JSEXN_RANGEERR, "The given encoding '{0}' is not supported.") +MSG_DEF(MSG_DOM_ENCODING_NOT_UTF, 0, JSEXN_RANGEERR, "The encoding must be utf-8, utf-16, or utf-16be.") +MSG_DEF(MSG_DOM_DECODING_FAILED, 0, JSEXN_TYPEERR, "Decoding failed.") +MSG_DEF(MSG_NOT_FINITE, 1, JSEXN_TYPEERR, "{0} is not a finite floating-point value.") +MSG_DEF(MSG_INVALID_VERSION, 0, JSEXN_TYPEERR, "0 (Zero) is not a valid database version.") +MSG_DEF(MSG_INVALID_BYTESTRING, 2, JSEXN_TYPEERR, "Cannot convert string to ByteString because the character" " at index {0} has value {1} which is greater than 255.") -MSG_DEF(MSG_NOT_DATE, 1, "{0} is not a date.") -MSG_DEF(MSG_INVALID_ADVANCE_COUNT, 0, "0 (Zero) is not a valid advance count.") -MSG_DEF(MSG_DEFINEPROPERTY_ON_GSP, 0, "Not allowed to define a property on the named properties object.") -MSG_DEF(MSG_INVALID_URL, 1, "{0} is not a valid URL.") -MSG_DEF(MSG_METADATA_NOT_CONFIGURED, 0, "Either size or lastModified should be true.") -MSG_DEF(MSG_INVALID_READ_SIZE, 0, "0 (Zero) is not a valid read size.") -MSG_DEF(MSG_HEADERS_IMMUTABLE, 0, "Headers are immutable and cannot be modified.") -MSG_DEF(MSG_INVALID_HEADER_NAME, 1, "{0} is an invalid header name.") -MSG_DEF(MSG_INVALID_HEADER_VALUE, 1, "{0} is an invalid header value.") -MSG_DEF(MSG_INVALID_HEADER_SEQUENCE, 0, "Headers require name/value tuples when being initialized by a sequence.") -MSG_DEF(MSG_PERMISSION_DENIED_TO_PASS_ARG, 1, "Permission denied to pass cross-origin object as {0}.") -MSG_DEF(MSG_MISSING_REQUIRED_DICTIONARY_MEMBER, 1, "Missing required {0}.") -MSG_DEF(MSG_INVALID_REQUEST_METHOD, 1, "Invalid request method {0}.") -MSG_DEF(MSG_REQUEST_BODY_CONSUMED_ERROR, 0, "Request body has already been consumed.") -MSG_DEF(MSG_RESPONSE_INVALID_STATUSTEXT_ERROR, 0, "Response statusText may not contain newline or carriage return.") -MSG_DEF(MSG_FETCH_FAILED, 0, "NetworkError when attempting to fetch resource.") -MSG_DEF(MSG_NO_BODY_ALLOWED_FOR_GET_AND_HEAD, 0, "HEAD or GET Request cannot have a body.") -MSG_DEF(MSG_DEFINE_NON_CONFIGURABLE_PROP_ON_WINDOW, 0, "Not allowed to define a non-configurable property on the WindowProxy object") +MSG_DEF(MSG_NOT_DATE, 1, JSEXN_TYPEERR, "{0} is not a date.") +MSG_DEF(MSG_INVALID_ADVANCE_COUNT, 0, JSEXN_TYPEERR, "0 (Zero) is not a valid advance count.") +MSG_DEF(MSG_DEFINEPROPERTY_ON_GSP, 0, JSEXN_TYPEERR, "Not allowed to define a property on the named properties object.") +MSG_DEF(MSG_INVALID_URL, 1, JSEXN_TYPEERR, "{0} is not a valid URL.") +MSG_DEF(MSG_METADATA_NOT_CONFIGURED, 0, JSEXN_TYPEERR, "Either size or lastModified should be true.") +MSG_DEF(MSG_INVALID_READ_SIZE, 0, JSEXN_TYPEERR, "0 (Zero) is not a valid read size.") +MSG_DEF(MSG_HEADERS_IMMUTABLE, 0, JSEXN_TYPEERR, "Headers are immutable and cannot be modified.") +MSG_DEF(MSG_INVALID_HEADER_NAME, 1, JSEXN_TYPEERR, "{0} is an invalid header name.") +MSG_DEF(MSG_INVALID_HEADER_VALUE, 1, JSEXN_TYPEERR, "{0} is an invalid header value.") +MSG_DEF(MSG_INVALID_HEADER_SEQUENCE, 0, JSEXN_TYPEERR, "Headers require name/value tuples when being initialized by a sequence.") +MSG_DEF(MSG_PERMISSION_DENIED_TO_PASS_ARG, 1, JSEXN_TYPEERR, "Permission denied to pass cross-origin object as {0}.") +MSG_DEF(MSG_MISSING_REQUIRED_DICTIONARY_MEMBER, 1, JSEXN_TYPEERR, "Missing required {0}.") +MSG_DEF(MSG_INVALID_REQUEST_METHOD, 1, JSEXN_TYPEERR, "Invalid request method {0}.") +MSG_DEF(MSG_REQUEST_BODY_CONSUMED_ERROR, 0, JSEXN_TYPEERR, "Request body has already been consumed.") +MSG_DEF(MSG_RESPONSE_INVALID_STATUSTEXT_ERROR, 0, JSEXN_TYPEERR, "Response statusText may not contain newline or carriage return.") +MSG_DEF(MSG_FETCH_FAILED, 0, JSEXN_TYPEERR, "NetworkError when attempting to fetch resource.") +MSG_DEF(MSG_NO_BODY_ALLOWED_FOR_GET_AND_HEAD, 0, JSEXN_TYPEERR, "HEAD or GET Request cannot have a body.") +MSG_DEF(MSG_DEFINE_NON_CONFIGURABLE_PROP_ON_WINDOW, 0, JSEXN_TYPEERR, "Not allowed to define a non-configurable property on the WindowProxy object") +MSG_DEF(MSG_INVALID_ZOOMANDPAN_VALUE_ERROR, 0, JSEXN_RANGEERR, "Invalid zoom and pan value.") +MSG_DEF(MSG_INVALID_TRANSFORM_ANGLE_ERROR, 0, JSEXN_RANGEERR, "Invalid transform angle.") +MSG_DEF(MSG_INVALID_RESPONSE_STATUSCODE_ERROR, 0, JSEXN_RANGEERR, "Invalid response status code.") +MSG_DEF(MSG_INVALID_REDIRECT_STATUSCODE_ERROR, 0, JSEXN_RANGEERR, "Invalid redirect status code.") diff --git a/dom/encoding/TextDecoder.cpp b/dom/encoding/TextDecoder.cpp index 25a5ea97d888..b0984588b6d5 100644 --- a/dom/encoding/TextDecoder.cpp +++ b/dom/encoding/TextDecoder.cpp @@ -20,11 +20,12 @@ TextDecoder::Init(const nsAString& aLabel, const bool aFatal, { nsAutoCString encoding; // Let encoding be the result of getting an encoding from label. - // If encoding is failure or replacement, throw a TypeError. + // If encoding is failure or replacement, throw a RangeError + // (https://encoding.spec.whatwg.org/#dom-textdecoder). if (!EncodingUtils::FindEncodingForLabelNoReplacement(aLabel, encoding)) { nsAutoString label(aLabel); EncodingUtils::TrimSpaceCharacters(label); - aRv.ThrowTypeError(MSG_ENCODING_NOT_SUPPORTED, &label); + aRv.ThrowRangeError(MSG_ENCODING_NOT_SUPPORTED, &label); return; } InitWithEncoding(encoding, aFatal); @@ -81,7 +82,7 @@ TextDecoder::Decode(const char* aInput, const int32_t aLength, mDecoder->Reset(); if (rv == NS_OK_UDEC_MOREINPUT) { if (mFatal) { - aRv.Throw(NS_ERROR_DOM_ENCODING_DECODE_ERR); + aRv.ThrowTypeError(MSG_DOM_DECODING_FAILED); } else { // Need to emit a decode error manually // to simulate the EOF handling of the Encoding spec. @@ -91,7 +92,7 @@ TextDecoder::Decode(const char* aInput, const int32_t aLength, } if (NS_FAILED(rv)) { - aRv.Throw(NS_ERROR_DOM_ENCODING_DECODE_ERR); + aRv.ThrowTypeError(MSG_DOM_DECODING_FAILED); } } diff --git a/dom/encoding/TextEncoder.cpp b/dom/encoding/TextEncoder.cpp index ae7ff4b7706e..d02f149c6d4f 100644 --- a/dom/encoding/TextEncoder.cpp +++ b/dom/encoding/TextEncoder.cpp @@ -18,16 +18,16 @@ TextEncoder::Init(const nsAString& aEncoding, ErrorResult& aRv) // Let encoding be the result of getting an encoding from label. // If encoding is failure, or is none of utf-8, utf-16, and utf-16be, - // throw a TypeError. + // throw a RangeError (https://encoding.spec.whatwg.org/#dom-textencoder). if (!EncodingUtils::FindEncodingForLabel(label, mEncoding)) { - aRv.ThrowTypeError(MSG_ENCODING_NOT_SUPPORTED, &label); + aRv.ThrowRangeError(MSG_ENCODING_NOT_SUPPORTED, &label); return; } if (!mEncoding.EqualsLiteral("UTF-8") && !mEncoding.EqualsLiteral("UTF-16LE") && !mEncoding.EqualsLiteral("UTF-16BE")) { - aRv.ThrowTypeError(MSG_DOM_ENCODING_NOT_UTF); + aRv.ThrowRangeError(MSG_DOM_ENCODING_NOT_UTF); return; } diff --git a/dom/encoding/test/test_BOMEncoding.js b/dom/encoding/test/test_BOMEncoding.js index 27425d9d9266..8f29e16ce568 100644 --- a/dom/encoding/test/test_BOMEncoding.js +++ b/dom/encoding/test/test_BOMEncoding.js @@ -35,7 +35,7 @@ function testBOMEncodingUTF8() { // test valid encoding provided with invalid byte OM also provided. data = [0xFF, 0xFE, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27]; - testBOMCharset({encoding: "utf-8", fatal: true, data: data, error: "EncodingError", + testBOMCharset({encoding: "utf-8", fatal: true, data: data, error: "TypeError", msg: "valid utf-8 encoding provided with invalid utf-8 fatal BOM test."}); // test valid encoding provided with invalid byte OM also provided. @@ -46,7 +46,7 @@ function testBOMEncodingUTF8() { // test empty encoding provided with invalid byte OM also provided. data = [0xFF, 0xFE, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27]; - testBOMCharset({encoding: "", data: data, error: "TypeError", + testBOMCharset({encoding: "", data: data, error: "RangeError", msg: "empty encoding provided with invalid utf-8 BOM test."}); } @@ -88,7 +88,7 @@ function testMoreBOMEncoding() { // Testing user provided encoding is UTF-8 & bom encoding is utf-16be data = [0xFE, 0xFF, 0x22, 0xd0, 0x92, 0xd1, 0x81, 0xd0, 0xb5, 0x20, 0xd1, 0x81, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xb2, 0xd1, 0x8b, 0xd0, 0xb5, 0x20, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, 0xbc, 0xd1, 0x8c, 0xd0, 0xb8, 0x20, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x85, 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xb8, 0x20, 0xd0, 0xb4, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xb3, 0x20, 0xd0, 0xbd, 0xd0, 0xb0, 0x20, 0xd0, 0xb4, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, 0xb0, 0x2c, 0x20, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xb6, 0xd0, 0xb4, 0xd0, 0xb0, 0xd1, 0x8f, 0x20, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xb2, 0xd0, 0xb0, 0xd1, 0x8f, 0x20, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, 0xbc, 0xd1, 0x8c, 0xd1, 0x8f, 0x20, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xb2, 0xd0, 0xb0, 0x20, 0xd0, 0xbf, 0xd0, 0xbe, 0x2d, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xbc, 0xd1, 0x83, 0x2e, 0x22]; - testBOMCharset({encoding: "utf-8", fatal: true, data: data, error: "EncodingError", + testBOMCharset({encoding: "utf-8", fatal: true, data: data, error: "TypeError", msg: "test decoder invalid BOM encoding for valid utf-8 fatal provided label."}); testBOMCharset({encoding: "utf-8", data: data, expected: "\ufffd\ufffd" + expectedString, @@ -104,7 +104,7 @@ function testMoreBOMEncoding() { + "\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF" + "\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE"; - testBOMCharset({encoding: "greek", fatal: true, data: data, error: "EncodingError", + testBOMCharset({encoding: "greek", fatal: true, data: data, error: "TypeError", msg: "test decoder encoding provided with invalid BOM encoding for greek."}); testBOMCharset({encoding: "greek", data: data, expected: expectedString, diff --git a/dom/encoding/test/test_TextDecoder.js b/dom/encoding/test/test_TextDecoder.js index 26b7bc459582..8d883605747d 100644 --- a/dom/encoding/test/test_TextDecoder.js +++ b/dom/encoding/test/test_TextDecoder.js @@ -68,25 +68,38 @@ function testConstructorFatalOption(data, expectedString) function testConstructorEncodingOption(aData, aExpectedString) { + function errorMessage(encoding) { + return `The given encoding '${String(encoding).trim()}' is not supported.`; + } + // valid encoding passed - testCharset({encoding: "iso-8859-11", input: aData, expected: aExpectedString, + var encoding = "iso-8859-11"; + testCharset({encoding: encoding, input: aData, expected: aExpectedString, msg: "decoder testing constructor valid encoding."}); - // invalid encoding passed - testCharset({encoding: "asdfasdf", input: aData, error: "TypeError", - msg: "constructor encoding, invalid encoding test."}); - // passing spaces for encoding - testCharset({encoding: " ", input: aData, error: "TypeError", + encoding = " "; + testCharset({encoding: encoding, input: aData, error: "RangeError", + errorMessage: errorMessage(encoding), msg: "constructor encoding, spaces encoding test."}); - // passing null for encoding - testCharset({encoding: null, input: aData, error: "TypeError", + // invalid encoding passed + encoding = "asdfasdf"; + testCharset({encoding: encoding, input: aData, error: "RangeError", + errorMessage: errorMessage(encoding), + msg: "constructor encoding, invalid encoding test."}); + + // null encoding passed + encoding = null; + testCharset({encoding: encoding, input: aData, error: "RangeError", + errorMessage: errorMessage(encoding), msg: "constructor encoding, \"null\" encoding test."}); // empty encoding passed - testCharset({encoding: "", input: aData, error: "TypeError", - msg: "constuctor encoding, empty encoding test."}); + encoding = ""; + testCharset({encoding: encoding, input: aData, error: "RangeError", + errorMessage: errorMessage(encoding), + msg: "constructor encoding, empty encoding test."}); // replacement character test aExpectedString = "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" @@ -170,8 +183,8 @@ function testDecodeStreamOption(data, expectedString) ], msg: "decode() stream test utf-8."}); testCharset({encoding: "utf-8", fatal: true, array: [ - {input: [0xC2], error: "EncodingError"}, - {input: [0x80], error: "EncodingError"}, + {input: [0xC2], error: "TypeError"}, + {input: [0x80], error: "TypeError"}, ], msg: "decode() stream test utf-8 fatal."}); } @@ -351,7 +364,7 @@ function testDecoderGetEncoding() {encoding: "utf-16le", labels: ["utf-16", "utf-16le"]}, {encoding: "utf-16be", labels: ["utf-16be"]}, {encoding: "x-user-defined", labels: ["x-user-defined"]}, - {error: "TypeError", labels: ["x-windows-949", "\u0130SO-8859-1", "csiso2022kr", "iso-2022-kr", "iso-2022-cn", "iso-2022-cn-ext", "replacement", "hz-gb-2312"]}, + {error: "RangeError", labels: ["x-windows-949", "\u0130SO-8859-1", "csiso2022kr", "iso-2022-kr", "iso-2022-cn", "iso-2022-cn-ext", "replacement", "hz-gb-2312"]}, ]; for (var le of labelEncodings) { @@ -376,6 +389,9 @@ function testCharset(test) var decoder = new TextDecoder(test.encoding, fatal); } catch (e) { assert_equals(e.name, test.error, test.msg + " error thrown from the constructor."); + if (test.errorMessage) { + assert_equals(e.message, test.errorMessage, test.msg + " error thrown from the constructor."); + } return; } @@ -439,7 +455,7 @@ function testInvalid2022JP() // decode() should never throw unless {fatal: true} is specified (new TextDecoder("iso-2022-jp")).decode(new Uint8Array(input)); } catch (e) { - if (e.name !== "EncodingError") { + if (e.name !== "TypeError") { throw e; } failureCount++; diff --git a/dom/encoding/test/test_TextEncoder.js b/dom/encoding/test/test_TextEncoder.js index cfd2cb311e1b..6ecba52ef348 100644 --- a/dom/encoding/test/test_TextEncoder.js +++ b/dom/encoding/test/test_TextEncoder.js @@ -90,31 +90,44 @@ function testEncodeUTF16ToUTF16() function testConstructorEncodingOption(aData, aExpectedString) { + function errorMessage(encoding) { + return `The given encoding '${String(encoding).trim()}' is not supported.`; + } + // valid encoding passed - testSingleString({encoding: "UTF-8", input: aData, expected: aExpectedString, + var encoding = "UTF-8"; + testSingleString({encoding: encoding, input: aData, expected: aExpectedString, msg: "testing encoding with valid utf-8 encoding."}); // passing spaces for encoding - testSingleString({encoding: " ", input: aData, error: "TypeError", + encoding = " "; + testSingleString({encoding: encoding, input: aData, error: "RangeError", + errorMessage: errorMessage(encoding), msg: "constructor encoding, spaces encoding test."}); // invalid encoding passed - testSingleString({encoding: "asdfasdf", input: aData, error: "TypeError", + encoding = "asdfasdf"; + testSingleString({encoding: encoding, input: aData, error: "RangeError", + errorMessage: errorMessage(encoding), msg: "constructor encoding, invalid encoding test."}); // null encoding passed - testSingleString({encoding: null, input: aData, error: "TypeError", + encoding = null; + testSingleString({encoding: encoding, input: aData, error: "RangeError", + errorMessage: errorMessage(encoding), msg: "constructor encoding, \"null\" encoding test."}); - // null encoding passed - testSingleString({encoding: "", input: aData, error: "TypeError", + // empty encoding passed + encoding = ""; + testSingleString({encoding: encoding, input: aData, error: "RangeError", + errorMessage: errorMessage(encoding), msg: "constructor encoding, empty encoding test."}); } function testEncodingValues(aData, aExpectedString) { var encoding = "ISO-8859-11"; - testSingleString({encoding: aData, input: encoding, error: "TypeError", + testSingleString({encoding: aData, input: encoding, error: "RangeError", msg: "encoder encoding values test."}); } @@ -136,7 +149,10 @@ function testSingleString(test) var stream = test.stream ? {stream: true} : null; outText = (new TextEncoder(test.encoding)).encode(test.input, stream); } catch (e) { - assert_equals(e.name, test.error, test.msg); + assert_equals(e.name, test.error, test.msg + " error thrown from the constructor."); + if (test.errorMessage) { + assert_equals(e.message, test.errorMessage, test.msg + " error thrown from the constructor."); + } return; } assert_true(!test.error, test.msg); diff --git a/dom/encoding/test/unit/test_misc.js b/dom/encoding/test/unit/test_misc.js index e7f8a5201911..bb79c34c72cb 100644 --- a/dom/encoding/test/unit/test_misc.js +++ b/dom/encoding/test/unit/test_misc.js @@ -43,7 +43,7 @@ test( bad.forEach( function(t) { - assert_throws({name: 'EncodingError'}, function () { + assert_throws({name: 'TypeError'}, function () { new TextDecoder(t.encoding, {fatal: true}).decode(new Uint8Array(t.input)); }); }); @@ -186,15 +186,15 @@ test( test( function () { - assert_throws({name: 'EncodingError'}, function() { new TextDecoder("utf-8", {fatal: true}).decode(new Uint8Array([0xff])); }); + assert_throws({name: 'TypeError'}, function() { new TextDecoder("utf-8", {fatal: true}).decode(new Uint8Array([0xff])); }); // This should not hang: new TextDecoder("utf-8").decode(new Uint8Array([0xff])); - assert_throws({name: 'EncodingError'}, function() { new TextDecoder("utf-16", {fatal: true}).decode(new Uint8Array([0x00])); }); + assert_throws({name: 'TypeError'}, function() { new TextDecoder("utf-16", {fatal: true}).decode(new Uint8Array([0x00])); }); // This should not hang: new TextDecoder("utf-16").decode(new Uint8Array([0x00])); - assert_throws({name: 'EncodingError'}, function() { new TextDecoder("utf-16be", {fatal: true}).decode(new Uint8Array([0x00])); }); + assert_throws({name: 'TypeError'}, function() { new TextDecoder("utf-16be", {fatal: true}).decode(new Uint8Array([0x00])); }); // This should not hang: new TextDecoder("utf-16be").decode(new Uint8Array([0x00])); }, @@ -215,7 +215,7 @@ test( legacy_encodings.forEach(function(encoding) { assert_equals(new TextDecoder(encoding).encoding, encoding); - assert_throws({name: 'TypeError'}, function() { new TextEncoder(encoding); }); + assert_throws({name: 'RangeError'}, function() { new TextEncoder(encoding); }); }); }, "Non-UTF encodings supported only for decode, not encode" diff --git a/dom/fetch/Response.cpp b/dom/fetch/Response.cpp index 31661fe1bec3..5be922d72a27 100644 --- a/dom/fetch/Response.cpp +++ b/dom/fetch/Response.cpp @@ -95,7 +95,7 @@ Response::Redirect(const GlobalObject& aGlobal, const nsAString& aUrl, } if (aStatus != 301 && aStatus != 302 && aStatus != 303 && aStatus != 307 && aStatus != 308) { - aRv.Throw(NS_ERROR_RANGE_ERR); + aRv.ThrowRangeError(MSG_INVALID_REDIRECT_STATUSCODE_ERROR); return nullptr; } @@ -122,7 +122,7 @@ Response::Constructor(const GlobalObject& aGlobal, const ResponseInit& aInit, ErrorResult& aRv) { if (aInit.mStatus < 200 || aInit.mStatus > 599) { - aRv.Throw(NS_ERROR_RANGE_ERR); + aRv.ThrowRangeError(MSG_INVALID_RESPONSE_STATUSCODE_ERROR); return nullptr; } diff --git a/dom/svg/SVGSVGElement.cpp b/dom/svg/SVGSVGElement.cpp index 0765e606a6b4..9962c6367588 100644 --- a/dom/svg/SVGSVGElement.cpp +++ b/dom/svg/SVGSVGElement.cpp @@ -471,7 +471,7 @@ SVGSVGElement::SetZoomAndPan(uint16_t aZoomAndPan, ErrorResult& rv) return; } - rv.Throw(NS_ERROR_RANGE_ERR); + rv.ThrowRangeError(MSG_INVALID_ZOOMANDPAN_VALUE_ERROR, &aZoomAndPan); } //---------------------------------------------------------------------- diff --git a/dom/svg/SVGTransform.cpp b/dom/svg/SVGTransform.cpp index 2cc76219eef6..25444abbdd24 100644 --- a/dom/svg/SVGTransform.cpp +++ b/dom/svg/SVGTransform.cpp @@ -260,7 +260,7 @@ SVGTransform::SetSkewX(float angle, ErrorResult& rv) } if (!IsFinite(tan(angle * kRadPerDegree))) { - rv.Throw(NS_ERROR_RANGE_ERR); + rv.ThrowRangeError(MSG_INVALID_TRANSFORM_ANGLE_ERROR); return; } @@ -283,7 +283,7 @@ SVGTransform::SetSkewY(float angle, ErrorResult& rv) } if (!IsFinite(tan(angle * kRadPerDegree))) { - rv.Throw(NS_ERROR_RANGE_ERR); + rv.ThrowRangeError(MSG_INVALID_TRANSFORM_ANGLE_ERROR); return; } diff --git a/dom/svg/SVGViewElement.cpp b/dom/svg/SVGViewElement.cpp index 31528a235bda..288e87e1cfcc 100644 --- a/dom/svg/SVGViewElement.cpp +++ b/dom/svg/SVGViewElement.cpp @@ -59,7 +59,7 @@ SVGViewElement::SetZoomAndPan(uint16_t aZoomAndPan, ErrorResult& rv) return; } - rv.Throw(NS_ERROR_RANGE_ERR); + rv.ThrowRangeError(MSG_INVALID_ZOOMANDPAN_VALUE_ERROR); } //---------------------------------------------------------------------- diff --git a/testing/web-platform/meta/encoding/api-replacement-encodings.html.ini b/testing/web-platform/meta/encoding/api-replacement-encodings.html.ini deleted file mode 100644 index 94c7203d3c25..000000000000 --- a/testing/web-platform/meta/encoding/api-replacement-encodings.html.ini +++ /dev/null @@ -1,20 +0,0 @@ -[api-replacement-encodings.html] - type: testharness - [The "replacement" label should not be a known encoding.] - expected: FAIL - - [Label for "replacement" should be rejected by API: csiso2022kr] - expected: FAIL - - [Label for "replacement" should be rejected by API: hz-gb-2312] - expected: FAIL - - [Label for "replacement" should be rejected by API: iso-2022-cn] - expected: FAIL - - [Label for "replacement" should be rejected by API: iso-2022-cn-ext] - expected: FAIL - - [Label for "replacement" should be rejected by API: iso-2022-kr] - expected: FAIL - diff --git a/testing/web-platform/meta/encoding/textdecoder-fatal-streaming.html.ini b/testing/web-platform/meta/encoding/textdecoder-fatal-streaming.html.ini deleted file mode 100644 index 5491e6cad84e..000000000000 --- a/testing/web-platform/meta/encoding/textdecoder-fatal-streaming.html.ini +++ /dev/null @@ -1,8 +0,0 @@ -[textdecoder-fatal-streaming.html] - type: testharness - [Fatal flag, non-streaming cases] - expected: FAIL - - [Fatal flag, streaming cases] - expected: FAIL - diff --git a/testing/web-platform/meta/encoding/textdecoder-fatal.html.ini b/testing/web-platform/meta/encoding/textdecoder-fatal.html.ini deleted file mode 100644 index d21c7758af82..000000000000 --- a/testing/web-platform/meta/encoding/textdecoder-fatal.html.ini +++ /dev/null @@ -1,104 +0,0 @@ -[textdecoder-fatal.html] - type: testharness - [Fatal flag: utf-8 - invalid code] - expected: FAIL - - [Fatal flag: utf-8 - ends early] - expected: FAIL - - [Fatal flag: utf-8 - ends early 2] - expected: FAIL - - [Fatal flag: utf-8 - invalid trail] - expected: FAIL - - [Fatal flag: utf-8 - invalid trail 2] - expected: FAIL - - [Fatal flag: utf-8 - invalid trail 3] - expected: FAIL - - [Fatal flag: utf-8 - invalid trail 4] - expected: FAIL - - [Fatal flag: utf-8 - invalid trail 5] - expected: FAIL - - [Fatal flag: utf-8 - invalid trail 6] - expected: FAIL - - [Fatal flag: utf-8 - > 0x10FFFF] - expected: FAIL - - [Fatal flag: utf-8 - obsolete lead byte] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+0000 - 2 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+0000 - 3 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+0000 - 4 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+0000 - 5 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+0000 - 6 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+007F - 2 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+007F - 3 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+007F - 4 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+007F - 5 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+007F - 6 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+07FF - 3 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+07FF - 4 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+07FF - 5 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+07FF - 6 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+FFFF - 4 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+FFFF - 5 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+FFFF - 6 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+10FFFF - 5 bytes] - expected: FAIL - - [Fatal flag: utf-8 - overlong U+10FFFF - 6 bytes] - expected: FAIL - - [Fatal flag: utf-8 - lead surrogate] - expected: FAIL - - [Fatal flag: utf-8 - trail surrogate] - expected: FAIL - - [Fatal flag: utf-8 - surrogate pair] - expected: FAIL - - [Fatal flag: utf-16le - truncated code unit] - expected: FAIL - diff --git a/testing/web-platform/meta/encoding/textdecoder-utf16-surrogates.html.ini b/testing/web-platform/meta/encoding/textdecoder-utf16-surrogates.html.ini deleted file mode 100644 index 6ef2ec1941b0..000000000000 --- a/testing/web-platform/meta/encoding/textdecoder-utf16-surrogates.html.ini +++ /dev/null @@ -1,17 +0,0 @@ -[textdecoder-utf16-surrogates.html] - type: testharness - [utf-16le - lone surrogate lead (fatal flag set)] - expected: FAIL - - [utf-16le - lone surrogate trail (fatal flag set)] - expected: FAIL - - [utf-16le - unmatched surrogate lead (fatal flag set)] - expected: FAIL - - [utf-16le - unmatched surrogate trail (fatal flag set)] - expected: FAIL - - [utf-16le - swapped surrogate pair (fatal flag set)] - expected: FAIL - diff --git a/testing/web-platform/meta/encoding/textencoder-constructor-non-utf.html.ini b/testing/web-platform/meta/encoding/textencoder-constructor-non-utf.html.ini deleted file mode 100644 index e496e06f1bd9..000000000000 --- a/testing/web-platform/meta/encoding/textencoder-constructor-non-utf.html.ini +++ /dev/null @@ -1,110 +0,0 @@ -[textencoder-constructor-non-utf.html] - type: testharness - [Non-UTF encodings supported only for decode, not encode: ibm866] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: iso-8859-2] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: iso-8859-3] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: iso-8859-4] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: iso-8859-5] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: iso-8859-6] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: iso-8859-7] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: iso-8859-8] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: iso-8859-8-i] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: iso-8859-10] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: iso-8859-13] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: iso-8859-14] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: iso-8859-15] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: iso-8859-16] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: koi8-r] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: koi8-u] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: macintosh] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: windows-874] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: windows-1250] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: windows-1251] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: windows-1252] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: windows-1253] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: windows-1254] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: windows-1255] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: windows-1256] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: windows-1257] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: windows-1258] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: x-mac-cyrillic] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: gbk] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: gb18030] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: big5] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: euc-jp] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: iso-2022-jp] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: shift_jis] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: euc-kr] - expected: FAIL - - [Non-UTF encodings supported only for decode, not encode: x-user-defined] - expected: FAIL - diff --git a/toolkit/components/osfile/modules/osfile_shared_front.jsm b/toolkit/components/osfile/modules/osfile_shared_front.jsm index 2df5bcc43243..3e4124c87f95 100644 --- a/toolkit/components/osfile/modules/osfile_shared_front.jsm +++ b/toolkit/components/osfile/modules/osfile_shared_front.jsm @@ -337,7 +337,7 @@ AbstractFile.read = function read(path, bytes, options = {}) { let decoder; try { decoder = new TextDecoder(options.encoding); - } catch (ex if ex instanceof TypeError) { + } catch (ex if ex instanceof RangeError) { throw OS.File.Error.invalidArgument("Decode"); } return decoder.decode(buffer); diff --git a/xpcom/base/ErrorList.h b/xpcom/base/ErrorList.h index 9f5e9354d622..cf50c8039469 100644 --- a/xpcom/base/ErrorList.h +++ b/xpcom/base/ErrorList.h @@ -497,13 +497,11 @@ ERROR(NS_ERROR_RANGE_ERR, FAILURE(27)), /* StringEncoding API errors from http://wiki.whatwg.org/wiki/StringEncoding */ ERROR(NS_ERROR_DOM_ENCODING_NOT_SUPPORTED_ERR, FAILURE(28)), - ERROR(NS_ERROR_DOM_ENCODING_NOT_UTF_ERR, FAILURE(29)), - ERROR(NS_ERROR_DOM_ENCODING_DECODE_ERR, FAILURE(30)), - ERROR(NS_ERROR_DOM_INVALID_POINTER_ERR, FAILURE(31)), + ERROR(NS_ERROR_DOM_INVALID_POINTER_ERR, FAILURE(29)), /* WebCrypto API errors from http://www.w3.org/TR/WebCryptoAPI/ */ - ERROR(NS_ERROR_DOM_UNKNOWN_ERR, FAILURE(32)), - ERROR(NS_ERROR_DOM_DATA_ERR, FAILURE(33)), - ERROR(NS_ERROR_DOM_OPERATION_ERR, FAILURE(34)), + ERROR(NS_ERROR_DOM_UNKNOWN_ERR, FAILURE(30)), + ERROR(NS_ERROR_DOM_DATA_ERR, FAILURE(31)), + ERROR(NS_ERROR_DOM_OPERATION_ERR, FAILURE(32)), /* DOM error codes defined by us */ ERROR(NS_ERROR_DOM_SECMAN_ERR, FAILURE(1001)), ERROR(NS_ERROR_DOM_WRONG_TYPE_ERR, FAILURE(1002)),