mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
Use task! to process image responses
This commit is contained in:
parent
3592108759
commit
5b41e66f27
1 changed files with 13 additions and 33 deletions
|
@ -100,33 +100,6 @@ impl HTMLImageElement {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ImageResponseHandlerTask {
|
|
||||||
element: Trusted<HTMLImageElement>,
|
|
||||||
image: ImageResponse,
|
|
||||||
generation: u32,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ImageResponseHandlerTask {
|
|
||||||
fn new(element: Trusted<HTMLImageElement>, image: ImageResponse, generation: u32)
|
|
||||||
-> ImageResponseHandlerTask {
|
|
||||||
ImageResponseHandlerTask {
|
|
||||||
element: element,
|
|
||||||
image: image,
|
|
||||||
generation: generation,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Task for ImageResponseHandlerTask {
|
|
||||||
fn run(self: Box<Self>) {
|
|
||||||
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.
|
/// The context required for asynchronously loading an external image.
|
||||||
struct ImageContext {
|
struct ImageContext {
|
||||||
/// Reference to the script thread image cache.
|
/// Reference to the script thread image cache.
|
||||||
|
@ -192,18 +165,25 @@ impl HTMLImageElement {
|
||||||
|
|
||||||
let window = window_from_node(elem);
|
let window = window_from_node(elem);
|
||||||
let task_source = window.networking_task_source();
|
let task_source = window.networking_task_source();
|
||||||
let wrapper = window.task_canceller();
|
let task_canceller = window.task_canceller();
|
||||||
let generation = elem.generation.get();
|
let generation = elem.generation.get();
|
||||||
ROUTER.add_route(responder_receiver.to_opaque(), box move |message| {
|
ROUTER.add_route(responder_receiver.to_opaque(), box move |message| {
|
||||||
debug!("Got image {:?}", message);
|
debug!("Got image {:?}", message);
|
||||||
// Return the image via a message to the script thread, which marks
|
// Return the image via a message to the script thread, which marks
|
||||||
// the element as dirty and triggers a reflow.
|
// the element as dirty and triggers a reflow.
|
||||||
let task = ImageResponseHandlerTask::new(
|
let element = trusted_node.clone();
|
||||||
trusted_node.clone(),
|
let image = message.to().unwrap();
|
||||||
message.to().unwrap(),
|
// FIXME(nox): Why are errors silenced here?
|
||||||
generation,
|
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));
|
image_cache.add_listener(id, ImageResponder::new(responder_sender, id));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue