diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2017-09-17 23:17:19 +0200 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2017-09-18 02:47:21 +0200 |
commit | b3e27509b7424c652d6a7de92709f427a8309d67 (patch) | |
tree | df3288b073ba98f17873b8495d3c3046a54382c1 /components/script/dom/htmlimageelement.rs | |
parent | 5b41e66f27419228e71b8f009ca6ed11a8da4f69 (diff) | |
download | servo-b3e27509b7424c652d6a7de92709f427a8309d67.tar.gz servo-b3e27509b7424c652d6a7de92709f427a8309d67.zip |
Use task! for step 11.4 of updating the image data
Diffstat (limited to 'components/script/dom/htmlimageelement.rs')
-rw-r--r-- | components/script/dom/htmlimageelement.rs | 62 |
1 files changed, 26 insertions, 36 deletions
diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index 75ae78f6902..30ef64da97e 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -56,7 +56,6 @@ use std::default::Default; use std::i32; use std::sync::{Arc, Mutex}; use style::attr::{AttrValue, LengthOrPercentageOrAuto}; -use task::Task; use task_source::TaskSource; #[derive(Clone, Copy, HeapSizeOf, JSTraceable)] @@ -336,36 +335,6 @@ impl HTMLImageElement { 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 fn update_source_set(&self) -> Vec<DOMString> { let elem = self.upcast::<Element>(); @@ -479,13 +448,14 @@ impl HTMLImageElement { }, }; // Step 10. + let target = Trusted::new(self.upcast::<EventTarget>()); // FIXME(nox): Why are errors silenced here? let _ = task_source.queue( box task!(fire_progress_event: move || { - let this = this.root(); + let target = target.root(); let event = ProgressEvent::new( - &this.global(), + &target.global(), atom!("loadstart"), EventBubbles::DoesNotBubble, EventCancelable::NotCancelable, @@ -493,7 +463,7 @@ impl HTMLImageElement { 0, 0, ); - event.upcast::<Event>().fire(this.upcast()); + event.upcast::<Event>().fire(&target); }), window.upcast(), ); @@ -506,8 +476,28 @@ impl HTMLImageElement { self.prepare_image_request(&url, &src); }, Err(_) => { - // Step 11.1-11.5 - self.set_current_request_url_to_selected_fire_error_and_loadend(src); + // Step 11.1-11.5. + 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(), + ); } } } |