From 7a5d7e2e90f581e8ac52742ff75732f234f9bf4c Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Mon, 18 Sep 2017 10:22:18 +0200 Subject: [PATCH] Use task! to fail event source connections --- components/script/dom/eventsource.rs | 33 ++++++++++++---------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/components/script/dom/eventsource.rs b/components/script/dom/eventsource.rs index 839dfad5589..3e010c00663 100644 --- a/components/script/dom/eventsource.rs +++ b/components/script/dom/eventsource.rs @@ -102,15 +102,25 @@ impl EventSourceContext { let _ = event_source.global().networking_task_source().queue(task, &*event_source.global()); } + /// https://html.spec.whatwg.org/multipage/#fail-the-connection fn fail_the_connection(&self) { let event_source = self.event_source.root(); if self.gen_id != event_source.generation_id.get() { return; } - let task = box FailConnectionTask { - 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!(fail_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::Closed); + event_source.upcast::().fire_event(atom!("error")); + } + }), + &global, + ); } // https://html.spec.whatwg.org/multipage/#reestablish-the-connection @@ -524,21 +534,6 @@ impl Task for AnnounceConnectionTask { } } -pub struct FailConnectionTask { - event_source: Trusted, -} - -impl Task for FailConnectionTask { - // https://html.spec.whatwg.org/multipage/#fail-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::Closed); - event_source.upcast::().fire_event(atom!("error")); - } - } -} - #[derive(HeapSizeOf, JSTraceable)] pub struct EventSourceTimeoutCallback { #[ignore_heap_size_of = "Because it is non-owning"]