aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/analysernode.rs7
-rw-r--r--components/script/dom/audiocontext.rs28
-rw-r--r--components/script/dom/audioscheduledsourcenode.rs8
-rw-r--r--components/script/dom/audiotracklist.rs2
-rw-r--r--components/script/dom/baseaudiocontext.rs22
-rw-r--r--components/script/dom/bluetooth.rs11
-rw-r--r--components/script/dom/dedicatedworkerglobalscope.rs4
-rw-r--r--components/script/dom/document.rs17
-rw-r--r--components/script/dom/eventsource.rs17
-rw-r--r--components/script/dom/filereader.rs25
-rw-r--r--components/script/dom/gamepadhapticactuator.rs22
-rw-r--r--components/script/dom/globalscope.rs80
-rw-r--r--components/script/dom/htmldetailselement.rs3
-rw-r--r--components/script/dom/htmlformelement.rs1
-rw-r--r--components/script/dom/htmlimageelement.rs18
-rw-r--r--components/script/dom/htmlmediaelement.rs103
-rw-r--r--components/script/dom/htmlscriptelement.rs2
-rw-r--r--components/script/dom/offlineaudiocontext.rs8
-rw-r--r--components/script/dom/performance.rs28
-rw-r--r--components/script/dom/rtcpeerconnection.rs58
-rw-r--r--components/script/dom/selection.rs3
-rw-r--r--components/script/dom/serviceworkercontainer.rs11
-rw-r--r--components/script/dom/storage.rs10
-rw-r--r--components/script/dom/subtlecrypto.rs238
-rw-r--r--components/script/dom/texttracklist.rs43
-rw-r--r--components/script/dom/videotracklist.rs15
-rw-r--r--components/script/dom/webglquery.rs3
-rw-r--r--components/script/dom/webglsync.rs6
-rw-r--r--components/script/dom/webgpu/gpu.rs8
-rw-r--r--components/script/dom/websocket.rs36
-rw-r--r--components/script/dom/webxr/fakexrdevice.rs7
-rw-r--r--components/script/dom/webxr/xrsession.rs33
-rw-r--r--components/script/dom/webxr/xrsystem.rs19
-rw-r--r--components/script/dom/webxr/xrtest.rs14
-rw-r--r--components/script/dom/window.rs9
-rw-r--r--components/script/dom/xmlhttprequest.rs11
36 files changed, 472 insertions, 458 deletions
diff --git a/components/script/dom/analysernode.rs b/components/script/dom/analysernode.rs
index bc9928ff4cf..18fbfe7d20c 100644
--- a/components/script/dom/analysernode.rs
+++ b/components/script/dom/analysernode.rs
@@ -110,14 +110,17 @@ impl AnalyserNode {
) -> Fallible<DomRoot<AnalyserNode>> {
let (node, recv) = AnalyserNode::new_inherited(window, context, options)?;
let object = reflect_dom_object_with_proto(Box::new(node), window, proto, can_gc);
- let task_source = window.task_manager().dom_manipulation_task_source();
+ let task_source = window
+ .task_manager()
+ .dom_manipulation_task_source()
+ .to_sendable();
let this = Trusted::new(&*object);
ROUTER.add_typed_route(
recv,
Box::new(move |block| {
let this = this.clone();
- let _ = task_source.queue(task!(append_analysis_block: move || {
+ task_source.queue(task!(append_analysis_block: move || {
let this = this.root();
this.push_block(block.unwrap())
}));
diff --git a/components/script/dom/audiocontext.rs b/components/script/dom/audiocontext.rs
index 5ef4fd99bfc..247a88a31b9 100644
--- a/components/script/dom/audiocontext.rs
+++ b/components/script/dom/audiocontext.rs
@@ -157,13 +157,12 @@ impl AudioContextMethods<crate::DomTypeHolder> for AudioContext {
}
// Steps 4 and 5.
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let trusted_promise = TrustedPromise::new(promise.clone());
match self.context.audio_context_impl().lock().unwrap().suspend() {
Ok(_) => {
let base_context = Trusted::new(&self.context);
let context = Trusted::new(self);
- let _ = task_source.queue(
+ self.global().task_manager().dom_manipulation_task_source().queue(
task!(suspend_ok: move || {
let base_context = base_context.root();
let context = context.root();
@@ -182,10 +181,13 @@ impl AudioContextMethods<crate::DomTypeHolder> for AudioContext {
Err(_) => {
// The spec does not define the error case and `suspend` should
// never fail, but we handle the case here for completion.
- let _ = task_source.queue(task!(suspend_error: move || {
- let promise = trusted_promise.root();
- promise.reject_error(Error::Type("Something went wrong".to_owned()));
- }));
+ self.global()
+ .task_manager()
+ .dom_manipulation_task_source()
+ .queue(task!(suspend_error: move || {
+ let promise = trusted_promise.root();
+ promise.reject_error(Error::Type("Something went wrong".to_owned()));
+ }));
},
};
@@ -211,13 +213,12 @@ impl AudioContextMethods<crate::DomTypeHolder> for AudioContext {
}
// Steps 4 and 5.
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let trusted_promise = TrustedPromise::new(promise.clone());
match self.context.audio_context_impl().lock().unwrap().close() {
Ok(_) => {
let base_context = Trusted::new(&self.context);
let context = Trusted::new(self);
- let _ = task_source.queue(
+ self.global().task_manager().dom_manipulation_task_source().queue(
task!(suspend_ok: move || {
let base_context = base_context.root();
let context = context.root();
@@ -236,10 +237,13 @@ impl AudioContextMethods<crate::DomTypeHolder> for AudioContext {
Err(_) => {
// The spec does not define the error case and `suspend` should
// never fail, but we handle the case here for completion.
- let _ = task_source.queue(task!(suspend_error: move || {
- let promise = trusted_promise.root();
- promise.reject_error(Error::Type("Something went wrong".to_owned()));
- }));
+ self.global()
+ .task_manager()
+ .dom_manipulation_task_source()
+ .queue(task!(suspend_error: move || {
+ let promise = trusted_promise.root();
+ promise.reject_error(Error::Type("Something went wrong".to_owned()));
+ }));
},
};
diff --git a/components/script/dom/audioscheduledsourcenode.rs b/components/script/dom/audioscheduledsourcenode.rs
index 091e2efc7d2..24f76b274ad 100644
--- a/components/script/dom/audioscheduledsourcenode.rs
+++ b/components/script/dom/audioscheduledsourcenode.rs
@@ -71,9 +71,13 @@ impl AudioScheduledSourceNodeMethods<crate::DomTypeHolder> for AudioScheduledSou
}
let this = Trusted::new(self);
- let task_source = self.global().task_manager().dom_manipulation_task_source();
+ let task_source = self
+ .global()
+ .task_manager()
+ .dom_manipulation_task_source()
+ .to_sendable();
let callback = OnEndedCallback::new(move || {
- let _ = task_source.queue(task!(ended: move || {
+ task_source.queue(task!(ended: move || {
let this = this.root();
this.global().task_manager().dom_manipulation_task_source().queue_simple_event(
this.upcast(),
diff --git a/components/script/dom/audiotracklist.rs b/components/script/dom/audiotracklist.rs
index e7fd06ba513..405c687fb2a 100644
--- a/components/script/dom/audiotracklist.rs
+++ b/components/script/dom/audiotracklist.rs
@@ -90,7 +90,7 @@ impl AudioTrackList {
let global = &self.global();
let this = Trusted::new(self);
let task_source = global.task_manager().media_element_task_source();
- let _ = task_source.queue(task!(media_track_change: move || {
+ task_source.queue(task!(media_track_change: move || {
let this = this.root();
this.upcast::<EventTarget>().fire_event(atom!("change"), CanGc::note());
}));
diff --git a/components/script/dom/baseaudiocontext.rs b/components/script/dom/baseaudiocontext.rs
index 8c349b59a21..16d975134fb 100644
--- a/components/script/dom/baseaudiocontext.rs
+++ b/components/script/dom/baseaudiocontext.rs
@@ -229,14 +229,13 @@ impl BaseAudioContext {
}
pub fn resume(&self) {
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let this = Trusted::new(self);
// Set the rendering thread state to 'running' and start
// rendering the audio graph.
match self.audio_context_impl.lock().unwrap().resume() {
Ok(()) => {
self.take_pending_resume_promises(Ok(()));
- let _ = task_source.queue(
+ self.global().task_manager().dom_manipulation_task_source().queue(
task!(resume_success: move || {
let this = this.root();
this.fulfill_in_flight_resume_promises(|| {
@@ -255,9 +254,12 @@ impl BaseAudioContext {
self.take_pending_resume_promises(Err(Error::Type(
"Something went wrong".to_owned(),
)));
- let _ = task_source.queue(task!(resume_error: move || {
- this.root().fulfill_in_flight_resume_promises(|| {})
- }));
+ self.global()
+ .task_manager()
+ .dom_manipulation_task_source()
+ .queue(task!(resume_error: move || {
+ this.root().fulfill_in_flight_resume_promises(|| {})
+ }));
},
}
}
@@ -501,7 +503,11 @@ impl BaseAudioContextMethods<crate::DomTypeHolder> for BaseAudioContext {
let channels = Arc::new(Mutex::new(HashMap::new()));
let this = Trusted::new(self);
let this_ = this.clone();
- let task_source = self.global().task_manager().dom_manipulation_task_source();
+ let task_source = self
+ .global()
+ .task_manager()
+ .dom_manipulation_task_source()
+ .to_sendable();
let task_source_clone = task_source.clone();
let callbacks = AudioDecoderCallbacks::new()
.ready(move |channel_count| {
@@ -523,7 +529,7 @@ impl BaseAudioContextMethods<crate::DomTypeHolder> for BaseAudioContext {
decoded_audio[channel].extend_from_slice((*buffer).as_ref());
})
.eos(move || {
- let _ = task_source.queue(task!(audio_decode_eos: move || {
+ task_source.queue(task!(audio_decode_eos: move || {
let this = this.root();
let decoded_audio = decoded_audio__.lock().unwrap();
let length = if decoded_audio.len() >= 1 {
@@ -548,7 +554,7 @@ impl BaseAudioContextMethods<crate::DomTypeHolder> for BaseAudioContext {
}));
})
.error(move |error| {
- let _ = task_source_clone.queue(task!(audio_decode_eos: move || {
+ task_source_clone.queue(task!(audio_decode_eos: move || {
let this = this_.root();
let mut resolvers = this.decode_resolvers.borrow_mut();
assert!(resolvers.contains_key(&uuid));
diff --git a/components/script/dom/bluetooth.rs b/components/script/dom/bluetooth.rs
index a76b7d72065..539e800814c 100644
--- a/components/script/dom/bluetooth.rs
+++ b/components/script/dom/bluetooth.rs
@@ -244,7 +244,11 @@ pub fn response_async<T: AsyncBluetoothListener + DomObject + 'static>(
receiver: &T,
) -> IpcSender<BluetoothResponseResult> {
let (action_sender, action_receiver) = ipc::channel().unwrap();
- let task_source = receiver.global().task_manager().networking_task_source();
+ let task_source = receiver
+ .global()
+ .task_manager()
+ .networking_task_source()
+ .to_sendable();
let context = Arc::new(Mutex::new(BluetoothContext {
promise: Some(TrustedPromise::new(promise.clone())),
receiver: Trusted::new(receiver),
@@ -272,10 +276,7 @@ pub fn response_async<T: AsyncBluetoothListener + DomObject + 'static>(
action: message.unwrap(),
};
- let result = task_source.queue_unconditionally(task);
- if let Err(err) = result {
- warn!("failed to deliver network data: {:?}", err);
- }
+ task_source.queue_unconditionally(task);
}),
);
action_sender
diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs
index ad750ee1edc..d7ce8c0bd37 100644
--- a/components/script/dom/dedicatedworkerglobalscope.rs
+++ b/components/script/dom/dedicatedworkerglobalscope.rs
@@ -59,7 +59,7 @@ use crate::script_runtime::{
ThreadSafeJSContext,
};
use crate::task_queue::{QueuedTask, QueuedTaskConversion, TaskQueue};
-use crate::task_source::{TaskSource, TaskSourceName};
+use crate::task_source::{SendableTaskSource, TaskSourceName};
/// Set the `worker` field of a related DedicatedWorkerGlobalScope object to a particular
/// value for the duration of this object's lifetime. This ensures that the related Worker
@@ -378,7 +378,7 @@ impl DedicatedWorkerGlobalScope {
.origin(origin);
let runtime = unsafe {
- let task_source = TaskSource {
+ let task_source = SendableTaskSource {
sender: Box::new(WorkerThreadWorkerChan {
sender: own_sender.clone(),
worker: worker.clone(),
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 4cdc6b4e641..325b5556878 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -724,7 +724,6 @@ impl Document {
event.set_trusted(true);
window.dispatch_event_with_target_override(event, CanGc::note());
}))
- .unwrap();
}
pub fn origin(&self) -> &MutableOrigin {
@@ -2128,7 +2127,7 @@ impl Document {
) {
let callback = NetworkListener {
context: std::sync::Arc::new(Mutex::new(listener)),
- task_source: self.window().task_manager().networking_task_source(),
+ task_source: self.window().task_manager().networking_task_source().into(),
}
.into_callback();
self.loader_mut()
@@ -2143,7 +2142,7 @@ impl Document {
) {
let callback = NetworkListener {
context: std::sync::Arc::new(Mutex::new(listener)),
- task_source: self.window().task_manager().networking_task_source(),
+ task_source: self.window().task_manager().networking_task_source().into(),
}
.into_callback();
self.loader_mut()
@@ -2409,8 +2408,7 @@ impl Document {
if let Some(fragment) = document.url().fragment() {
document.check_and_scroll_fragment(fragment, CanGc::note());
}
- }))
- .unwrap();
+ }));
// Step 8.
let document = Trusted::new(self);
@@ -2439,8 +2437,7 @@ impl Document {
event.set_trusted(true);
window.dispatch_event_with_target_override(event, CanGc::note());
- }))
- .unwrap();
+ }));
}
// Step 9.
@@ -2489,8 +2486,7 @@ impl Document {
// Note: this will, among others, result in the "iframe-load-event-steps" being run.
// https://html.spec.whatwg.org/multipage/#iframe-load-event-steps
document.notify_constellation_load();
- }))
- .unwrap();
+ }));
}
}
@@ -2645,8 +2641,7 @@ impl Document {
document.upcast::<EventTarget>().fire_bubbling_event(atom!("DOMContentLoaded"), CanGc::note());
update_with_current_instant(&document.dom_content_loaded_event_end);
})
- )
- .unwrap();
+ );
// html parsing has finished - set dom content loaded
self.interactive_time
diff --git a/components/script/dom/eventsource.rs b/components/script/dom/eventsource.rs
index 40309ba50ed..d247f0696e4 100644
--- a/components/script/dom/eventsource.rs
+++ b/components/script/dom/eventsource.rs
@@ -111,8 +111,7 @@ impl EventSourceContext {
}
let global = event_source.global();
let event_source = self.event_source.clone();
- // FIXME(nox): Why are errors silenced here?
- let _ = global.task_manager().remote_event_task_source().queue(
+ global.task_manager().remote_event_task_source().queue(
task!(announce_the_event_source_connection: move || {
let event_source = event_source.root();
if event_source.ready_state.get() != ReadyState::Closed {
@@ -143,8 +142,7 @@ impl EventSourceContext {
let trusted_event_source = self.event_source.clone();
let action_sender = self.action_sender.clone();
let global = event_source.global();
- // FIXME(nox): Why are errors silenced here?
- let _ = global.task_manager().remote_event_task_source().queue(
+ global.task_manager().remote_event_task_source().queue(
task!(reestablish_the_event_source_onnection: move || {
let event_source = trusted_event_source.root();
@@ -172,8 +170,7 @@ impl EventSourceContext {
action_sender,
}
);
- // FIXME(nox): Why are errors silenced here?
- let _ = event_source.global().schedule_callback(callback, duration);
+ event_source.global().schedule_callback(callback, duration);
}),
);
}
@@ -255,8 +252,7 @@ impl EventSourceContext {
let global = event_source.global();
let event_source = self.event_source.clone();
let event = Trusted::new(&*event);
- // FIXME(nox): Why are errors silenced here?
- let _ = global.task_manager().remote_event_task_source().queue(
+ global.task_manager().remote_event_task_source().queue(
task!(dispatch_the_event_source_event: move || {
let event_source = event_source.root();
if event_source.ready_state.get() != ReadyState::Closed {
@@ -495,8 +491,7 @@ impl EventSource {
pub fn fail_the_connection(&self) {
let global = self.global();
let event_source = Trusted::new(self);
- // FIXME(nox): Why are errors silenced here?
- let _ = global.task_manager().remote_event_task_source().queue(
+ global.task_manager().remote_event_task_source().queue(
task!(fail_the_event_source_connection: move || {
let event_source = event_source.root();
if event_source.ready_state.get() != ReadyState::Closed {
@@ -600,7 +595,7 @@ impl EventSourceMethods<crate::DomTypeHolder> for EventSource {
};
let listener = NetworkListener {
context: Arc::new(Mutex::new(context)),
- task_source: global.task_manager().networking_task_source(),
+ task_source: global.task_manager().networking_task_source().into(),
};
ROUTER.add_typed_route(
action_receiver,
diff --git a/components/script/dom/filereader.rs b/components/script/dom/filereader.rs
index 55637105058..d2b6d864d3d 100644
--- a/components/script/dom/filereader.rs
+++ b/components/script/dom/filereader.rs
@@ -502,27 +502,22 @@ impl FileReader {
let filereader = Trusted::new(self);
let global = self.global();
- let task_source = global.task_manager().file_reading_task_source();
+ let task_manager = global.task_manager();
+ let task_source = task_manager.file_reading_task_source();
// Queue tasks as appropriate.
- task_source
- .queue(FileReadingTask::ProcessRead(filereader.clone(), gen_id))
- .unwrap();
+ task_source.queue(FileReadingTask::ProcessRead(filereader.clone(), gen_id));
if !blob_contents.is_empty() {
- task_source
- .queue(FileReadingTask::ProcessReadData(filereader.clone(), gen_id))
- .unwrap();
+ task_source.queue(FileReadingTask::ProcessReadData(filereader.clone(), gen_id));
}
- task_source
- .queue(FileReadingTask::ProcessReadEOF(
- filereader,
- gen_id,
- load_data,
- blob_contents,
- ))
- .unwrap();
+ task_source.queue(FileReadingTask::ProcessReadEOF(
+ filereader,
+ gen_id,
+ load_data,
+ blob_contents,
+ ));
Ok(())
}
diff --git a/components/script/dom/gamepadhapticactuator.rs b/components/script/dom/gamepadhapticactuator.rs
index 909d60a83f9..ebf45694f45 100644
--- a/components/script/dom/gamepadhapticactuator.rs
+++ b/components/script/dom/gamepadhapticactuator.rs
@@ -27,18 +27,17 @@ use crate::dom::globalscope::GlobalScope;
use crate::dom::promise::Promise;
use crate::realms::InRealm;
use crate::script_runtime::{CanGc, JSContext};
-use crate::task_source::TaskSource;
+use crate::task_source::SendableTaskSource;
struct HapticEffectListener {
- task_source: TaskSource,
+ task_source: SendableTaskSource,
context: Trusted<GamepadHapticActuator>,
}
impl HapticEffectListener {
fn handle_stopped(&self, stopped_successfully: bool) {
let context = self.context.clone();
- let _ = self
- .task_source
+ self.task_source
.queue(task!(handle_haptic_effect_stopped: move || {
let actuator = context.root();
actuator.handle_haptic_effect_stopped(stopped_successfully);
@@ -47,8 +46,7 @@ impl HapticEffectListener {
fn handle_completed(&self, completed_successfully: bool) {
let context = self.context.clone();
- let _ = self
- .task_source
+ self.task_source
.queue(task!(handle_haptic_effect_completed: move || {
let actuator = context.root();
actuator.handle_haptic_effect_completed(completed_successfully);
@@ -194,7 +192,7 @@ impl GamepadHapticActuatorMethods<crate::DomTypeHolder> for GamepadHapticActuato
if let Some(promise) = self.playing_effect_promise.borrow_mut().take() {
let trusted_promise = TrustedPromise::new(promise);
- let _ = self.global().task_manager().gamepad_task_source().queue(
+ self.global().task_manager().gamepad_task_source().queue(
task!(preempt_promise: move || {
let promise = trusted_promise.root();
let message = DOMString::from("preempted");
@@ -215,7 +213,7 @@ impl GamepadHapticActuatorMethods<crate::DomTypeHolder> for GamepadHapticActuato
let (effect_complete_sender, effect_complete_receiver) =
ipc::channel().expect("ipc channel failure");
let listener = HapticEffectListener {
- task_source: self.global().task_manager().gamepad_task_source(),
+ task_source: self.global().task_manager().gamepad_task_source().into(),
context,
};
@@ -261,7 +259,7 @@ impl GamepadHapticActuatorMethods<crate::DomTypeHolder> for GamepadHapticActuato
if let Some(promise) = self.playing_effect_promise.borrow_mut().take() {
let trusted_promise = TrustedPromise::new(promise);
- let _ = self.global().task_manager().gamepad_task_source().queue(
+ self.global().task_manager().gamepad_task_source().queue(
task!(preempt_promise: move || {
let promise = trusted_promise.root();
let message = DOMString::from("preempted");
@@ -278,7 +276,7 @@ impl GamepadHapticActuatorMethods<crate::DomTypeHolder> for GamepadHapticActuato
let (effect_stop_sender, effect_stop_receiver) =
ipc::channel().expect("ipc channel failure");
let listener = HapticEffectListener {
- task_source: self.global().task_manager().gamepad_task_source(),
+ task_source: self.global().task_manager().gamepad_task_source().into(),
context,
};
@@ -325,7 +323,7 @@ impl GamepadHapticActuator {
let trusted_promise = TrustedPromise::new(promise);
let sequence_id = self.sequence_id.get();
let reset_sequence_id = self.reset_sequence_id.get();
- let _ = self.global().task_manager().gamepad_task_source().queue(
+ self.global().task_manager().gamepad_task_source().queue(
task!(complete_promise: move || {
if sequence_id != reset_sequence_id {
warn!("Mismatched sequence/reset sequence ids: {} != {}", sequence_id, reset_sequence_id);
@@ -346,7 +344,7 @@ impl GamepadHapticActuator {
}
let this = Trusted::new(self);
- let _ = self.global().task_manager().gamepad_task_source().queue(
+ self.global().task_manager().gamepad_task_source().queue(
task!(stop_playing_effect: move || {
let actuator = this.root();
let Some(promise) = actuator.playing_effect_promise.borrow_mut().take() else {
diff --git a/components/script/dom/globalscope.rs b/components/script/dom/globalscope.rs
index 2807fc9f486..00d033a2ae9 100644
--- a/components/script/dom/globalscope.rs
+++ b/components/script/dom/globalscope.rs
@@ -138,7 +138,7 @@ use crate::script_runtime::{
use crate::script_thread::{with_script_thread, ScriptThread};
use crate::security_manager::CSPViolationReporter;
use crate::task_manager::TaskManager;
-use crate::task_source::TaskSource;
+use crate::task_source::SendableTaskSource;
use crate::timers::{
IsInterval, OneshotTimerCallback, OneshotTimerHandle, OneshotTimers, TimerCallback,
};
@@ -376,13 +376,13 @@ pub struct GlobalScope {
/// A wrapper for glue-code between the ipc router and the event-loop.
struct MessageListener {
- task_source: TaskSource,
+ task_source: SendableTaskSource,
context: Trusted<GlobalScope>,
}
/// A wrapper for broadcasts coming in over IPC, and the event-loop.
struct BroadcastListener {
- task_source: TaskSource,
+ task_source: SendableTaskSource,
context: Trusted<GlobalScope>,
}
@@ -394,7 +394,7 @@ struct FileListener {
/// - Some(Empty) => Some(Receiving) => None
/// - Some(Empty) => None
state: Option<FileListenerState>,
- task_source: TaskSource,
+ task_source: SendableTaskSource,
}
enum FileListenerTarget {
@@ -507,8 +507,7 @@ impl BroadcastListener {
// This however seems to be hard to avoid in the light of the IPC.
// One can imagine queueing tasks directly,
// for channels that would be in the same script-thread.
- let _ = self
- .task_source
+ self.task_source
.queue(task!(broadcast_message_event: move || {
let global = context.root();
// Step 10 of https://html.spec.whatwg.org/multipage/#dom-broadcastchannel-postmessage,
@@ -526,7 +525,7 @@ impl MessageListener {
match msg {
MessagePortMsg::CompleteTransfer(ports) => {
let context = self.context.clone();
- let _ = self.task_source.queue(
+ self.task_source.queue(
task!(process_complete_transfer: move || {
let global = context.root();
@@ -561,22 +560,21 @@ impl MessageListener {
},
MessagePortMsg::CompletePendingTransfer(port_id, buffer) => {
let context = self.context.clone();
- let _ = self.task_source.queue(task!(complete_pending: move || {
+ self.task_source.queue(task!(complete_pending: move || {
let global = context.root();
global.complete_port_transfer(port_id, buffer);
}));
},
MessagePortMsg::NewTask(port_id, task) => {
let context = self.context.clone();
- let _ = self.task_source.queue(task!(process_new_task: move || {
+ self.task_source.queue(task!(process_new_task: move || {
let global = context.root();
global.route_task_to_port(port_id, task, CanGc::note());
}));
},
MessagePortMsg::RemoveMessagePort(port_id) => {
let context = self.context.clone();
- let _ = self
- .task_source
+ self.task_source
.queue(task!(process_remove_message_port: move || {
let global = context.root();
global.note_entangled_port_removed(&port_id);
@@ -615,7 +613,7 @@ impl FileListener {
let stream = trusted.root();
stream_handle_incoming(&stream, Ok(blob_buf.bytes));
});
- let _ = self.task_source.queue(task);
+ self.task_source.queue(task);
Vec::with_capacity(0)
} else {
@@ -638,7 +636,7 @@ impl FileListener {
stream_handle_incoming(&stream, Ok(bytes_in));
});
- let _ = self.task_source.queue(task);
+ self.task_source.queue(task);
} else {
bytes.append(&mut bytes_in);
};
@@ -658,7 +656,7 @@ impl FileListener {
callback(promise, Ok(bytes));
});
- let _ = self.task_source.queue(task);
+ self.task_source.queue(task);
},
FileListenerTarget::Stream(trusted_stream) => {
let trusted = trusted_stream.clone();
@@ -668,7 +666,7 @@ impl FileListener {
stream_handle_eof(&stream);
});
- let _ = self.task_source.queue(task);
+ self.task_source.queue(task);
},
},
_ => {
@@ -682,14 +680,14 @@ impl FileListener {
match target {
FileListenerTarget::Promise(trusted_promise, callback) => {
- let _ = self.task_source.queue(task!(reject_promise: move || {
+ self.task_source.queue(task!(reject_promise: move || {
let promise = trusted_promise.root();
let _ac = enter_realm(&*promise.global());
callback(promise, error);
}));
},
FileListenerTarget::Stream(trusted_stream) => {
- let _ = self.task_source.queue(task!(error_stream: move || {
+ self.task_source.queue(task!(error_stream: move || {
let stream = trusted_stream.root();
stream_handle_incoming(&stream, error);
}));
@@ -1018,7 +1016,7 @@ impl GlobalScope {
for task in message_buffer {
let port_id = *port_id;
let this = Trusted::new(self);
- let _ = self.task_manager().port_message_queue().queue(
+ self.task_manager().port_message_queue().queue(
task!(process_pending_port_messages: move || {
let target_global = this.root();
target_global.route_task_to_port(port_id, task, CanGc::note());
@@ -1071,15 +1069,14 @@ impl GlobalScope {
if let Some(entangled_id) = entangled_port {
// Step 7
let this = Trusted::new(self);
- let _ =
- self.task_manager()
- .port_message_queue()
- .queue(task!(post_message: move || {
- let global = this.root();
- // Note: we do this in a task, as this will ensure the global and constellation
- // are aware of any transfer that might still take place in the current task.
- global.route_task_to_port(entangled_id, task, CanGc::note());
- }));
+ self.task_manager()
+ .port_message_queue()
+ .queue(task!(post_message: move || {
+ let global = this.root();
+ // Note: we do this in a task, as this will ensure the global and constellation
+ // are aware of any transfer that might still take place in the current task.
+ global.route_task_to_port(entangled_id, task, CanGc::note());
+ }));
}
} else {
warn!("post_messageport_msg called on a global not managing any ports.");
@@ -1168,7 +1165,7 @@ impl GlobalScope {
// to fire the message event
let channel = Trusted::new(&*channel);
let global = Trusted::new(self);
- let _ = self.task_manager().dom_manipulation_task_source().queue(
+ self.task_manager().dom_manipulation_task_source().queue(
task!(process_pending_port_messages: move || {
let destination = channel.root();
let global = global.root();
@@ -1361,7 +1358,7 @@ impl GlobalScope {
ipc::channel().expect("ipc channel failure");
let context = Trusted::new(self);
let listener = BroadcastListener {
- task_source: self.task_manager().dom_manipulation_task_source(),
+ task_source: self.task_manager().dom_manipulation_task_source().into(),
context,
};
ROUTER.add_typed_route(
@@ -1409,7 +1406,7 @@ impl GlobalScope {
ipc::channel().expect("ipc channel failure");
let context = Trusted::new(self);
let listener = MessageListener {
- task_source: self.task_manager().port_message_queue(),
+ task_source: self.task_manager().port_message_queue().into(),
context,
};
ROUTER.add_typed_route(
@@ -1447,7 +1444,7 @@ impl GlobalScope {
// Queue a task to complete the transfer,
// unless the port is re-transferred in the current task.
let this = Trusted::new(self);
- let _ = self.task_manager().port_message_queue().queue(
+ self.task_manager().port_message_queue().queue(
task!(process_pending_port_messages: move || {
let target_global = this.root();
target_global.maybe_add_pending_ports();
@@ -1935,7 +1932,7 @@ impl GlobalScope {
state: Some(FileListenerState::Empty(FileListenerTarget::Stream(
trusted_stream,
))),
- task_source: self.task_manager().file_reading_task_source(),
+ task_source: self.task_manager().file_reading_task_source().into(),
};
ROUTER.add_typed_route(
@@ -1957,7 +1954,7 @@ impl GlobalScope {
trusted_promise,
callback,
))),
- task_source: self.task_manager().file_reading_task_source(),
+ task_source: self.task_manager().file_reading_task_source().into(),
};
ROUTER.add_typed_route(
@@ -2691,8 +2688,7 @@ impl GlobalScope {
);
self.task_manager()
.dom_manipulation_task_source()
- .queue(task)
- .unwrap();
+ .queue(task);
}
}
@@ -3081,8 +3077,7 @@ impl GlobalScope {
);
navigator.set_gamepad(selected_index as usize, &gamepad, CanGc::note());
}
- }))
- .expect("Failed to queue gamepad connected task.");
+ }));
}
/// <https://www.w3.org/TR/gamepad/#dfn-gamepaddisconnected>
@@ -3101,8 +3096,7 @@ impl GlobalScope {
}
}
}
- }))
- .expect("Failed to queue gamepad disconnected task.");
+ }));
}
/// <https://www.w3.org/TR/gamepad/#receiving-inputs>
@@ -3141,16 +3135,14 @@ impl GlobalScope {
let gamepad = new_gamepad.root();
gamepad.notify_event(GamepadEventType::Connected, CanGc::note());
})
- )
- .expect("Failed to queue update gamepad connect task.");
+ );
}
});
}
}
}
})
- )
- .expect("Failed to queue update gamepad state task.");
+ );
}
pub(crate) fn current_group_label(&self) -> Option<DOMString> {
@@ -3218,7 +3210,7 @@ impl GlobalScope {
&self,
request_builder: RequestBuilder,
context: Arc<Mutex<Listener>>,
- task_source: TaskSource,
+ task_source: SendableTaskSource,
cancellation_sender: Option<ipc::IpcReceiver<()>>,
) {
let network_listener = NetworkListener {
diff --git a/components/script/dom/htmldetailselement.rs b/components/script/dom/htmldetailselement.rs
index e6541786a63..2eeaf905bbb 100644
--- a/components/script/dom/htmldetailselement.rs
+++ b/components/script/dom/htmldetailselement.rs
@@ -84,8 +84,7 @@ impl VirtualMethods for HTMLDetailsElement {
let window = self.owner_window();
let this = Trusted::new(self);
- // FIXME(nox): Why are errors silenced here?
- let _ = window.task_manager().dom_manipulation_task_source().queue(
+ window.task_manager().dom_manipulation_task_source().queue(
task!(details_notification_task_steps: move || {
let this = this.root();
if counter == this.toggle_counter.get() {
diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs
index 5a13ccac7df..6b1be73957f 100644
--- a/components/script/dom/htmlformelement.rs
+++ b/components/script/dom/htmlformelement.rs
@@ -1040,7 +1040,6 @@ impl HTMLFormElement {
.task_manager()
.dom_manipulation_task_source()
.queue(task)
- .unwrap();
}
/// Interactively validate the constraints of form elements
diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs
index 293fc1200cd..274faf873f0 100644
--- a/components/script/dom/htmlimageelement.rs
+++ b/components/script/dom/htmlimageelement.rs
@@ -891,8 +891,7 @@ impl HTMLImageElement {
self.abort_request(State::Broken, ImageRequestPhase::Current, can_gc);
self.abort_request(State::Broken, ImageRequestPhase::Pending, can_gc);
// Step 9.
- // FIXME(nox): Why are errors silenced here?
- let _ = task_source.queue(task!(image_null_source_error: move || {
+ task_source.queue(task!(image_null_source_error: move || {
let this = this.root();
{
let mut current_request =
@@ -924,8 +923,7 @@ impl HTMLImageElement {
self.abort_request(State::Broken, ImageRequestPhase::Pending, can_gc);
// Step 12.1-12.5.
let src = src.0;
- // FIXME(nox): Why are errors silenced here?
- let _ = task_source.queue(task!(image_selected_source_error: move || {
+ task_source.queue(task!(image_selected_source_error: move || {
let this = this.root();
{
let mut current_request =
@@ -1016,7 +1014,7 @@ impl HTMLImageElement {
let this = Trusted::new(self);
let src = src.0;
- let _ = window.task_manager().dom_manipulation_task_source().queue(
+ window.task_manager().dom_manipulation_task_source().queue(
task!(image_load_event: move || {
let this = this.root();
{
@@ -1063,7 +1061,11 @@ impl HTMLImageElement {
) -> IpcSender<PendingImageResponse> {
let trusted_node = Trusted::new(elem);
let (responder_sender, responder_receiver) = ipc::channel().unwrap();
- let task_source = elem.owner_window().task_manager().networking_task_source();
+ let task_source = elem
+ .owner_window()
+ .task_manager()
+ .networking_task_source()
+ .to_sendable();
let generation = elem.generation.get();
ROUTER.add_typed_route(
@@ -1075,7 +1077,7 @@ impl HTMLImageElement {
let element = trusted_node.clone();
let image: PendingImageResponse = message.unwrap();
let selected_source_clone = selected_source.clone();
- let _ = task_source.queue(
+ task_source.queue(
task!(process_image_response_for_environment_change: move || {
let element = element.root();
// Ignore any image response for a previous request that has been discarded.
@@ -1240,7 +1242,7 @@ impl HTMLImageElement {
let this = Trusted::new(self);
let window = self.owner_window();
let src = src.0;
- let _ = window.task_manager().dom_manipulation_task_source().queue(
+ window.task_manager().dom_manipulation_task_source().queue(
task!(image_load_event: move || {
let this = this.root();
let relevant_mutation = this.generation.get() != generation;
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index 5b6727bf95a..a75d2c7b8dc 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -548,8 +548,7 @@ impl HTMLMediaElement {
// Step 2.3.
let this = Trusted::new(self);
let generation_id = self.generation_id.get();
- let _ = self
- .owner_window()
+ self.owner_window()
.task_manager()
.media_element_task_source()
.queue(task!(internal_pause_steps: move || {
@@ -595,9 +594,7 @@ impl HTMLMediaElement {
// Step 2.
let this = Trusted::new(self);
let generation_id = self.generation_id.get();
- // FIXME(nox): Why are errors silenced here?
- let _ = self
- .owner_window()
+ self.owner_window()
.task_manager()
.media_element_task_source()
.queue(task!(notify_about_playing: move || {
@@ -632,10 +629,9 @@ impl HTMLMediaElement {
return;
}
- let task_source = self
- .owner_window()
- .task_manager()
- .media_element_task_source();
+ let owner_window = self.owner_window();
+ let task_manager = owner_window.task_manager();
+ let task_source = task_manager.media_element_task_source();
// Step 1.
match (old_ready_state, ready_state) {
@@ -648,8 +644,7 @@ impl HTMLMediaElement {
if !self.fired_loadeddata_event.get() {
self.fired_loadeddata_event.set(true);
let this = Trusted::new(self);
- // FIXME(nox): Why are errors silenced here?
- let _ = task_source.queue(task!(media_reached_current_data: move || {
+ task_source.queue(task!(media_reached_current_data: move || {
let this = this.root();
this.upcast::<EventTarget>().fire_event(atom!("loadeddata"), CanGc::note());
this.delay_load_event(false, CanGc::note());
@@ -942,13 +937,11 @@ impl HTMLMediaElement {
// Step 4.remote.1.3.
let this = Trusted::new(self);
- window
- .task_manager()
- .media_element_task_source()
- .queue(task!(set_media_delay_load_event_flag_to_false: move || {
+ window.task_manager().media_element_task_source().queue(
+ task!(set_media_delay_load_event_flag_to_false: move || {
this.root().delay_load_event(false, CanGc::note());
- }))
- .unwrap();
+ }),
+ );
// Steps 4.remote.1.4.
// FIXME(nox): Somehow we should wait for the task from previous
@@ -1004,9 +997,7 @@ impl HTMLMediaElement {
let this = Trusted::new(self);
let generation_id = self.generation_id.get();
self.take_pending_play_promises(Err(Error::NotSupported));
- // FIXME(nox): Why are errors silenced here?
- let _ = self
- .owner_window()
+ self.owner_window()
.task_manager()
.media_element_task_source()
.queue(task!(dedicated_media_source_failure_steps: move || {
@@ -1105,10 +1096,9 @@ impl HTMLMediaElement {
self.fulfill_in_flight_play_promises(|| ());
}
- let task_source = self
- .owner_window()
- .task_manager()
- .media_element_task_source();
+ let window = self.owner_window();
+ let task_manager = window.task_manager();
+ let task_source = task_manager.media_element_task_source();
// Step 5.
let network_state = self.network_state.get();
@@ -1314,14 +1304,16 @@ impl HTMLMediaElement {
self.time_marches_on();
// Step 16.
- let task_source = self
- .owner_window()
- .task_manager()
- .media_element_task_source();
- task_source.queue_simple_event(self.upcast(), atom!("timeupdate"));
+ let window = self.owner_window();
+ let task_manager = window.task_manager();
+ task_manager
+ .media_element_task_source()
+ .queue_simple_event(self.upcast(), atom!("timeupdate"));
// Step 17.
- task_source.queue_simple_event(self.upcast(), atom!("seeked"));
+ task_manager
+ .media_element_task_source()
+ .queue_simple_event(self.upcast(), atom!("seeked"));
}
/// <https://html.spec.whatwg.org/multipage/#poster-frame>
@@ -1386,18 +1378,19 @@ impl HTMLMediaElement {
*self.player.borrow_mut() = Some(player);
let trusted_node = Trusted::new(self);
- let task_source = window.task_manager().media_element_task_source();
+ let task_source = window
+ .task_manager()
+ .media_element_task_source()
+ .to_sendable();
ROUTER.add_typed_route(
action_receiver,
Box::new(move |message| {
let event = message.unwrap();
trace!("Player event {:?}", event);
let this = trusted_node.clone();
- if let Err(err) = task_source.queue(task!(handle_player_event: move || {
+ task_source.queue(task!(handle_player_event: move || {
this.root().handle_player_event(&event, CanGc::note());
- })) {
- warn!("Could not queue player event handler task {:?}", err);
- }
+ }));
}),
);
@@ -1424,13 +1417,16 @@ impl HTMLMediaElement {
if let Some(image_receiver) = image_receiver {
let trusted_node = Trusted::new(self);
- let task_source = window.task_manager().media_element_task_source();
+ let task_source = window
+ .task_manager()
+ .media_element_task_source()
+ .to_sendable();
ROUTER.add_typed_route(
image_receiver.to_ipc_receiver(),
Box::new(move |message| {
let msg = message.unwrap();
let this = trusted_node.clone();
- if let Err(err) = task_source.queue(task!(handle_glplayer_message: move || {
+ task_source.queue(task!(handle_glplayer_message: move || {
trace!("GLPlayer message {:?}", msg);
let video_renderer = this.root().video_renderer.clone();
@@ -1454,9 +1450,7 @@ impl HTMLMediaElement {
},
_ => (),
}
- })) {
- warn!("Could not queue GL player message handler task {:?}", err);
- }
+ }));
}),
);
}
@@ -1506,7 +1500,7 @@ impl HTMLMediaElement {
// Step 3.
let this = Trusted::new(self);
- let _ = self.owner_window().task_manager().media_element_task_source().queue(
+ self.owner_window().task_manager().media_element_task_source().queue(
task!(reaches_the_end_steps: move || {
let this = this.root();
// Step 3.1.
@@ -2216,10 +2210,9 @@ impl HTMLMediaElementMethods<crate::DomTypeHolder> for HTMLMediaElement {
let state = self.ready_state.get();
- let task_source = self
- .owner_window()
- .task_manager()
- .media_element_task_source();
+ let owner_window = self.owner_window();
+ let task_manager = owner_window.task_manager();
+ let task_source = task_manager.media_element_task_source();
if self.Paused() {
// Step 6.1.
self.paused.set(false);
@@ -2249,18 +2242,16 @@ impl HTMLMediaElementMethods<crate::DomTypeHolder> for HTMLMediaElement {
self.take_pending_play_promises(Ok(()));
let this = Trusted::new(self);
let generation_id = self.generation_id.get();
- task_source
- .queue(task!(resolve_pending_play_promises: move || {
- let this = this.root();
- if generation_id != this.generation_id.get() {
- return;
- }
+ task_source.queue(task!(resolve_pending_play_promises: move || {
+ let this = this.root();
+ if generation_id != this.generation_id.get() {
+ return;
+ }
- this.fulfill_in_flight_play_promises(|| {
- this.play_media();
- });
- }))
- .unwrap();
+ this.fulfill_in_flight_play_promises(|| {
+ this.play_media();
+ });
+ }));
}
// Step 8.
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs
index 45aeefbc9c4..a8d1e976c38 100644
--- a/components/script/dom/htmlscriptelement.rs
+++ b/components/script/dom/htmlscriptelement.rs
@@ -65,7 +65,7 @@ use crate::script_module::{
fetch_external_module_script, fetch_inline_module_script, ModuleOwner, ScriptFetchOptions,
};
use crate::script_runtime::CanGc;
-use crate::task_source::{TaskSource, TaskSourceName};
+use crate::task_source::{SendableTaskSource, TaskSourceName};
use crate::unminify::{unminify_js, ScriptSource};
use crate::HasParent;
diff --git a/components/script/dom/offlineaudiocontext.rs b/components/script/dom/offlineaudiocontext.rs
index 17691b2158f..5cda35e4e10 100644
--- a/components/script/dom/offlineaudiocontext.rs
+++ b/components/script/dom/offlineaudiocontext.rs
@@ -170,12 +170,16 @@ impl OfflineAudioContextMethods<crate::DomTypeHolder> for OfflineAudioContext {
}));
let this = Trusted::new(self);
- let task_source = self.global().task_manager().dom_manipulation_task_source();
+ let task_source = self
+ .global()
+ .task_manager()
+ .dom_manipulation_task_source()
+ .to_sendable();
Builder::new()
.name("OfflineACResolver".to_owned())
.spawn(move || {
let _ = receiver.recv();
- let _ = task_source.queue(
+ task_source.queue(
task!(resolve: move || {
let this = this.root();
let processed_audio = processed_audio.lock().unwrap();
diff --git a/components/script/dom/performance.rs b/components/script/dom/performance.rs
index ba89eea4932..7c212e22511 100644
--- a/components/script/dom/performance.rs
+++ b/components/script/dom/performance.rs
@@ -238,16 +238,14 @@ impl Performance {
if !self.pending_notification_observers_task.get() {
self.pending_notification_observers_task.set(true);
- let task_source = self
- .global()
- .task_manager()
- .performance_timeline_task_source();
let global = &self.global();
let owner = Trusted::new(&*global.performance());
- let task = task!(notify_performance_observers: move || {
- owner.root().notify_observers();
- });
- let _ = task_source.queue(task);
+ self.global()
+ .task_manager()
+ .performance_timeline_task_source()
+ .queue(task!(notify_performance_observers: move || {
+ owner.root().notify_observers();
+ }));
}
}
let mut observers = self.observers.borrow_mut();
@@ -324,17 +322,15 @@ impl Performance {
// Step 6.
// Queue a new notification task.
self.pending_notification_observers_task.set(true);
- let task_source = self
- .global()
- .task_manager()
- .performance_timeline_task_source();
let global = &self.global();
let owner = Trusted::new(&*global.performance());
- let task = task!(notify_performance_observers: move || {
- owner.root().notify_observers();
- });
- let _ = task_source.queue(task);
+ self.global()
+ .task_manager()
+ .performance_timeline_task_source()
+ .queue(task!(notify_performance_observers: move || {
+ owner.root().notify_observers();
+ }));
Some(entry_last_index)
}
diff --git a/components/script/dom/rtcpeerconnection.rs b/components/script/dom/rtcpeerconnection.rs
index b2a31e99882..25d99c26893 100644
--- a/components/script/dom/rtcpeerconnection.rs
+++ b/components/script/dom/rtcpeerconnection.rs
@@ -52,7 +52,7 @@ use crate::dom::rtctrackevent::RTCTrackEvent;
use crate::dom::window::Window;
use crate::realms::{enter_realm, InRealm};
use crate::script_runtime::CanGc;
-use crate::task_source::TaskSource;
+use crate::task_source::SendableTaskSource;
#[dom_struct]
pub struct RTCPeerConnection {
@@ -79,13 +79,13 @@ pub struct RTCPeerConnection {
struct RTCSignaller {
trusted: Trusted<RTCPeerConnection>,
- task_source: TaskSource,
+ task_source: SendableTaskSource,
}
impl WebRtcSignaller for RTCSignaller {
fn on_ice_candidate(&self, _: &WebRtcController, candidate: IceCandidate) {
let this = self.trusted.clone();
- let _ = self.task_source.queue(task!(on_ice_candidate: move || {
+ self.task_source.queue(task!(on_ice_candidate: move || {
let this = this.root();
this.on_ice_candidate(candidate, CanGc::note());
}));
@@ -93,8 +93,7 @@ impl WebRtcSignaller for RTCSignaller {
fn on_negotiation_needed(&self, _: &WebRtcController) {
let this = self.trusted.clone();
- let _ = self
- .task_source
+ self.task_source
.queue(task!(on_negotiation_needed: move || {
let this = this.root();
this.on_negotiation_needed(CanGc::note());
@@ -103,8 +102,7 @@ impl WebRtcSignaller for RTCSignaller {
fn update_gathering_state(&self, state: GatheringState) {
let this = self.trusted.clone();
- let _ = self
- .task_source
+ self.task_source
.queue(task!(update_gathering_state: move || {
let this = this.root();
this.update_gathering_state(state, CanGc::note());
@@ -113,8 +111,7 @@ impl WebRtcSignaller for RTCSignaller {
fn update_ice_connection_state(&self, state: IceConnectionState) {
let this = self.trusted.clone();
- let _ = self
- .task_source
+ self.task_source
.queue(task!(update_ice_connection_state: move || {
let this = this.root();
this.update_ice_connection_state(state, CanGc::note());
@@ -123,8 +120,7 @@ impl WebRtcSignaller for RTCSignaller {
fn update_signaling_state(&self, state: SignalingState) {
let this = self.trusted.clone();
- let _ = self
- .task_source
+ self.task_source
.queue(task!(update_signaling_state: move || {
let this = this.root();
this.update_signaling_state(state, CanGc::note());
@@ -134,7 +130,7 @@ impl WebRtcSignaller for RTCSignaller {
fn on_add_stream(&self, id: &MediaStreamId, ty: MediaStreamType) {
let this = self.trusted.clone();
let id = *id;
- let _ = self.task_source.queue(task!(on_add_stream: move || {
+ self.task_source.queue(task!(on_add_stream: move || {
let this = this.root();
this.on_add_stream(id, ty, CanGc::note());
}));
@@ -148,8 +144,7 @@ impl WebRtcSignaller for RTCSignaller {
) {
// XXX(ferjm) get label and options from channel properties.
let this = self.trusted.clone();
- let _ = self
- .task_source
+ self.task_source
.queue(task!(on_data_channel_event: move || {
let this = this.root();
let global = this.global();
@@ -224,10 +219,9 @@ impl RTCPeerConnection {
fn make_signaller(&self) -> Box<dyn WebRtcSignaller> {
let trusted = Trusted::new(self);
- let task_source = self.global().task_manager().networking_task_source();
Box::new(RTCSignaller {
trusted,
- task_source,
+ task_source: self.global().task_manager().networking_task_source().into(),
})
}
@@ -442,14 +436,18 @@ impl RTCPeerConnection {
fn create_offer(&self) {
let generation = self.offer_answer_generation.get();
- let task_source = self.global().task_manager().networking_task_source();
+ let task_source = self
+ .global()
+ .task_manager()
+ .networking_task_source()
+ .to_sendable();
let this = Trusted::new(self);
self.controller
.borrow_mut()
.as_ref()
.unwrap()
.create_offer(Box::new(move |desc: SessionDescription| {
- let _ = task_source.queue(task!(offer_created: move || {
+ task_source.queue(task!(offer_created: move || {
let this = this.root();
if this.offer_answer_generation.get() != generation {
// the state has changed since we last created the offer,
@@ -467,14 +465,18 @@ impl RTCPeerConnection {
fn create_answer(&self) {
let generation = self.offer_answer_generation.get();
- let task_source = self.global().task_manager().networking_task_source();
+ let task_source = self
+ .global()
+ .task_manager()
+ .networking_task_source()
+ .to_sendable();
let this = Trusted::new(self);
self.controller
.borrow_mut()
.as_ref()
.unwrap()
.create_answer(Box::new(move |desc: SessionDescription| {
- let _ = task_source.queue(task!(answer_created: move || {
+ task_source.queue(task!(answer_created: move || {
let this = this.root();
if this.offer_answer_generation.get() != generation {
// the state has changed since we last created the offer,
@@ -635,7 +637,11 @@ impl RTCPeerConnectionMethods<crate::DomTypeHolder> for RTCPeerConnection {
let this = Trusted::new(self);
let desc: SessionDescription = desc.convert();
let trusted_promise = TrustedPromise::new(p.clone());
- let task_source = self.global().task_manager().networking_task_source();
+ let task_source = self
+ .global()
+ .task_manager()
+ .networking_task_source()
+ .to_sendable();
self.controller
.borrow_mut()
.as_ref()
@@ -643,7 +649,7 @@ impl RTCPeerConnectionMethods<crate::DomTypeHolder> for RTCPeerConnection {
.set_local_description(
desc.clone(),
Box::new(move || {
- let _ = task_source.queue(task!(local_description_set: move || {
+ task_source.queue(task!(local_description_set: move || {
// XXXManishearth spec actually asks for an intricate
// dance between pending/current local/remote descriptions
let this = this.root();
@@ -674,7 +680,11 @@ impl RTCPeerConnectionMethods<crate::DomTypeHolder> for RTCPeerConnection {
let this = Trusted::new(self);
let desc: SessionDescription = desc.convert();
let trusted_promise = TrustedPromise::new(p.clone());
- let task_source = self.global().task_manager().networking_task_source();
+ let task_source = self
+ .global()
+ .task_manager()
+ .networking_task_source()
+ .to_sendable();
self.controller
.borrow_mut()
.as_ref()
@@ -682,7 +692,7 @@ impl RTCPeerConnectionMethods<crate::DomTypeHolder> for RTCPeerConnection {
.set_remote_description(
desc.clone(),
Box::new(move || {
- let _ = task_source.queue(task!(remote_description_set: move || {
+ task_source.queue(task!(remote_description_set: move || {
// XXXManishearth spec actually asks for an intricate
// dance between pending/current local/remote descriptions
let this = this.root();
diff --git a/components/script/dom/selection.rs b/components/script/dom/selection.rs
index be7d6c2ee6c..c04bcd021a6 100644
--- a/components/script/dom/selection.rs
+++ b/components/script/dom/selection.rs
@@ -98,8 +98,7 @@ impl Selection {
this.task_queued.set(false);
this.document.upcast::<EventTarget>().fire_event(atom!("selectionchange"), CanGc::note());
})
- )
- .expect("Couldn't queue selectionchange task!");
+ );
self.task_queued.set(true);
}
diff --git a/components/script/dom/serviceworkercontainer.rs b/components/script/dom/serviceworkercontainer.rs
index a443c67f3ce..e7a8f223547 100644
--- a/components/script/dom/serviceworkercontainer.rs
+++ b/components/script/dom/serviceworkercontainer.rs
@@ -26,7 +26,7 @@ use crate::dom::serviceworker::ServiceWorker;
use crate::dom::serviceworkerregistration::ServiceWorkerRegistration;
use crate::realms::{enter_realm, InRealm};
use crate::script_runtime::CanGc;
-use crate::task_source::TaskSource;
+use crate::task_source::SendableTaskSource;
#[dom_struct]
pub struct ServiceWorkerContainer {
@@ -140,10 +140,9 @@ impl ServiceWorkerContainerMethods<crate::DomTypeHolder> for ServiceWorkerContai
// Setup the callback for reject/resolve of the promise,
// from steps running "in-parallel" from here in the serviceworker manager.
- let task_source = global.task_manager().dom_manipulation_task_source();
let mut handler = RegisterJobResultHandler {
trusted_promise: Some(TrustedPromise::new(promise.clone())),
- task_source,
+ task_source: global.task_manager().dom_manipulation_task_source().into(),
};
let (job_result_sender, job_result_receiver) = ipc::channel().expect("ipc channel failure");
@@ -183,7 +182,7 @@ impl ServiceWorkerContainerMethods<crate::DomTypeHolder> for ServiceWorkerContai
/// <https://w3c.github.io/ServiceWorker/#register>
struct RegisterJobResultHandler {
trusted_promise: Option<TrustedPromise>,
- task_source: TaskSource,
+ task_source: SendableTaskSource,
}
impl RegisterJobResultHandler {
@@ -199,7 +198,7 @@ impl RegisterJobResultHandler {
.expect("No promise to resolve for SW Register job.");
// Step 1
- let _ = self.task_source.queue(
+ self.task_source.queue(
task!(reject_promise_with_security_error: move || {
let promise = promise.root();
let _ac = enter_realm(&*promise.global());
@@ -224,7 +223,7 @@ impl RegisterJobResultHandler {
.expect("No promise to resolve for SW Register job.");
// Step 1
- let _ = self.task_source.queue(task!(resolve_promise: move || {
+ self.task_source.queue(task!(resolve_promise: move || {
let promise = promise.root();
let global = promise.global();
let _ac = enter_realm(&*global);
diff --git a/components/script/dom/storage.rs b/components/script/dom/storage.rs
index 82e065a995e..d307b5817ef 100644
--- a/components/script/dom/storage.rs
+++ b/components/script/dom/storage.rs
@@ -208,10 +208,8 @@ impl Storage {
) {
let global = self.global();
let this = Trusted::new(self);
- global
- .task_manager()
- .dom_manipulation_task_source()
- .queue(task!(send_storage_notification: move || {
+ global.task_manager().dom_manipulation_task_source().queue(
+ task!(send_storage_notification: move || {
let this = this.root();
let global = this.global();
let event = StorageEvent::new(
@@ -227,7 +225,7 @@ impl Storage {
CanGc::note()
);
event.upcast::<Event>().fire(global.upcast(), CanGc::note());
- }))
- .unwrap();
+ }),
+ );
}
}
diff --git a/components/script/dom/subtlecrypto.rs b/components/script/dom/subtlecrypto.rs
index 077e367f394..7ac614b95fe 100644
--- a/components/script/dom/subtlecrypto.rs
+++ b/components/script/dom/subtlecrypto.rs
@@ -162,13 +162,12 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
ArrayBufferViewOrArrayBuffer::ArrayBuffer(buffer) => buffer.to_vec(),
};
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let this = Trusted::new(self);
let trusted_promise = TrustedPromise::new(promise.clone());
let trusted_key = Trusted::new(key);
let key_alg = key.algorithm();
let valid_usage = key.usages().contains(&KeyUsage::Encrypt);
- let _ = task_source.queue(
+ self.global().task_manager().dom_manipulation_task_source().queue(
task!(encrypt: move || {
let subtle = this.root();
let promise = trusted_promise.root();
@@ -217,13 +216,12 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
ArrayBufferViewOrArrayBuffer::ArrayBuffer(buffer) => buffer.to_vec(),
};
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let this = Trusted::new(self);
let trusted_promise = TrustedPromise::new(promise.clone());
let trusted_key = Trusted::new(key);
let key_alg = key.algorithm();
let valid_usage = key.usages().contains(&KeyUsage::Decrypt);
- let _ = task_source.queue(
+ self.global().task_manager().dom_manipulation_task_source().queue(
task!(decrypt: move || {
let subtle = this.root();
let promise = trusted_promise.root();
@@ -283,48 +281,50 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
// NOTE: We did that in preparation of Step 4.
// Step 6. Return promise and perform the remaining steps in parallel.
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let trusted_promise = TrustedPromise::new(promise.clone());
let trusted_key = Trusted::new(key);
- let _ = task_source.queue(task!(sign: move || {
- // Step 7. If the following steps or referenced procedures say to throw an error, reject promise
- // with the returned error and then terminate the algorithm.
- let promise = trusted_promise.root();
- let key = trusted_key.root();
-
- // Step 8. If the name member of normalizedAlgorithm is not equal to the name attribute of the
- // [[algorithm]] internal slot of key then throw an InvalidAccessError.
- if normalized_algorithm.name() != key.algorithm() {
- promise.reject_error(Error::InvalidAccess);
- return;
- }
+ self.global()
+ .task_manager()
+ .dom_manipulation_task_source()
+ .queue(task!(sign: move || {
+ // Step 7. If the following steps or referenced procedures say to throw an error, reject promise
+ // with the returned error and then terminate the algorithm.
+ let promise = trusted_promise.root();
+ let key = trusted_key.root();
- // Step 9. If the [[usages]] internal slot of key does not contain an entry that is "sign",
- // then throw an InvalidAccessError.
- if !key.usages().contains(&KeyUsage::Sign) {
- promise.reject_error(Error::InvalidAccess);
- return;
- }
+ // Step 8. If the name member of normalizedAlgorithm is not equal to the name attribute of the
+ // [[algorithm]] internal slot of key then throw an InvalidAccessError.
+ if normalized_algorithm.name() != key.algorithm() {
+ promise.reject_error(Error::InvalidAccess);
+ return;
+ }
- // Step 10. Let result be the result of performing the sign operation specified by normalizedAlgorithm
- // using key and algorithm and with data as message.
- let cx = GlobalScope::get_cx();
- let result = match normalized_algorithm.sign(cx, &key, &data) {
- Ok(signature) => signature,
- Err(e) => {
- promise.reject_error(e);
+ // Step 9. If the [[usages]] internal slot of key does not contain an entry that is "sign",
+ // then throw an InvalidAccessError.
+ if !key.usages().contains(&KeyUsage::Sign) {
+ promise.reject_error(Error::InvalidAccess);
return;
}
- };
- rooted!(in(*cx) let mut array_buffer_ptr = ptr::null_mut::<JSObject>());
- create_buffer_source::<ArrayBufferU8>(cx, &result, array_buffer_ptr.handle_mut())
- .expect("failed to create buffer source for exported key.");
+ // Step 10. Let result be the result of performing the sign operation specified by normalizedAlgorithm
+ // using key and algorithm and with data as message.
+ let cx = GlobalScope::get_cx();
+ let result = match normalized_algorithm.sign(cx, &key, &data) {
+ Ok(signature) => signature,
+ Err(e) => {
+ promise.reject_error(e);
+ return;
+ }
+ };
- // Step 9. Resolve promise with result.
- promise.resolve_native(&*array_buffer_ptr);
- }));
+ rooted!(in(*cx) let mut array_buffer_ptr = ptr::null_mut::<JSObject>());
+ create_buffer_source::<ArrayBufferU8>(cx, &result, array_buffer_ptr.handle_mut())
+ .expect("failed to create buffer source for exported key.");
+
+ // Step 9. Resolve promise with result.
+ promise.resolve_native(&*array_buffer_ptr);
+ }));
promise
}
@@ -373,44 +373,46 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
// NOTE: We did that in preparation of Step 6.
// Step 7. Return promise and perform the remaining steps in parallel.
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let trusted_promise = TrustedPromise::new(promise.clone());
let trusted_key = Trusted::new(key);
- let _ = task_source.queue(task!(sign: move || {
- // Step 8. If the following steps or referenced procedures say to throw an error, reject promise
- // with the returned error and then terminate the algorithm.
- let promise = trusted_promise.root();
- let key = trusted_key.root();
-
- // Step 9. If the name member of normalizedAlgorithm is not equal to the name attribute of the
- // [[algorithm]] internal slot of key then throw an InvalidAccessError.
- if normalized_algorithm.name() != key.algorithm() {
- promise.reject_error(Error::InvalidAccess);
- return;
- }
+ self.global()
+ .task_manager()
+ .dom_manipulation_task_source()
+ .queue(task!(sign: move || {
+ // Step 8. If the following steps or referenced procedures say to throw an error, reject promise
+ // with the returned error and then terminate the algorithm.
+ let promise = trusted_promise.root();
+ let key = trusted_key.root();
- // Step 10. If the [[usages]] internal slot of key does not contain an entry that is "verify",
- // then throw an InvalidAccessError.
- if !key.usages().contains(&KeyUsage::Verify) {
- promise.reject_error(Error::InvalidAccess);
- return;
- }
+ // Step 9. If the name member of normalizedAlgorithm is not equal to the name attribute of the
+ // [[algorithm]] internal slot of key then throw an InvalidAccessError.
+ if normalized_algorithm.name() != key.algorithm() {
+ promise.reject_error(Error::InvalidAccess);
+ return;
+ }
- // Step 1. Let result be the result of performing the verify operation specified by normalizedAlgorithm
- // using key, algorithm and signature and with data as message.
- let cx = GlobalScope::get_cx();
- let result = match normalized_algorithm.verify(cx, &key, &data, &signature) {
- Ok(result) => result,
- Err(e) => {
- promise.reject_error(e);
+ // Step 10. If the [[usages]] internal slot of key does not contain an entry that is "verify",
+ // then throw an InvalidAccessError.
+ if !key.usages().contains(&KeyUsage::Verify) {
+ promise.reject_error(Error::InvalidAccess);
return;
}
- };
- // Step 9. Resolve promise with result.
- promise.resolve_native(&result);
- }));
+ // Step 1. Let result be the result of performing the verify operation specified by normalizedAlgorithm
+ // using key, algorithm and signature and with data as message.
+ let cx = GlobalScope::get_cx();
+ let result = match normalized_algorithm.verify(cx, &key, &data, &signature) {
+ Ok(result) => result,
+ Err(e) => {
+ promise.reject_error(e);
+ return;
+ }
+ };
+
+ // Step 9. Resolve promise with result.
+ promise.resolve_native(&result);
+ }));
promise
}
@@ -449,10 +451,9 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
// NOTE: We did that in preparation of Step 4.
// Step 6. Return promise and perform the remaining steps in parallel.
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let trusted_promise = TrustedPromise::new(promise.clone());
- let _ = task_source.queue(
+ self.global().task_manager().dom_manipulation_task_source().queue(
task!(generate_key: move || {
// Step 7. If the following steps or referenced procedures say to throw an error, reject promise
// with the returned error and then terminate the algorithm.
@@ -501,19 +502,21 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
},
};
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let this = Trusted::new(self);
let trusted_promise = TrustedPromise::new(promise.clone());
- let _ = task_source.queue(task!(generate_key: move || {
- let subtle = this.root();
- let promise = trusted_promise.root();
- let key = normalized_algorithm.generate_key(&subtle, key_usages, extractable);
-
- match key {
- Ok(key) => promise.resolve_native(&key),
- Err(e) => promise.reject_error(e),
- }
- }));
+ self.global()
+ .task_manager()
+ .dom_manipulation_task_source()
+ .queue(task!(generate_key: move || {
+ let subtle = this.root();
+ let promise = trusted_promise.root();
+ let key = normalized_algorithm.generate_key(&subtle, key_usages, extractable);
+
+ match key {
+ Ok(key) => promise.resolve_native(&key),
+ Err(e) => promise.reject_error(e),
+ }
+ }));
promise
}
@@ -573,11 +576,10 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
// NOTE: We created the promise earlier, after Step 1.
// Step 9. Return promise and perform the remaining steps in parallel.
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let trusted_promise = TrustedPromise::new(promise.clone());
let trusted_base_key = Trusted::new(base_key);
let this = Trusted::new(self);
- let _ = task_source.queue(
+ self.global().task_manager().dom_manipulation_task_source().queue(
task!(derive_key: move || {
// Step 10. If the following steps or referenced procedures say to throw an error, reject promise
// with the returned error and then terminate the algorithm.
@@ -677,44 +679,46 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
// NOTE: We did that in preparation of Step 3.
// Step 5. Return promise and perform the remaining steps in parallel.
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let trusted_promise = TrustedPromise::new(promise.clone());
let trusted_base_key = Trusted::new(base_key);
- let _ = task_source.queue(task!(import_key: move || {
- // Step 6. If the following steps or referenced procedures say to throw an error,
- // reject promise with the returned error and then terminate the algorithm.
-
- // TODO Step 7. If the name member of normalizedAlgorithm is not equal to the name attribute
- // of the [[algorithm]] internal slot of baseKey then throw an InvalidAccessError.
- let promise = trusted_promise.root();
- let base_key = trusted_base_key.root();
+ self.global()
+ .task_manager()
+ .dom_manipulation_task_source()
+ .queue(task!(import_key: move || {
+ // Step 6. If the following steps or referenced procedures say to throw an error,
+ // reject promise with the returned error and then terminate the algorithm.
- // Step 8. If the [[usages]] internal slot of baseKey does not contain an entry that
- // is "deriveBits", then throw an InvalidAccessError.
- if !base_key.usages().contains(&KeyUsage::DeriveBits) {
- promise.reject_error(Error::InvalidAccess);
- return;
- }
+ // TODO Step 7. If the name member of normalizedAlgorithm is not equal to the name attribute
+ // of the [[algorithm]] internal slot of baseKey then throw an InvalidAccessError.
+ let promise = trusted_promise.root();
+ let base_key = trusted_base_key.root();
- // Step 9. Let result be the result of creating an ArrayBuffer containing the result of performing the
- // derive bits operation specified by normalizedAlgorithm using baseKey, algorithm and length.
- let cx = GlobalScope::get_cx();
- rooted!(in(*cx) let mut array_buffer_ptr = ptr::null_mut::<JSObject>());
- let result = match normalized_algorithm.derive_bits(&base_key, length) {
- Ok(derived_bits) => derived_bits,
- Err(e) => {
- promise.reject_error(e);
+ // Step 8. If the [[usages]] internal slot of baseKey does not contain an entry that
+ // is "deriveBits", then throw an InvalidAccessError.
+ if !base_key.usages().contains(&KeyUsage::DeriveBits) {
+ promise.reject_error(Error::InvalidAccess);
return;
}
- };
- create_buffer_source::<ArrayBufferU8>(cx, &result, array_buffer_ptr.handle_mut())
- .expect("failed to create buffer source for derived bits.");
+ // Step 9. Let result be the result of creating an ArrayBuffer containing the result of performing the
+ // derive bits operation specified by normalizedAlgorithm using baseKey, algorithm and length.
+ let cx = GlobalScope::get_cx();
+ rooted!(in(*cx) let mut array_buffer_ptr = ptr::null_mut::<JSObject>());
+ let result = match normalized_algorithm.derive_bits(&base_key, length) {
+ Ok(derived_bits) => derived_bits,
+ Err(e) => {
+ promise.reject_error(e);
+ return;
+ }
+ };
- // Step 10. Resolve promise with result.
- promise.resolve_native(&*array_buffer_ptr);
- }));
+ create_buffer_source::<ArrayBufferU8>(cx, &result, array_buffer_ptr.handle_mut())
+ .expect("failed to create buffer source for derived bits.");
+
+ // Step 10. Resolve promise with result.
+ promise.resolve_native(&*array_buffer_ptr);
+ }));
promise
}
@@ -766,10 +770,9 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
},
};
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let this = Trusted::new(self);
let trusted_promise = TrustedPromise::new(promise.clone());
- let _ = task_source.queue(
+ self.global().task_manager().dom_manipulation_task_source().queue(
task!(import_key: move || {
let subtle = this.root();
let promise = trusted_promise.root();
@@ -794,11 +797,10 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
) -> Rc<Promise> {
let promise = Promise::new_in_current_realm(comp, can_gc);
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let this = Trusted::new(self);
let trusted_key = Trusted::new(key);
let trusted_promise = TrustedPromise::new(promise.clone());
- let _ = task_source.queue(
+ self.global().task_manager().dom_manipulation_task_source().queue(
task!(export_key: move || {
let subtle = this.root();
let promise = trusted_promise.root();
@@ -861,12 +863,11 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
},
};
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let this = Trusted::new(self);
let trusted_key = Trusted::new(key);
let trusted_wrapping_key = Trusted::new(wrapping_key);
let trusted_promise = TrustedPromise::new(promise.clone());
- let _ = task_source.queue(
+ self.global().task_manager().dom_manipulation_task_source().queue(
task!(wrap_key: move || {
let subtle = this.root();
let promise = trusted_promise.root();
@@ -999,11 +1000,10 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
},
};
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let this = Trusted::new(self);
let trusted_key = Trusted::new(unwrapping_key);
let trusted_promise = TrustedPromise::new(promise.clone());
- let _ = task_source.queue(
+ self.global().task_manager().dom_manipulation_task_source().queue(
task!(unwrap_key: move || {
let subtle = this.root();
let promise = trusted_promise.root();
diff --git a/components/script/dom/texttracklist.rs b/components/script/dom/texttracklist.rs
index df84fce256f..f0e0f4bd93b 100644
--- a/components/script/dom/texttracklist.rs
+++ b/components/script/dom/texttracklist.rs
@@ -62,31 +62,32 @@ impl TextTrackList {
if self.find(track).is_none() {
self.dom_tracks.borrow_mut().push(Dom::from_ref(track));
- let this = Trusted::new(self);
- let task_source = self.global().task_manager().media_element_task_source();
-
let Some(idx) = self.find(track) else {
return;
};
- let _ = task_source.queue(task!(track_event_queue: move || {
- let this = this.root();
-
- if let Some(track) = this.item(idx) {
- let event = TrackEvent::new(
- &this.global(),
- atom!("addtrack"),
- false,
- false,
- &Some(VideoTrackOrAudioTrackOrTextTrack::TextTrack(
- DomRoot::from_ref(&track)
- )),
- CanGc::note()
- );
-
- event.upcast::<Event>().fire(this.upcast::<EventTarget>(), CanGc::note());
- }
- }));
+ let this = Trusted::new(self);
+ self.global()
+ .task_manager()
+ .media_element_task_source()
+ .queue(task!(track_event_queue: move || {
+ let this = this.root();
+
+ if let Some(track) = this.item(idx) {
+ let event = TrackEvent::new(
+ &this.global(),
+ atom!("addtrack"),
+ false,
+ false,
+ &Some(VideoTrackOrAudioTrackOrTextTrack::TextTrack(
+ DomRoot::from_ref(&track)
+ )),
+ CanGc::note()
+ );
+
+ event.upcast::<Event>().fire(this.upcast::<EventTarget>(), CanGc::note());
+ }
+ }));
track.add_track_list(self);
}
}
diff --git a/components/script/dom/videotracklist.rs b/components/script/dom/videotracklist.rs
index d42bcb24a59..03a27742ddb 100644
--- a/components/script/dom/videotracklist.rs
+++ b/components/script/dom/videotracklist.rs
@@ -81,9 +81,6 @@ impl VideoTrackList {
return;
}
- let this = Trusted::new(self);
- let task_source = self.global().task_manager().media_element_task_source();
-
if let Some(current) = self.selected_index() {
self.tracks.borrow()[current].set_selected(false);
}
@@ -93,10 +90,14 @@ impl VideoTrackList {
media_element.set_video_track(idx, value);
}
- let _ = task_source.queue(task!(media_track_change: move || {
- let this = this.root();
- this.upcast::<EventTarget>().fire_event(atom!("change"), CanGc::note());
- }));
+ let this = Trusted::new(self);
+ self.global()
+ .task_manager()
+ .media_element_task_source()
+ .queue(task!(media_track_change: move || {
+ let this = this.root();
+ this.upcast::<EventTarget>().fire_event(atom!("change"), CanGc::note());
+ }));
}
pub fn add(&self, track: &VideoTrack) {
diff --git a/components/script/dom/webglquery.rs b/components/script/dom/webglquery.rs
index 54d070da6d6..b60185a7abd 100644
--- a/components/script/dom/webglquery.rs
+++ b/components/script/dom/webglquery.rs
@@ -174,8 +174,7 @@ impl WebGLQuery {
self.global()
.task_manager()
.dom_manipulation_task_source()
- .queue(task)
- .unwrap();
+ .queue(task);
}
match pname {
diff --git a/components/script/dom/webglsync.rs b/components/script/dom/webglsync.rs
index 1cd3bdf379a..79b0ca9fd21 100644
--- a/components/script/dom/webglsync.rs
+++ b/components/script/dom/webglsync.rs
@@ -76,8 +76,7 @@ impl WebGLSync {
self.global()
.task_manager()
.dom_manipulation_task_source()
- .queue(task)
- .unwrap();
+ .queue(task);
},
_ => {},
}
@@ -111,8 +110,7 @@ impl WebGLSync {
self.global()
.task_manager()
.dom_manipulation_task_source()
- .queue(task)
- .unwrap();
+ .queue(task);
},
_ => {},
}
diff --git a/components/script/dom/webgpu/gpu.rs b/components/script/dom/webgpu/gpu.rs
index 8b1a2dd46a8..dd760229d58 100644
--- a/components/script/dom/webgpu/gpu.rs
+++ b/components/script/dom/webgpu/gpu.rs
@@ -71,7 +71,8 @@ pub fn response_async<T: AsyncWGPUListener + DomObject + 'static>(
let task_source = receiver
.global()
.task_manager()
- .dom_manipulation_task_source();
+ .dom_manipulation_task_source()
+ .to_sendable();
let mut trusted: Option<TrustedPromise> = Some(TrustedPromise::new(promise.clone()));
let trusted_receiver = Trusted::new(receiver);
ROUTER.add_typed_route(
@@ -88,12 +89,9 @@ pub fn response_async<T: AsyncWGPUListener + DomObject + 'static>(
trusted,
receiver: trusted_receiver.clone(),
};
- let result = task_source.queue(task!(process_webgpu_task: move|| {
+ task_source.queue(task!(process_webgpu_task: move|| {
context.response(message.unwrap(), CanGc::note());
}));
- if let Err(err) = result {
- error!("Failed to queue GPU listener-task: {:?}", err);
- }
}),
);
action_sender
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index 580a7553bf6..fa69d70e07a 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -40,7 +40,7 @@ use crate::dom::globalscope::GlobalScope;
use crate::dom::messageevent::MessageEvent;
use crate::script_runtime::CanGc;
use crate::task::TaskOnce;
-use crate::task_source::TaskSource;
+use crate::task_source::SendableTaskSource;
#[derive(Clone, Copy, Debug, JSTraceable, MallocSizeOf, PartialEq)]
enum WebSocketRequestState {
@@ -70,27 +70,25 @@ mod close_code {
fn close_the_websocket_connection(
address: Trusted<WebSocket>,
- task_source: &TaskSource,
+ task_source: &SendableTaskSource,
code: Option<u16>,
reason: String,
) {
- let close_task = CloseTask {
+ task_source.queue(CloseTask {
address,
failed: false,
code,
reason: Some(reason),
- };
- let _ = task_source.queue(close_task);
+ });
}
-fn fail_the_websocket_connection(address: Trusted<WebSocket>, task_source: &TaskSource) {
- let close_task = CloseTask {
+fn fail_the_websocket_connection(address: Trusted<WebSocket>, task_source: &SendableTaskSource) {
+ task_source.queue(CloseTask {
address,
failed: true,
code: Some(close_code::ABNORMAL),
reason: None,
- };
- let _ = task_source.queue(close_task);
+ });
}
#[dom_struct]
@@ -162,8 +160,7 @@ impl WebSocket {
self.clearing_buffer.set(true);
// TODO(mrobinson): Should this task be cancellable?
- let _ = self
- .global()
+ self.global()
.task_manager()
.websocket_task_source()
.queue_unconditionally(BufferedAmountTask { address });
@@ -270,7 +267,7 @@ impl WebSocketMethods<crate::DomTypeHolder> for WebSocket {
.core_resource_thread()
.send(CoreResourceMsg::Fetch(request, channels));
- let task_source = global.task_manager().websocket_task_source();
+ let task_source = global.task_manager().websocket_task_source().to_sendable();
ROUTER.add_typed_route(
dom_event_receiver.to_ipc_receiver(),
Box::new(move |message| match message.unwrap() {
@@ -279,14 +276,14 @@ impl WebSocketMethods<crate::DomTypeHolder> for WebSocket {
address: address.clone(),
protocol_in_use,
};
- let _ = task_source.queue(open_thread);
+ task_source.queue(open_thread);
},
WebSocketNetworkEvent::MessageReceived(message) => {
let message_thread = MessageReceivedTask {
address: address.clone(),
message,
};
- let _ = task_source.queue(message_thread);
+ task_source.queue(message_thread);
},
WebSocketNetworkEvent::Fail => {
fail_the_websocket_connection(address.clone(), &task_source);
@@ -426,9 +423,14 @@ impl WebSocketMethods<crate::DomTypeHolder> for WebSocket {
will abort connecting the websocket*/
self.ready_state.set(WebSocketRequestState::Closing);
- let address = Trusted::new(self);
- let task_source = self.global().task_manager().websocket_task_source();
- fail_the_websocket_connection(address, &task_source);
+ fail_the_websocket_connection(
+ Trusted::new(self),
+ &self
+ .global()
+ .task_manager()
+ .websocket_task_source()
+ .to_sendable(),
+ );
},
WebSocketRequestState::Open => {
self.ready_state.set(WebSocketRequestState::Closing);
diff --git a/components/script/dom/webxr/fakexrdevice.rs b/components/script/dom/webxr/fakexrdevice.rs
index a6f194b74a7..2910ed13490 100644
--- a/components/script/dom/webxr/fakexrdevice.rs
+++ b/components/script/dom/webxr/fakexrdevice.rs
@@ -306,7 +306,10 @@ impl FakeXRDeviceMethods<crate::DomTypeHolder> for FakeXRDevice {
let global = self.global();
let p = Promise::new(&global, can_gc);
let mut trusted = Some(TrustedPromise::new(p.clone()));
- let task_source = global.task_manager().dom_manipulation_task_source();
+ let task_source = global
+ .task_manager()
+ .dom_manipulation_task_source()
+ .to_sendable();
let (sender, receiver) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
ROUTER.add_typed_route(
@@ -315,7 +318,7 @@ impl FakeXRDeviceMethods<crate::DomTypeHolder> for FakeXRDevice {
let trusted = trusted
.take()
.expect("disconnect callback called multiple times");
- let _ = task_source.queue(trusted.resolve_task(()));
+ task_source.queue(trusted.resolve_task(()));
}),
);
self.disconnect(sender);
diff --git a/components/script/dom/webxr/xrsession.rs b/components/script/dom/webxr/xrsession.rs
index 278a6b34ce7..7e45d0c3f55 100644
--- a/components/script/dom/webxr/xrsession.rs
+++ b/components/script/dom/webxr/xrsession.rs
@@ -201,14 +201,17 @@ impl XRSession {
fn setup_raf_loop(&self, frame_receiver: IpcReceiver<Frame>) {
let this = Trusted::new(self);
let global = self.global();
- let task_source = global.task_manager().dom_manipulation_task_source();
+ let task_source = global
+ .task_manager()
+ .dom_manipulation_task_source()
+ .to_sendable();
ROUTER.add_typed_route(
frame_receiver,
Box::new(move |message| {
let frame: Frame = message.unwrap();
let time = CrossProcessInstant::now();
let this = this.clone();
- let _ = task_source.queue(task!(xr_raf_callback: move || {
+ task_source.queue(task!(xr_raf_callback: move || {
this.root().raf_callback(frame, time);
}));
}),
@@ -224,14 +227,17 @@ impl XRSession {
fn attach_event_handler(&self) {
let this = Trusted::new(self);
let global = self.global();
- let task_source = global.task_manager().dom_manipulation_task_source();
+ let task_source = global
+ .task_manager()
+ .dom_manipulation_task_source()
+ .to_sendable();
let (sender, receiver) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
ROUTER.add_typed_route(
receiver.to_ipc_receiver(),
Box::new(move |message| {
let this = this.clone();
- let _ = task_source.queue(task!(xr_event_callback: move || {
+ task_source.queue(task!(xr_event_callback: move || {
this.root().event_callback(message.unwrap(), CanGc::note());
}));
}),
@@ -254,14 +260,16 @@ impl XRSession {
return;
}
- let task_source = self.global().task_manager().dom_manipulation_task_source();
let this = Trusted::new(self);
// Queue a task so that it runs after resolve()'s microtasks complete
// so that content has a chance to attach a listener for inputsourceschange
- let _ = task_source.queue(task!(session_initial_inputs: move || {
- let this = this.root();
- this.input_sources.add_input_sources(&this, &initial_inputs, CanGc::note());
- }));
+ self.global()
+ .task_manager()
+ .dom_manipulation_task_source()
+ .queue(task!(session_initial_inputs: move || {
+ let this = this.root();
+ this.input_sources.add_input_sources(&this, &initial_inputs, CanGc::note());
+ }));
}
fn event_callback(&self, event: XREvent, can_gc: CanGc) {
@@ -1036,14 +1044,17 @@ impl XRSessionMethods<crate::DomTypeHolder> for XRSession {
let this = Trusted::new(self);
let global = self.global();
- let task_source = global.task_manager().dom_manipulation_task_source();
+ let task_source = global
+ .task_manager()
+ .dom_manipulation_task_source()
+ .to_sendable();
let (sender, receiver) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
ROUTER.add_typed_route(
receiver.to_ipc_receiver(),
Box::new(move |message| {
let this = this.clone();
- let _ = task_source.queue(task!(update_session_framerate: move || {
+ task_source.queue(task!(update_session_framerate: move || {
let session = this.root();
session.apply_nominal_framerate(message.unwrap(), CanGc::note());
if let Some(promise) = session.update_framerate_promise.borrow_mut().take() {
diff --git a/components/script/dom/webxr/xrsystem.rs b/components/script/dom/webxr/xrsystem.rs
index 079ade9c0d5..3eace3892f7 100644
--- a/components/script/dom/webxr/xrsystem.rs
+++ b/components/script/dom/webxr/xrsystem.rs
@@ -118,7 +118,10 @@ impl XRSystemMethods<crate::DomTypeHolder> for XRSystem {
let promise = Promise::new(&self.global(), can_gc);
let mut trusted = Some(TrustedPromise::new(promise.clone()));
let global = self.global();
- let task_source = global.task_manager().dom_manipulation_task_source();
+ let task_source = global
+ .task_manager()
+ .dom_manipulation_task_source()
+ .to_sendable();
let (sender, receiver) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
ROUTER.add_typed_route(
receiver.to_ipc_receiver(),
@@ -137,9 +140,9 @@ impl XRSystemMethods<crate::DomTypeHolder> for XRSystem {
return;
};
if let Ok(()) = message {
- let _ = task_source.queue(trusted.resolve_task(true));
+ task_source.queue(trusted.resolve_task(true));
} else {
- let _ = task_source.queue(trusted.resolve_task(false));
+ task_source.queue(trusted.resolve_task(false));
};
}),
);
@@ -234,7 +237,10 @@ impl XRSystemMethods<crate::DomTypeHolder> for XRSystem {
let mut trusted = Some(TrustedPromise::new(promise.clone()));
let this = Trusted::new(self);
- let task_source = global.task_manager().dom_manipulation_task_source();
+ let task_source = global
+ .task_manager()
+ .dom_manipulation_task_source()
+ .to_sendable();
let (sender, receiver) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
let (frame_sender, frame_receiver) = ipc_crate::channel().unwrap();
let mut frame_receiver = Some(frame_receiver);
@@ -251,7 +257,7 @@ impl XRSystemMethods<crate::DomTypeHolder> for XRSystem {
error!("requestSession callback given incorrect payload");
return;
};
- let _ = task_source.queue(task!(request_session: move || {
+ task_source.queue(task!(request_session: move || {
this.root().session_obtained(message, trusted.root(), mode, frame_receiver);
}));
}),
@@ -316,7 +322,6 @@ impl XRSystem {
xr.upcast::<EventTarget>().fire_bubbling_event(atom!("sessionavailable"), CanGc::note());
ScriptThread::set_user_interacting(interacting);
})
- )
- .unwrap();
+ );
}
}
diff --git a/components/script/dom/webxr/xrtest.rs b/components/script/dom/webxr/xrtest.rs
index 9f40f92fda9..59f489f980d 100644
--- a/components/script/dom/webxr/xrtest.rs
+++ b/components/script/dom/webxr/xrtest.rs
@@ -150,7 +150,10 @@ impl XRTestMethods<crate::DomTypeHolder> for XRTest {
let this = Trusted::new(self);
let mut trusted = Some(TrustedPromise::new(p.clone()));
- let task_source = global.task_manager().dom_manipulation_task_source();
+ let task_source = global
+ .task_manager()
+ .dom_manipulation_task_source()
+ .to_sendable();
let (sender, receiver) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
ROUTER.add_typed_route(
@@ -163,7 +166,7 @@ impl XRTestMethods<crate::DomTypeHolder> for XRTest {
let message =
message.expect("SimulateDeviceConnection callback given incorrect payload");
- let _ = task_source.queue(task!(request_session: move || {
+ task_source.queue(task!(request_session: move || {
this.root().device_obtained(message, trusted);
}));
}),
@@ -200,7 +203,10 @@ impl XRTestMethods<crate::DomTypeHolder> for XRTest {
devices.clear();
let mut trusted = Some(TrustedPromise::new(p.clone()));
- let task_source = global.task_manager().dom_manipulation_task_source();
+ let task_source = global
+ .task_manager()
+ .dom_manipulation_task_source()
+ .to_sendable();
ROUTER.add_typed_route(
receiver.to_ipc_receiver(),
@@ -210,7 +216,7 @@ impl XRTestMethods<crate::DomTypeHolder> for XRTest {
let trusted = trusted
.take()
.expect("DisconnectAllDevices disconnected more devices than expected");
- let _ = task_source.queue(trusted.resolve_task(()));
+ task_source.queue(trusted.resolve_task(()));
}
}),
);
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index 90e221b0ec2..270834da574 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -816,8 +816,7 @@ impl WindowMethods<crate::DomTypeHolder> for Window {
self.global()
.task_manager()
.dom_manipulation_task_source()
- .queue(task)
- .expect("Queuing window_close_browsing_context task to work");
+ .queue(task);
}
}
}
@@ -2335,8 +2334,7 @@ impl Window {
CanGc::note());
event.upcast::<Event>().fire(this.upcast::<EventTarget>(), CanGc::note());
});
- let _ = self
- .task_manager()
+ self.task_manager()
.dom_manipulation_task_source()
.queue(task);
doc.set_url(load_data.url.clone());
@@ -2946,8 +2944,7 @@ impl Window {
}
});
// TODO(#12718): Use the "posted message task source".
- let _ = self
- .task_manager()
+ self.task_manager()
.dom_manipulation_task_source()
.queue(task);
}
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index de9c8b44be9..c79671e2eee 100644
--- a/components/script/dom/xmlhttprequest.rs
+++ b/components/script/dom/xmlhttprequest.rs
@@ -73,7 +73,7 @@ use crate::dom::xmlhttprequestupload::XMLHttpRequestUpload;
use crate::fetch::FetchCanceller;
use crate::network_listener::{self, PreInvoke, ResourceTimingListener};
use crate::script_runtime::{CanGc, JSContext};
-use crate::task_source::{TaskSource, TaskSourceName};
+use crate::task_source::{SendableTaskSource, TaskSourceName};
use crate::timers::{OneshotTimerCallback, OneshotTimerHandle};
#[derive(Clone, Copy, Debug, JSTraceable, MallocSizeOf, PartialEq)]
@@ -294,7 +294,7 @@ impl XMLHttpRequest {
fn initiate_async_xhr(
context: Arc<Mutex<XHRContext>>,
- task_source: TaskSource,
+ task_source: SendableTaskSource,
global: &GlobalScope,
init: RequestBuilder,
cancellation_chan: ipc::IpcReceiver<()>,
@@ -1562,7 +1562,7 @@ impl XMLHttpRequest {
let (task_source, script_port) = if self.sync.get() {
let (sender, receiver) = global.new_script_pair();
(
- TaskSource {
+ SendableTaskSource {
sender,
pipeline_id: global.pipeline_id(),
name: TaskSourceName::Networking,
@@ -1571,7 +1571,10 @@ impl XMLHttpRequest {
Some(receiver),
)
} else {
- (global.task_manager().networking_task_source(), None)
+ (
+ global.task_manager().networking_task_source().to_sendable(),
+ None,
+ )
};
let cancel_receiver = self.canceller.borrow_mut().initialize();