From ad41ce7a6f679f4fda1382f010a0b7b145421708 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Mon, 18 Sep 2017 10:25:19 +0200 Subject: [PATCH] Use task! to announce event source connections --- components/script/dom/eventsource.rs | 34 ++++++++++++---------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/components/script/dom/eventsource.rs b/components/script/dom/eventsource.rs index 3e010c00663..bf4c1c78c95 100644 --- a/components/script/dom/eventsource.rs +++ b/components/script/dom/eventsource.rs @@ -33,7 +33,6 @@ use std::cell::Cell; use std::mem; use std::str::{Chars, FromStr}; use std::sync::{Arc, Mutex}; -use task::Task; use task_source::TaskSource; use timers::OneshotTimerCallback; use utf8; @@ -91,15 +90,25 @@ struct EventSourceContext { } impl EventSourceContext { + /// https://html.spec.whatwg.org/multipage/#announce-the-connection fn announce_the_connection(&self) { let event_source = self.event_source.root(); if self.gen_id != event_source.generation_id.get() { return; } - let task = box AnnounceConnectionTask { - event_source: self.event_source.clone() - }; - let _ = event_source.global().networking_task_source().queue(task, &*event_source.global()); + let global = event_source.global(); + let event_source = self.event_source.clone(); + // FIXME(nox): Why are errors silenced here? + let _ = global.networking_task_source().queue( + box task!(announce_the_event_source_connection: move || { + let event_source = event_source.root(); + if event_source.ready_state.get() != ReadyState::Closed { + event_source.ready_state.set(ReadyState::Open); + event_source.upcast::().fire_event(atom!("open")); + } + }), + &global, + ); } /// https://html.spec.whatwg.org/multipage/#fail-the-connection @@ -519,21 +528,6 @@ impl EventSourceMethods for EventSource { } } -pub struct AnnounceConnectionTask { - event_source: Trusted, -} - -impl Task for AnnounceConnectionTask { - // https://html.spec.whatwg.org/multipage/#announce-the-connection - fn run(self: Box) { - let event_source = self.event_source.root(); - if event_source.ready_state.get() != ReadyState::Closed { - event_source.ready_state.set(ReadyState::Open); - event_source.upcast::().fire_event(atom!("open")); - } - } -} - #[derive(HeapSizeOf, JSTraceable)] pub struct EventSourceTimeoutCallback { #[ignore_heap_size_of = "Because it is non-owning"]