mirror of
https://github.com/servo/servo.git
synced 2025-07-24 07:40:27 +01:00
Use task! for step 11.4 of updating the image data
This commit is contained in:
parent
5b41e66f27
commit
b3e27509b7
1 changed files with 26 additions and 36 deletions
|
@ -56,7 +56,6 @@ use std::default::Default;
|
||||||
use std::i32;
|
use std::i32;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use style::attr::{AttrValue, LengthOrPercentageOrAuto};
|
use style::attr::{AttrValue, LengthOrPercentageOrAuto};
|
||||||
use task::Task;
|
|
||||||
use task_source::TaskSource;
|
use task_source::TaskSource;
|
||||||
|
|
||||||
#[derive(Clone, Copy, HeapSizeOf, JSTraceable)]
|
#[derive(Clone, Copy, HeapSizeOf, JSTraceable)]
|
||||||
|
@ -336,36 +335,6 @@ impl HTMLImageElement {
|
||||||
request.metadata = None;
|
request.metadata = None;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Step 11.4 of https://html.spec.whatwg.org/multipage/#update-the-image-data
|
|
||||||
fn set_current_request_url_to_selected_fire_error_and_loadend(&self, src: DOMString) {
|
|
||||||
struct SetCurrentRequestUrlTask {
|
|
||||||
img: Trusted<HTMLImageElement>,
|
|
||||||
src: String,
|
|
||||||
}
|
|
||||||
impl Task for SetCurrentRequestUrlTask {
|
|
||||||
fn run(self: Box<Self>) {
|
|
||||||
let img = self.img.root();
|
|
||||||
{
|
|
||||||
let mut current_request = img.current_request.borrow_mut();
|
|
||||||
current_request.source_url = Some(DOMString::from_string(self.src));
|
|
||||||
}
|
|
||||||
img.upcast::<EventTarget>().fire_event(atom!("error"));
|
|
||||||
img.upcast::<EventTarget>().fire_event(atom!("loadend"));
|
|
||||||
img.abort_request(State::Broken, ImageRequestPhase::Current);
|
|
||||||
img.abort_request(State::Broken, ImageRequestPhase::Pending);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let task = box SetCurrentRequestUrlTask {
|
|
||||||
img: Trusted::new(self),
|
|
||||||
src: src.into()
|
|
||||||
};
|
|
||||||
let document = document_from_node(self);
|
|
||||||
let window = document.window();
|
|
||||||
let task_source = window.dom_manipulation_task_source();
|
|
||||||
let _ = task_source.queue(task, window.upcast());
|
|
||||||
}
|
|
||||||
|
|
||||||
/// https://html.spec.whatwg.org/multipage/#update-the-source-set
|
/// https://html.spec.whatwg.org/multipage/#update-the-source-set
|
||||||
fn update_source_set(&self) -> Vec<DOMString> {
|
fn update_source_set(&self) -> Vec<DOMString> {
|
||||||
let elem = self.upcast::<Element>();
|
let elem = self.upcast::<Element>();
|
||||||
|
@ -479,13 +448,14 @@ impl HTMLImageElement {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
// Step 10.
|
// Step 10.
|
||||||
|
let target = Trusted::new(self.upcast::<EventTarget>());
|
||||||
// FIXME(nox): Why are errors silenced here?
|
// FIXME(nox): Why are errors silenced here?
|
||||||
let _ = task_source.queue(
|
let _ = task_source.queue(
|
||||||
box task!(fire_progress_event: move || {
|
box task!(fire_progress_event: move || {
|
||||||
let this = this.root();
|
let target = target.root();
|
||||||
|
|
||||||
let event = ProgressEvent::new(
|
let event = ProgressEvent::new(
|
||||||
&this.global(),
|
&target.global(),
|
||||||
atom!("loadstart"),
|
atom!("loadstart"),
|
||||||
EventBubbles::DoesNotBubble,
|
EventBubbles::DoesNotBubble,
|
||||||
EventCancelable::NotCancelable,
|
EventCancelable::NotCancelable,
|
||||||
|
@ -493,7 +463,7 @@ impl HTMLImageElement {
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
);
|
);
|
||||||
event.upcast::<Event>().fire(this.upcast());
|
event.upcast::<Event>().fire(&target);
|
||||||
}),
|
}),
|
||||||
window.upcast(),
|
window.upcast(),
|
||||||
);
|
);
|
||||||
|
@ -506,8 +476,28 @@ impl HTMLImageElement {
|
||||||
self.prepare_image_request(&url, &src);
|
self.prepare_image_request(&url, &src);
|
||||||
},
|
},
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
// Step 11.1-11.5
|
// Step 11.1-11.5.
|
||||||
self.set_current_request_url_to_selected_fire_error_and_loadend(src);
|
let src = String::from(src);
|
||||||
|
// FIXME(nox): Why are errors silenced here?
|
||||||
|
let _ = task_source.queue(
|
||||||
|
box task!(image_selected_source_error: move || {
|
||||||
|
let this = this.root();
|
||||||
|
{
|
||||||
|
let mut current_request =
|
||||||
|
this.current_request.borrow_mut();
|
||||||
|
current_request.source_url = Some(src.into());
|
||||||
|
}
|
||||||
|
this.upcast::<EventTarget>().fire_event(atom!("error"));
|
||||||
|
this.upcast::<EventTarget>().fire_event(atom!("loadend"));
|
||||||
|
|
||||||
|
// FIXME(nox): According to the spec, setting the current
|
||||||
|
// request to the broken state is done prior to queuing a
|
||||||
|
// task, why is this here?
|
||||||
|
this.abort_request(State::Broken, ImageRequestPhase::Current);
|
||||||
|
this.abort_request(State::Broken, ImageRequestPhase::Pending);
|
||||||
|
}),
|
||||||
|
window.upcast(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue