From b4f48c561b4ef68b7d4d157db9a2ee62ace56e7a Mon Sep 17 00:00:00 2001 From: Kingsley Yung Date: Sun, 16 Feb 2025 05:29:34 +0800 Subject: [PATCH] script: Take away Fallible from new_resolved and new_rejected (#35473) * script: Take away Fallible from new_resolved and new_rejected Both Promise::new_resolved and new_rejected only return `Ok`. We don't need them to be fallible. Simply return `Rc`, instead of `Fallible>`. Also, clean up relevant code. Signed-off-by: Kingsley Yung * script: pull_algorithm becomes infallible The method pull_algorithm only returns `Some(Ok(_))`, which means it is infallible. Clean up the returned type. Signed-off-by: Kingsley Yung * script: generic_initialize becomes infallible The method generic_initialize only returns `Ok(())`, which means it is infallible. Clean up the returned type. Signed-off-by: Kingsley Yung --------- Signed-off-by: Kingsley Yung --- .../script/dom/defaultteeunderlyingsource.rs | 14 +++---------- components/script/dom/promise.rs | 10 ++++----- .../script/dom/readablestreambyobreader.rs | 2 +- .../script/dom/readablestreamdefaultreader.rs | 4 ++-- .../script/dom/readablestreamgenericreader.rs | 21 +++++++------------ components/script/dom/testbinding.rs | 4 ++-- .../script/dom/underlyingsourcecontainer.rs | 2 +- .../script_bindings/codegen/CodegenRust.py | 8 +------ .../webidls/TestBinding.webidl | 2 -- 9 files changed, 23 insertions(+), 44 deletions(-) diff --git a/components/script/dom/defaultteeunderlyingsource.rs b/components/script/dom/defaultteeunderlyingsource.rs index 4849005ffb8..56fd9262dc9 100644 --- a/components/script/dom/defaultteeunderlyingsource.rs +++ b/components/script/dom/defaultteeunderlyingsource.rs @@ -107,7 +107,7 @@ impl DefaultTeeUnderlyingSource { /// /// Let pullAlgorithm be the following steps: #[cfg_attr(crown, allow(crown::unrooted_must_root))] - pub(crate) fn pull_algorithm(&self, can_gc: CanGc) -> Option, Error>> { + pub(crate) fn pull_algorithm(&self, can_gc: CanGc) -> Rc { // If reading is true, if self.reading.get() { // Set readAgain to true. @@ -115,11 +115,7 @@ impl DefaultTeeUnderlyingSource { // Return a promise resolved with undefined. let cx = GlobalScope::get_cx(); rooted!(in(*cx) let mut rval = UndefinedValue()); - return Some(Promise::new_resolved( - &self.stream.global(), - cx, - rval.handle(), - )); + return Promise::new_resolved(&self.stream.global(), cx, rval.handle()); } // Set reading to true. @@ -151,11 +147,7 @@ impl DefaultTeeUnderlyingSource { // Return a promise resolved with undefined. let cx = GlobalScope::get_cx(); rooted!(in(*cx) let mut rval = UndefinedValue()); - Some(Promise::new_resolved( - &self.stream.global(), - GlobalScope::get_cx(), - rval.handle(), - )) + Promise::new_resolved(&self.stream.global(), GlobalScope::get_cx(), rval.handle()) } /// diff --git a/components/script/dom/promise.rs b/components/script/dom/promise.rs index 1695e22bf71..46fc9c88dba 100644 --- a/components/script/dom/promise.rs +++ b/components/script/dom/promise.rs @@ -31,7 +31,7 @@ use js::rust::wrappers::{ use js::rust::{HandleObject, HandleValue, MutableHandleObject, Runtime}; use crate::dom::bindings::conversions::root_from_object; -use crate::dom::bindings::error::{Error, Fallible}; +use crate::dom::bindings::error::Error; use crate::dom::bindings::reflector::{DomGlobal, DomObject, MutDomObject, Reflector}; use crate::dom::bindings::settings_stack::AutoEntryScript; use crate::dom::globalscope::GlobalScope; @@ -153,14 +153,14 @@ impl Promise { global: &GlobalScope, cx: SafeJSContext, value: impl ToJSValConvertible, - ) -> Fallible> { + ) -> Rc { let _ac = JSAutoRealm::new(*cx, global.reflector().get_jsobject().get()); unsafe { rooted!(in(*cx) let mut rval = UndefinedValue()); value.to_jsval(*cx, rval.handle_mut()); rooted!(in(*cx) let p = CallOriginalPromiseResolve(*cx, rval.handle())); assert!(!p.handle().is_null()); - Ok(Promise::new_with_js_promise(p.handle(), cx)) + Promise::new_with_js_promise(p.handle(), cx) } } @@ -170,14 +170,14 @@ impl Promise { global: &GlobalScope, cx: SafeJSContext, value: impl ToJSValConvertible, - ) -> Fallible> { + ) -> Rc { let _ac = JSAutoRealm::new(*cx, global.reflector().get_jsobject().get()); unsafe { rooted!(in(*cx) let mut rval = UndefinedValue()); value.to_jsval(*cx, rval.handle_mut()); rooted!(in(*cx) let p = CallOriginalPromiseReject(*cx, rval.handle())); assert!(!p.handle().is_null()); - Ok(Promise::new_with_js_promise(p.handle(), cx)) + Promise::new_with_js_promise(p.handle(), cx) } } diff --git a/components/script/dom/readablestreambyobreader.rs b/components/script/dom/readablestreambyobreader.rs index 9b5045f3380..0162a7e87f8 100644 --- a/components/script/dom/readablestreambyobreader.rs +++ b/components/script/dom/readablestreambyobreader.rs @@ -144,7 +144,7 @@ impl ReadableStreamBYOBReader { } // Perform ! ReadableStreamReaderGenericInitialize(reader, stream). - self.generic_initialize(global, stream, can_gc)?; + self.generic_initialize(global, stream, can_gc); // Set reader.[[readIntoRequests]] to a new empty list. self.read_into_requests.borrow_mut().clear(); diff --git a/components/script/dom/readablestreamdefaultreader.rs b/components/script/dom/readablestreamdefaultreader.rs index d62f7c122bd..9dd93ba5213 100644 --- a/components/script/dom/readablestreamdefaultreader.rs +++ b/components/script/dom/readablestreamdefaultreader.rs @@ -189,7 +189,7 @@ impl ReadableStreamDefaultReader { } // Perform ! ReadableStreamReaderGenericInitialize(reader, stream). - self.generic_initialize(global, stream, can_gc)?; + self.generic_initialize(global, stream, can_gc); // Set reader.[[readRequests]] to a new empty list. self.read_requests.borrow_mut().clear(); @@ -370,7 +370,7 @@ impl ReadableStreamDefaultReaderMethods for ReadableStream &self.global(), error.handle_mut(), ); - return Promise::new_rejected(&self.global(), cx, error.handle()).unwrap(); + return Promise::new_rejected(&self.global(), cx, error.handle()); } // Let promise be a new promise. let promise = Promise::new(&self.reflector_.global(), can_gc); diff --git a/components/script/dom/readablestreamgenericreader.rs b/components/script/dom/readablestreamgenericreader.rs index 72a02c05476..1ab03fa289f 100644 --- a/components/script/dom/readablestreamgenericreader.rs +++ b/components/script/dom/readablestreamgenericreader.rs @@ -23,12 +23,7 @@ use crate::script_runtime::CanGc; pub(crate) trait ReadableStreamGenericReader { /// #[cfg_attr(crown, allow(crown::unrooted_must_root))] - fn generic_initialize( - &self, - global: &GlobalScope, - stream: &ReadableStream, - can_gc: CanGc, - ) -> Fallible<()> { + fn generic_initialize(&self, global: &GlobalScope, stream: &ReadableStream, can_gc: CanGc) { // Set reader.[[stream]] to stream. self.set_stream(Some(stream)); @@ -50,7 +45,7 @@ pub(crate) trait ReadableStreamGenericReader { // Otherwise, if stream.[[state]] is "closed", // Set reader.[[closedPromise]] to a promise resolved with undefined. let cx = GlobalScope::get_cx(); - self.set_closed_promise(Promise::new_resolved(global, cx, ())?); + self.set_closed_promise(Promise::new_resolved(global, cx, ())); } else { // Assert: stream.[[state]] is "errored" assert!(stream.is_errored()); @@ -59,13 +54,11 @@ pub(crate) trait ReadableStreamGenericReader { let cx = GlobalScope::get_cx(); rooted!(in(*cx) let mut error = UndefinedValue()); stream.get_stored_error(error.handle_mut()); - self.set_closed_promise(Promise::new_rejected(global, cx, error.handle())?); + self.set_closed_promise(Promise::new_rejected(global, cx, error.handle())); // Set reader.[[closedPromise]].[[PromiseIsHandled]] to true self.get_closed_promise().set_promise_is_handled(); } - - Ok(()) } /// @@ -107,9 +100,11 @@ pub(crate) trait ReadableStreamGenericReader { error.handle_mut(), ); - self.set_closed_promise( - Promise::new_rejected(&stream.global(), cx, error.handle()).unwrap(), - ); + self.set_closed_promise(Promise::new_rejected( + &stream.global(), + cx, + error.handle(), + )); } // Set reader.[[closedPromise]].[[PromiseIsHandled]] to true. self.get_closed_promise().set_promise_is_handled(); diff --git a/components/script/dom/testbinding.rs b/components/script/dom/testbinding.rs index 9426dc81273..22a2891a267 100644 --- a/components/script/dom/testbinding.rs +++ b/components/script/dom/testbinding.rs @@ -971,12 +971,12 @@ impl TestBindingMethods for TestBinding { } #[cfg_attr(crown, allow(crown::unrooted_must_root))] - fn ReturnResolvedPromise(&self, cx: SafeJSContext, v: HandleValue) -> Fallible> { + fn ReturnResolvedPromise(&self, cx: SafeJSContext, v: HandleValue) -> Rc { Promise::new_resolved(&self.global(), cx, v) } #[cfg_attr(crown, allow(crown::unrooted_must_root))] - fn ReturnRejectedPromise(&self, cx: SafeJSContext, v: HandleValue) -> Fallible> { + fn ReturnRejectedPromise(&self, cx: SafeJSContext, v: HandleValue) -> Rc { Promise::new_rejected(&self.global(), cx, v) } diff --git a/components/script/dom/underlyingsourcecontainer.rs b/components/script/dom/underlyingsourcecontainer.rs index b4fd2923751..fd0cd85b6ef 100644 --- a/components/script/dom/underlyingsourcecontainer.rs +++ b/components/script/dom/underlyingsourcecontainer.rs @@ -154,7 +154,7 @@ impl UnderlyingSourceContainer { }, UnderlyingSourceType::Tee(tee_underlyin_source) => { // Call the pull algorithm for the appropriate branch. - tee_underlyin_source.pull_algorithm(can_gc) + Some(Ok(tee_underlyin_source.pull_algorithm(can_gc))) }, // Note: other source type have no pull steps for now. _ => None, diff --git a/components/script_bindings/codegen/CodegenRust.py b/components/script_bindings/codegen/CodegenRust.py index 713291686af..61aa4b3d333 100644 --- a/components/script_bindings/codegen/CodegenRust.py +++ b/components/script_bindings/codegen/CodegenRust.py @@ -807,13 +807,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None, if !JS_WrapValue(*cx, valueToResolve.handle_mut()) { $*{exceptionCode} } - match Promise::new_resolved(&promiseGlobal, cx, valueToResolve.handle()) { - Ok(value) => value, - Err(error) => { - throw_dom_exception(cx, &promiseGlobal, error); - $*{exceptionCode} - } - } + Promise::new_resolved(&promiseGlobal, cx, valueToResolve.handle()) } """, exceptionCode=exceptionCode) diff --git a/components/script_bindings/webidls/TestBinding.webidl b/components/script_bindings/webidls/TestBinding.webidl index ee13ed57d55..95364345aec 100644 --- a/components/script_bindings/webidls/TestBinding.webidl +++ b/components/script_bindings/webidls/TestBinding.webidl @@ -562,9 +562,7 @@ interface TestBinding { [Func="TestBinding::condition_satisfied"] const unsigned short funcControlledConstEnabled = 0; - [Throws] Promise returnResolvedPromise(any value); - [Throws] Promise returnRejectedPromise(any value); readonly attribute Promise promiseAttribute; undefined acceptPromise(Promise string);