From 37fe4fbc851e0b8c45e71923efd14cf42c9eda0e Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Mon, 18 Sep 2017 11:00:54 +0200 Subject: [PATCH] Use task! to settle promises for jobs --- components/script/serviceworkerjob.rs | 41 +++++++-------------------- 1 file changed, 10 insertions(+), 31 deletions(-) diff --git a/components/script/serviceworkerjob.rs b/components/script/serviceworkerjob.rs index fef1d02e4da..cae17fc65b1 100644 --- a/components/script/serviceworkerjob.rs +++ b/components/script/serviceworkerjob.rs @@ -23,7 +23,6 @@ use servo_url::ServoUrl; use std::cmp::PartialEq; use std::collections::HashMap; use std::rc::Rc; -use task::Task; use task_source::TaskSource; use task_source::dom_manipulation::DOMManipulationTaskSource; @@ -262,33 +261,6 @@ impl JobQueue { } } -struct AsyncPromiseSettle { - global: Trusted, - promise: TrustedPromise, - settle_type: SettleType, -} - -impl Task for AsyncPromiseSettle { - #[allow(unrooted_must_root)] - fn run(self: Box) { - let global = self.global.root(); - let settle_type = self.settle_type.clone(); - let promise = self.promise.root(); - settle_job_promise(&*global, &*promise, settle_type) - } -} - -impl AsyncPromiseSettle { - #[allow(unrooted_must_root)] - fn new(promise: Rc, settle_type: SettleType) -> AsyncPromiseSettle { - AsyncPromiseSettle { - global: Trusted::new(&*promise.global()), - promise: TrustedPromise::new(promise), - settle_type: settle_type, - } - } -} - fn settle_job_promise(global: &GlobalScope, promise: &Promise, settle: SettleType) { let _ac = JSAutoCompartment::new(global.get_cx(), promise.reflector().get_jsobject().get()); match settle { @@ -297,11 +269,18 @@ fn settle_job_promise(global: &GlobalScope, promise: &Promise, settle: SettleTyp }; } +#[allow(unrooted_must_root)] fn queue_settle_promise_for_job(job: &Job, settle: SettleType, task_source: &DOMManipulationTaskSource) { - let task = box AsyncPromiseSettle::new(job.promise.clone(), settle); let global = job.client.global(); - let _ = task_source.queue(task, &*global); - + let promise = TrustedPromise::new(job.promise.clone()); + // FIXME(nox): Why are errors silenced here? + let _ = task_source.queue( + box task!(settle_promise_for_job: move || { + let promise = promise.root(); + settle_job_promise(&promise.global(), &promise, settle) + }), + &*global, + ); } // https://w3c.github.io/ServiceWorker/#reject-job-promise-algorithm