aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/serviceworkerjob.rs
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2017-09-18 11:00:54 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2017-09-18 21:41:36 +0200
commit37fe4fbc851e0b8c45e71923efd14cf42c9eda0e (patch)
tree1c44e6ebaafaefa328ed425481c2c49215b551b6 /components/script/serviceworkerjob.rs
parent99ff976e8507e647beec9892ca67b46753cf697e (diff)
downloadservo-37fe4fbc851e0b8c45e71923efd14cf42c9eda0e.tar.gz
servo-37fe4fbc851e0b8c45e71923efd14cf42c9eda0e.zip
Use task! to settle promises for jobs
Diffstat (limited to 'components/script/serviceworkerjob.rs')
-rw-r--r--components/script/serviceworkerjob.rs41
1 files 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<GlobalScope>,
- promise: TrustedPromise,
- settle_type: SettleType,
-}
-
-impl Task for AsyncPromiseSettle {
- #[allow(unrooted_must_root)]
- fn run(self: Box<Self>) {
- 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<Promise>, 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