diff --git a/components/script/dom/bindings/error.rs b/components/script/dom/bindings/error.rs index d224fac3a72..86bf36b65f0 100644 --- a/components/script/dom/bindings/error.rs +++ b/components/script/dom/bindings/error.rs @@ -99,9 +99,18 @@ pub(crate) fn create_dom_exception( result: Error, can_gc: CanGc, ) -> Result, JsEngineError> { + let new_custom_exception = |error_name, message| { + Ok(DOMException::new_with_custom_message( + global, error_name, message, can_gc, + )) + }; + let code = match result { Error::IndexSize => DOMErrorName::IndexSizeError, - Error::NotFound => DOMErrorName::NotFoundError, + Error::NotFound(Some(custom_message)) => { + return new_custom_exception(DOMErrorName::NotFoundError, custom_message); + }, + Error::NotFound(None) => DOMErrorName::NotFoundError, Error::HierarchyRequest => DOMErrorName::HierarchyRequestError, Error::WrongDocument => DOMErrorName::WrongDocumentError, Error::InvalidCharacter => DOMErrorName::InvalidCharacterError, @@ -109,12 +118,7 @@ pub(crate) fn create_dom_exception( Error::InUseAttribute => DOMErrorName::InUseAttributeError, Error::InvalidState => DOMErrorName::InvalidStateError, Error::Syntax(Some(custom_message)) => { - return Ok(DOMException::new_with_custom_message( - global, - DOMErrorName::SyntaxError, - custom_message, - can_gc, - )); + return new_custom_exception(DOMErrorName::SyntaxError, custom_message); }, Error::Syntax(None) => DOMErrorName::SyntaxError, Error::Namespace => DOMErrorName::NamespaceError, @@ -125,12 +129,7 @@ pub(crate) fn create_dom_exception( Error::Timeout => DOMErrorName::TimeoutError, Error::InvalidNodeType => DOMErrorName::InvalidNodeTypeError, Error::DataClone(Some(custom_message)) => { - return Ok(DOMException::new_with_custom_message( - global, - DOMErrorName::DataCloneError, - custom_message, - can_gc, - )); + return new_custom_exception(DOMErrorName::DataCloneError, custom_message); }, Error::DataClone(None) => DOMErrorName::DataCloneError, Error::Data => DOMErrorName::DataError, diff --git a/components/script/dom/bluetooth/bluetooth.rs b/components/script/dom/bluetooth/bluetooth.rs index 90b53d5bf52..0a1a03a63c9 100644 --- a/components/script/dom/bluetooth/bluetooth.rs +++ b/components/script/dom/bluetooth/bluetooth.rs @@ -230,7 +230,7 @@ impl Bluetooth { if let PermissionState::Denied = descriptor_permission_state(PermissionName::Bluetooth, None) { - return p.reject_error(Error::NotFound, can_gc); + return p.reject_error(Error::NotFound(None), can_gc); } // Note: Step 3, 6 - 8 are implemented in @@ -530,7 +530,7 @@ impl Convert for BluetoothError { match self { BluetoothError::Type(message) => Error::Type(message), BluetoothError::Network => Error::Network, - BluetoothError::NotFound => Error::NotFound, + BluetoothError::NotFound => Error::NotFound(None), BluetoothError::NotSupported => Error::NotSupported, BluetoothError::Security => Error::Security, BluetoothError::InvalidState => Error::InvalidState, diff --git a/components/script/dom/clipboard.rs b/components/script/dom/clipboard.rs index 25878a1b29b..07a82f6adaf 100644 --- a/components/script/dom/clipboard.rs +++ b/components/script/dom/clipboard.rs @@ -69,7 +69,7 @@ impl Callback for RepresentationDataPromiseRejectionHandler { fn callback(&self, _cx: SafeJSContext, _v: SafeHandleValue, _realm: InRealm, can_gc: CanGc) { // Reject p with "NotFoundError" DOMException in realm. // Return p. - self.promise.reject_error(Error::NotFound, can_gc); + self.promise.reject_error(Error::NotFound(None), can_gc); } } diff --git a/components/script/dom/clipboarditem.rs b/components/script/dom/clipboarditem.rs index 71df6b7abc5..d1e01078442 100644 --- a/components/script/dom/clipboarditem.rs +++ b/components/script/dom/clipboarditem.rs @@ -84,7 +84,7 @@ impl Callback for RepresentationDataPromiseRejectionHandler { /// Substeps of 8.1.2.2 If representationDataPromise was rejected, then: fn callback(&self, _cx: SafeJSContext, _v: SafeHandleValue, _realm: InRealm, can_gc: CanGc) { // 1. Reject p with "NotFoundError" DOMException in realm. - self.promise.reject_error(Error::NotFound, can_gc); + self.promise.reject_error(Error::NotFound(None), can_gc); } } @@ -299,7 +299,7 @@ impl ClipboardItemMethods for ClipboardItem { } // Step 9 Reject p with "NotFoundError" DOMException in realm. - p.reject_error(Error::NotFound, can_gc); + p.reject_error(Error::NotFound(None), can_gc); // Step 10 Return p. Ok(p) diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 7a075cece4f..9f1dd4b6515 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -3181,7 +3181,7 @@ impl ElementMethods for Element { // https://dom.spec.whatwg.org/#dom-element-removeattributenode fn RemoveAttributeNode(&self, attr: &Attr, can_gc: CanGc) -> Fallible> { self.remove_first_matching_attribute(|a| a == attr, can_gc) - .ok_or(Error::NotFound) + .ok_or(Error::NotFound(None)) } // https://dom.spec.whatwg.org/#dom-element-hasattribute diff --git a/components/script/dom/elementinternals.rs b/components/script/dom/elementinternals.rs index d1b4554e6c1..bcb35ac6907 100644 --- a/components/script/dom/elementinternals.rs +++ b/components/script/dom/elementinternals.rs @@ -294,7 +294,7 @@ impl ElementInternalsMethods for ElementInternals { .upcast::() .is_shadow_including_inclusive_ancestor_of(anchor.upcast::()) { - return Err(Error::NotFound); + return Err(Error::NotFound(None)); } anchor }, diff --git a/components/script/dom/formdata.rs b/components/script/dom/formdata.rs index a9cdcb89fc9..4108c60ab63 100644 --- a/components/script/dom/formdata.rs +++ b/components/script/dom/formdata.rs @@ -107,7 +107,7 @@ impl FormDataMethods for FormData { // Step 1.1.2. If submitter’s form owner is not form, then throw a "NotFoundError" // DOMException. if !matches!(submit_button.form_owner(), Some(owner) if *owner == *form) { - return Err(Error::NotFound); + return Err(Error::NotFound(None)); } Ok(submit_button) diff --git a/components/script/dom/html/htmlformelement.rs b/components/script/dom/html/htmlformelement.rs index 29933578821..c59a137903b 100644 --- a/components/script/dom/html/htmlformelement.rs +++ b/components/script/dom/html/htmlformelement.rs @@ -337,12 +337,12 @@ impl HTMLFormElementMethods for HTMLFormElement { let owner = match submitters_owner { Some(owner) => owner, None => { - return Err(Error::NotFound); + return Err(Error::NotFound(None)); }, }; if *owner != *self { - return Err(Error::NotFound); + return Err(Error::NotFound(None)); } submit_button diff --git a/components/script/dom/html/htmloptionscollection.rs b/components/script/dom/html/htmloptionscollection.rs index c49ce83b064..c5ca3c8506c 100644 --- a/components/script/dom/html/htmloptionscollection.rs +++ b/components/script/dom/html/htmloptionscollection.rs @@ -201,7 +201,7 @@ impl HTMLOptionsCollectionMethods for HTMLOptionsCollectio // Step 2 let before_node = before_element.upcast::(); if !root.is_ancestor_of(before_node) { - return Err(Error::NotFound); + return Err(Error::NotFound(None)); } // Step 3 diff --git a/components/script/dom/html/htmlscriptelement.rs b/components/script/dom/html/htmlscriptelement.rs index 8921dc9fa5b..d2adb5c19f9 100644 --- a/components/script/dom/html/htmlscriptelement.rs +++ b/components/script/dom/html/htmlscriptelement.rs @@ -275,7 +275,7 @@ impl ScriptOrigin { fetch_options, type_, unminified_dir, - import_map: Err(Error::NotFound), + import_map: Err(Error::NotFound(None)), } } @@ -911,7 +911,7 @@ impl HTMLScriptElement { options, script_type, self.global().unminified_js_dir(), - Err(Error::NotFound), + Err(Error::NotFound(None)), )); if was_parser_inserted && diff --git a/components/script/dom/idbdatabase.rs b/components/script/dom/idbdatabase.rs index 5fb80e22e3b..8ddc971a0e1 100644 --- a/components/script/dom/idbdatabase.rs +++ b/components/script/dom/idbdatabase.rs @@ -309,7 +309,7 @@ impl IDBDatabaseMethods for IDBDatabase { .iter() .any(|store_name| store_name.to_string() == name.to_string()) { - return Err(Error::NotFound); + return Err(Error::NotFound(None)); } // Step 5 diff --git a/components/script/dom/idbtransaction.rs b/components/script/dom/idbtransaction.rs index 3dc7a368409..8c9a4b99552 100644 --- a/components/script/dom/idbtransaction.rs +++ b/components/script/dom/idbtransaction.rs @@ -268,7 +268,7 @@ impl IDBTransactionMethods for IDBTransaction { // Step 2: Check that the object store exists if !self.object_store_names.Contains(name.clone()) { - return Err(Error::NotFound); + return Err(Error::NotFound(None)); } // Step 3: Each call to this method on the same diff --git a/components/script/dom/namednodemap.rs b/components/script/dom/namednodemap.rs index 6159bb3a797..2b84337032d 100644 --- a/components/script/dom/namednodemap.rs +++ b/components/script/dom/namednodemap.rs @@ -80,7 +80,7 @@ impl NamedNodeMapMethods for NamedNodeMap { let name = self.owner.parsed_name(name); self.owner .remove_attribute_by_name(&name, CanGc::note()) - .ok_or(Error::NotFound) + .ok_or(Error::NotFound(None)) } // https://dom.spec.whatwg.org/#dom-namednodemap-removenameditemns @@ -92,7 +92,7 @@ impl NamedNodeMapMethods for NamedNodeMap { let ns = namespace_from_domstring(namespace); self.owner .remove_attribute(&ns, &LocalName::from(local_name), CanGc::note()) - .ok_or(Error::NotFound) + .ok_or(Error::NotFound(None)) } // https://dom.spec.whatwg.org/#dom-namednodemap-item diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index d0df630a85b..b2faa3c8dfd 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -2339,7 +2339,7 @@ impl Node { // Step 3. if let Some(child) = child { if !parent.is_parent_of(child) { - return Err(Error::NotFound); + return Err(Error::NotFound(None)); } } @@ -2719,8 +2719,8 @@ impl Node { fn pre_remove(child: &Node, parent: &Node, can_gc: CanGc) -> Fallible> { // Step 1. match child.GetParentNode() { - Some(ref node) if &**node != parent => return Err(Error::NotFound), - None => return Err(Error::NotFound), + Some(ref node) if &**node != parent => return Err(Error::NotFound(None)), + None => return Err(Error::NotFound(None)), _ => (), } @@ -3485,7 +3485,7 @@ impl NodeMethods for Node { // Step 3. If child’s parent is not parent, then throw a "NotFoundError" DOMException. if !self.is_parent_of(child) { - return Err(Error::NotFound); + return Err(Error::NotFound(None)); } // Step 4. If node is not a DocumentFragment, DocumentType, Element, or CharacterData node, diff --git a/components/script/dom/selection.rs b/components/script/dom/selection.rs index 758a8608d2b..76ac8c4d808 100644 --- a/components/script/dom/selection.rs +++ b/components/script/dom/selection.rs @@ -220,7 +220,7 @@ impl SelectionMethods for Selection { return Ok(()); } } - Err(Error::NotFound) + Err(Error::NotFound(None)) } // https://w3c.github.io/selection-api/#dom-selection-removeallranges diff --git a/components/script/dom/texttrack.rs b/components/script/dom/texttrack.rs index e311827a516..fa23ea0a240 100644 --- a/components/script/dom/texttrack.rs +++ b/components/script/dom/texttrack.rs @@ -165,7 +165,7 @@ impl TextTrackMethods for TextTrack { let cues = self.get_cues(); let index = match cues.find(cue) { Some(i) => Ok(i), - None => Err(Error::NotFound), + None => Err(Error::NotFound(None)), }?; // Step 2 cues.remove(index); diff --git a/components/script/script_module.rs b/components/script/script_module.rs index 2eddf4b58fc..b897227850d 100644 --- a/components/script/script_module.rs +++ b/components/script/script_module.rs @@ -1079,7 +1079,7 @@ impl ModuleOwner { fetch_options, ScriptType::Module, global.unminified_js_dir(), - Err(Error::NotFound), + Err(Error::NotFound(None)), )), }, } diff --git a/components/script_bindings/error.rs b/components/script_bindings/error.rs index d291f57e773..f0ba38f9b1f 100644 --- a/components/script_bindings/error.rs +++ b/components/script_bindings/error.rs @@ -16,7 +16,7 @@ pub enum Error { /// IndexSizeError DOMException IndexSize, /// NotFoundError DOMException - NotFound, + NotFound(Option), /// HierarchyRequestError DOMException HierarchyRequest, /// WrongDocumentError DOMException