mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
- [x] our [DataClone error](d733abfca0/components/script/dom/bindings/error.rs (L80)
) needs to support an optional message - [x] we need to add support to our DOMException implementation to allow an optional message to replace the default message - [x] we need to create a new struct used by both StructuredDataReader and StructuredDataWriter for storing the error message in the report_error_callback - [x] report_error_callback needs to cast the closure pointer to the new struct - [x] the code that [throws a DataClone error](5d1c64dba9/components/script/dom/bindings/structuredclone.rs (L542)
) needs to use the stored error message if it's available Testing: *Describe how this pull request is tested or why it doesn't require tests* Fixes: #36191 --------- Signed-off-by: jerensl <54782057+jerensl@users.noreply.github.com>
94 lines
2.8 KiB
Rust
94 lines
2.8 KiB
Rust
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
|
|
use js::error::throw_type_error;
|
|
use js::jsapi::JS_IsExceptionPending;
|
|
|
|
use crate::codegen::PrototypeList::proto_id_to_name;
|
|
use crate::script_runtime::JSContext as SafeJSContext;
|
|
|
|
/// DOM exceptions that can be thrown by a native DOM method.
|
|
#[derive(Clone, Debug, MallocSizeOf)]
|
|
pub enum Error {
|
|
/// IndexSizeError DOMException
|
|
IndexSize,
|
|
/// NotFoundError DOMException
|
|
NotFound,
|
|
/// HierarchyRequestError DOMException
|
|
HierarchyRequest,
|
|
/// WrongDocumentError DOMException
|
|
WrongDocument,
|
|
/// InvalidCharacterError DOMException
|
|
InvalidCharacter,
|
|
/// NotSupportedError DOMException
|
|
NotSupported,
|
|
/// InUseAttributeError DOMException
|
|
InUseAttribute,
|
|
/// InvalidStateError DOMException
|
|
InvalidState,
|
|
/// SyntaxError DOMException
|
|
Syntax,
|
|
/// NamespaceError DOMException
|
|
Namespace,
|
|
/// InvalidAccessError DOMException
|
|
InvalidAccess,
|
|
/// SecurityError DOMException
|
|
Security,
|
|
/// NetworkError DOMException
|
|
Network,
|
|
/// AbortError DOMException
|
|
Abort,
|
|
/// TimeoutError DOMException
|
|
Timeout,
|
|
/// InvalidNodeTypeError DOMException
|
|
InvalidNodeType,
|
|
/// DataCloneError DOMException
|
|
DataClone(Option<String>),
|
|
/// NoModificationAllowedError DOMException
|
|
NoModificationAllowed,
|
|
/// QuotaExceededError DOMException
|
|
QuotaExceeded,
|
|
/// TypeMismatchError DOMException
|
|
TypeMismatch,
|
|
/// InvalidModificationError DOMException
|
|
InvalidModification,
|
|
/// NotReadableError DOMException
|
|
NotReadable,
|
|
/// DataError DOMException
|
|
Data,
|
|
/// OperationError DOMException
|
|
Operation,
|
|
|
|
/// TypeError JavaScript Error
|
|
Type(String),
|
|
/// RangeError JavaScript Error
|
|
Range(String),
|
|
|
|
/// A JavaScript exception is already pending.
|
|
JSFailed,
|
|
}
|
|
|
|
/// The return type for IDL operations that can throw DOM exceptions.
|
|
pub type Fallible<T> = Result<T, Error>;
|
|
|
|
/// The return type for IDL operations that can throw DOM exceptions and
|
|
/// return `()`.
|
|
pub type ErrorResult = Fallible<()>;
|
|
|
|
/// Throw an exception to signal that a `JSObject` can not be converted to a
|
|
/// given DOM type.
|
|
pub fn throw_invalid_this(cx: SafeJSContext, proto_id: u16) {
|
|
debug_assert!(unsafe { !JS_IsExceptionPending(*cx) });
|
|
let error = format!(
|
|
"\"this\" object does not implement interface {}.",
|
|
proto_id_to_name(proto_id)
|
|
);
|
|
unsafe { throw_type_error(*cx, &error) };
|
|
}
|
|
|
|
pub fn throw_constructor_without_new(cx: SafeJSContext, name: &str) {
|
|
debug_assert!(unsafe { !JS_IsExceptionPending(*cx) });
|
|
let error = format!("{} constructor: 'new' is required", name);
|
|
unsafe { throw_type_error(*cx, &error) };
|
|
}
|