From 5b41e66f27419228e71b8f009ca6ed11a8da4f69 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Sun, 17 Sep 2017 23:09:27 +0200 Subject: [PATCH] Use task! to process image responses --- components/script/dom/htmlimageelement.rs | 46 +++++++---------------- 1 file changed, 13 insertions(+), 33 deletions(-) diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index f32be52442b..75ae78f6902 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -100,33 +100,6 @@ impl HTMLImageElement { } } -struct ImageResponseHandlerTask { - element: Trusted, - image: ImageResponse, - generation: u32, -} - -impl ImageResponseHandlerTask { - fn new(element: Trusted, image: ImageResponse, generation: u32) - -> ImageResponseHandlerTask { - ImageResponseHandlerTask { - element: element, - image: image, - generation: generation, - } - } -} - -impl Task for ImageResponseHandlerTask { - fn run(self: Box) { - let element = self.element.root(); - // Ignore any image response for a previous request that has been discarded. - if element.generation.get() == self.generation { - element.process_image_response(self.image); - } - } -} - /// The context required for asynchronously loading an external image. struct ImageContext { /// Reference to the script thread image cache. @@ -192,18 +165,25 @@ impl HTMLImageElement { let window = window_from_node(elem); let task_source = window.networking_task_source(); - let wrapper = window.task_canceller(); + let task_canceller = window.task_canceller(); let generation = elem.generation.get(); ROUTER.add_route(responder_receiver.to_opaque(), box move |message| { debug!("Got image {:?}", message); // Return the image via a message to the script thread, which marks // the element as dirty and triggers a reflow. - let task = ImageResponseHandlerTask::new( - trusted_node.clone(), - message.to().unwrap(), - generation, + let element = trusted_node.clone(); + let image = message.to().unwrap(); + // FIXME(nox): Why are errors silenced here? + let _ = task_source.queue_with_canceller( + box task!(process_image_response: move || { + let element = element.root(); + // Ignore any image response for a previous request that has been discarded. + if generation == element.generation.get() { + element.process_image_response(image); + } + }), + &task_canceller, ); - let _ = task_source.queue_with_canceller(box task, &wrapper); }); image_cache.add_listener(id, ImageResponder::new(responder_sender, id));