diff options
author | Gregory Terzian <2792687+gterzian@users.noreply.github.com> | 2024-12-19 13:41:37 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-19 05:41:37 +0000 |
commit | 4a8b5a829056071c89fb4edd501e47754e77ba06 (patch) | |
tree | 1dafd80be75b2083645798fe3ceda958eb4ababb /components | |
parent | a0ca34d9e85584fdee525ed08a48eb97f8991078 (diff) | |
download | servo-4a8b5a829056071c89fb4edd501e47754e77ba06.tar.gz servo-4a8b5a829056071c89fb4edd501e47754e77ba06.zip |
Remove the need for crow allow unrooted lints in the queuing and de-queuing of values from default stream controllers (#34675)
Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com>
Diffstat (limited to 'components')
-rw-r--r-- | components/script/dom/readablestreamdefaultcontroller.rs | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/components/script/dom/readablestreamdefaultcontroller.rs b/components/script/dom/readablestreamdefaultcontroller.rs index 1496031d998..655e6231bfb 100644 --- a/components/script/dom/readablestreamdefaultcontroller.rs +++ b/components/script/dom/readablestreamdefaultcontroller.rs @@ -203,14 +203,13 @@ pub struct QueueWithSizes { impl QueueWithSizes { /// <https://streams.spec.whatwg.org/#dequeue-value> - #[allow(crown::unrooted_must_root)] - fn dequeue_value(&mut self) -> EnqueuedValue { - let value = self - .queue - .pop_front() - .expect("Buffer cannot be empty when dequeue value is called into."); + fn dequeue_value(&mut self, cx: SafeJSContext, rval: MutableHandleValue) { + let Some(value) = self.queue.front() else { + unreachable!("Buffer cannot be empty when dequeue value is called into."); + }; self.total_size -= value.size(); - value + value.to_jsval(cx, rval); + self.queue.pop_front(); } /// <https://streams.spec.whatwg.org/#enqueue-value-with-size> @@ -420,10 +419,9 @@ impl ReadableStreamDefaultController { } /// <https://streams.spec.whatwg.org/#dequeue-value> - #[allow(crown::unrooted_must_root)] - fn dequeue_value(&self) -> EnqueuedValue { + fn dequeue_value(&self, cx: SafeJSContext, rval: MutableHandleValue) { let mut queue = self.queue.borrow_mut(); - queue.dequeue_value() + queue.dequeue_value(cx, rval); } /// <https://streams.spec.whatwg.org/#readable-stream-default-controller-should-call-pull> @@ -568,7 +566,6 @@ impl ReadableStreamDefaultController { } /// <https://streams.spec.whatwg.org/#rs-default-controller-private-pull> - #[allow(crown::unrooted_must_root)] pub fn perform_pull_steps(&self, read_request: &ReadRequest, can_gc: CanGc) { // Let stream be this.[[stream]]. // Note: the spec does not assert that there is a stream. @@ -578,13 +575,10 @@ impl ReadableStreamDefaultController { // if queue contains bytes, perform chunk steps. if !self.queue.borrow().is_empty() { - // Rooting: chunk will be tied to a rooted value - // before calling into a function that can GC. - let chunk = self.dequeue_value(); let cx = GlobalScope::get_cx(); rooted!(in(*cx) let mut rval = UndefinedValue()); let result = RootedTraceableBox::new(Heap::default()); - chunk.to_jsval(cx, rval.handle_mut()); + self.dequeue_value(cx, rval.handle_mut()); result.set(*rval); // If this.[[closeRequested]] is true and this.[[queue]] is empty @@ -711,7 +705,6 @@ impl ReadableStreamDefaultController { /// Native call to /// <https://streams.spec.whatwg.org/#readable-stream-default-controller-enqueue> - #[allow(crown::unrooted_must_root)] pub fn enqueue_native(&self, chunk: Vec<u8>) { let stream = self .stream @@ -720,8 +713,7 @@ impl ReadableStreamDefaultController { if stream.is_locked() && stream.get_num_read_requests() > 0 { let cx = GlobalScope::get_cx(); rooted!(in(*cx) let mut rval = UndefinedValue()); - let enqueued_chunk = EnqueuedValue::Native(chunk.into_boxed_slice()); - enqueued_chunk.to_jsval(cx, rval.handle_mut()); + EnqueuedValue::Native(chunk.into_boxed_slice()).to_jsval(cx, rval.handle_mut()); stream.fulfill_read_request(rval.handle(), false); } else { let mut queue = self.queue.borrow_mut(); |