Auto merge of #24044 - Eijebong:img-element-spec-update, r=jdm

Remove <img>'s historical progress events

Fixes #24011

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/24044)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2019-09-02 21:29:14 -04:00 committed by GitHub
commit 4f4e219e54
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 4 additions and 47 deletions

View file

@ -22,7 +22,7 @@ use crate::dom::bindings::str::{DOMString, USVString};
use crate::dom::document::Document;
use crate::dom::element::{reflect_cross_origin_attribute, set_cross_origin_attribute};
use crate::dom::element::{AttributeMutation, Element, RawLayoutElementHelpers};
use crate::dom::event::{Event, EventBubbles, EventCancelable};
use crate::dom::event::Event;
use crate::dom::eventtarget::EventTarget;
use crate::dom::globalscope::GlobalScope;
use crate::dom::htmlareaelement::HTMLAreaElement;
@ -37,7 +37,6 @@ use crate::dom::node::{
document_from_node, window_from_node, BindContext, Node, NodeDamage, ShadowIncluding,
};
use crate::dom::performanceresourcetiming::InitiatorType;
use crate::dom::progressevent::ProgressEvent;
use crate::dom::values::UNSIGNED_LONG_MAX;
use crate::dom::virtualmethods::VirtualMethods;
use crate::dom::window::Window;
@ -809,26 +808,7 @@ impl HTMLImageElement {
return;
},
};
// Step 10.
let target = Trusted::new(self.upcast::<EventTarget>());
// FIXME(nox): Why are errors silenced here?
let _ = task_source.queue(
task!(fire_progress_event: move || {
let target = target.root();
let event = ProgressEvent::new(
&target.global(),
atom!("loadstart"),
EventBubbles::DoesNotBubble,
EventCancelable::NotCancelable,
false,
0,
0,
);
event.upcast::<Event>().fire(&target);
}),
window.upcast(),
);
// Step 11
let base_url = document.base_url();
let parsed_url = base_url.join(&src.0);
@ -850,7 +830,6 @@ impl HTMLImageElement {
current_request.source_url = Some(USVString(src))
}
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

View file

@ -640951,7 +640951,7 @@
"support"
],
"html/semantics/embedded-content/the-img-element/invalid-src.html": [
"c3c57ee3c0a05019be4db6650eeefdd53648401e",
"37ea8ce754a3feaa3e305f10899632d231c92363",
"testharness"
],
"html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-after.html": [

View file

@ -1,4 +0,0 @@
[historical-progress-event.window.html]
[<img> does not support ProgressEvent or loadstart/progress/loadend]
expected: FAIL

View file

@ -9,41 +9,23 @@
async_test(function(t) {
var img = document.getElementById("brokenurl");
img.src = "http://[";
var errorevent = false;
var loadendevent = false;
// The errors should be queued in the event loop, so they should only trigger
// after this block of code finishes, not during the img.src setter itself
img.addEventListener('error', t.step_func(function() {
assert_false(loadendevent, "loadend should fire after error");
errorevent = true;
t.step_timeout(t.step_func_done(function() {
assert_true(loadendevent, "loadend event fired");
}), 0);
}));
img.addEventListener('loadend', t.step_func(function() {
assert_true(errorevent, "error event fired");
loadendevent = true;
t.step_timeout(t.step_func_done(), 0);
}));
}, 'src="http://["');
async_test(function(t) {
var img = document.getElementById("emptysrc");
img.src = "";
var loadendevent = false;
// Setting src to empty string triggers only error event.
// The errors should be queued in the event loop, so they should only trigger
// after this block of code finishes, not during the img.src setter itself
img.addEventListener('error', t.step_func(function() {
// Queue this check in the event loop to check there is no loadend event
// fired.
t.step_timeout(t.step_func_done(function() {
assert_false(loadendevent, "loadend event should not be fired");
}), 0);
}));
img.addEventListener('loadend', t.step_func(function() {
loadendevent = true;
t.step_timeout(t.step_func_done(), 0);
}));
}, 'src=""');