Auto merge of #15771 - jdm:img-panic, r=nox

Improve behaviour of image elements that perform multiple requests

This addresses cases where image elements end up making multiple requests, as well as makes the element respond to additional relevant mutations that trigger updating the image data.

---
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix #15709 (github issue number if applicable).
- [X] There are tests for these changes

<!-- 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/15771)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2017-03-08 04:28:58 -08:00 committed by GitHub
commit f90fc2fa88
10 changed files with 173 additions and 34 deletions

View file

@ -8337,6 +8337,18 @@
{}
]
],
"html/semantics/embedded-content/the-img-element/document-adopt-base-url.html": [
[
"/html/semantics/embedded-content/the-img-element/document-adopt-base-url.html",
[
[
"/html/semantics/embedded-content/the-img-element/document-base-url-ref.html",
"=="
]
],
{}
]
],
"html/semantics/embedded-content/the-img-element/document-base-url.html": [
[
"/html/semantics/embedded-content/the-img-element/document-base-url.html",
@ -93287,6 +93299,12 @@
{}
]
],
"html/semantics/embedded-content/the-img-element/delay-load-event.html": [
[
"/html/semantics/embedded-content/the-img-element/delay-load-event.html",
{}
]
],
"html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html": [
[
"/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html",
@ -176314,6 +176332,14 @@
"bdbfbe9a5908c6233bd7b9697a0762bd2e0f6ede",
"testharness"
],
"html/semantics/embedded-content/the-img-element/delay-load-event.html": [
"e4782535af755b29864fd3de67bbdd0de13f19d7",
"testharness"
],
"html/semantics/embedded-content/the-img-element/document-adopt-base-url.html": [
"a4b542eb344cca6bdcceceb3aa7006e900f5400f",
"reftest"
],
"html/semantics/embedded-content/the-img-element/document-base-url-ref.html": [
"add78257076d22891334b93c8072d098ace9b6eb",
"support"

View file

@ -12892,6 +12892,12 @@
{}
]
],
"mozilla/img_multiple_request.html": [
[
"/_mozilla/mozilla/img_multiple_request.html",
{}
]
],
"mozilla/img_width_height.html": [
[
"/_mozilla/mozilla/img_width_height.html",
@ -25375,6 +25381,10 @@
"3c4f36abed83367c851d943b1f25b8394de6fe75",
"testharness"
],
"mozilla/img_multiple_request.html": [
"0a6263ad87c9b3307f2dc694747b094a0517b79b",
"testharness"
],
"mozilla/img_width_height.html": [
"37a04735261a6d2b36c3d529ce81eda46ed6967e",
"testharness"

View file

@ -0,0 +1,25 @@
<html>
<head>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
async_test(function(t) {
var i = new Image();
i.src = "2x2.png";
i.src = "2x2.png";
i.onload = t.step_func(function() {
i.onload = this.unreached_func("Load event for aborted request.");
t.step_timeout(t.step_func_done(), 100);
});
}, "Multiple requests for the same URL do not trigger multiple load events.");
async_test(function(t) {
var i = new Image();
i.src = "test.png";
i.src = "2x2.png";
i.onload = t.step_func(function() {
i.onload = this.unreached_func("Load event for aborted request.");
t.step_timeout(t.step_func_done(), 100);
});
}, "Multiple requests for different URL do not trigger multiple load events.");
</script>

View file

@ -0,0 +1,17 @@
<html>
<head>
<title>Image element delays window's load event</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<img src="resources/cat.jpg?pipe=trickle(d2)">
<script>
async_test(function(t) {
var saw_img_load = false;
document.querySelector('img').onload = t.step_func(function() {
saw_img_load = true;
});
addEventListener('load', t.step_func_done(function() {
assert_true(saw_img_load);
}));
});
</script>

View file

@ -0,0 +1,14 @@
<!DOCTYPE HTML>
<meta charset="utf-8">
<title>Document base URL adopted img test</title>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-img-element" />
<link rel="match" href="document-base-url-ref.html">
<base href="resources/" />
<iframe></iframe>
<script>
var iframe = document.querySelector('iframe');
var i = iframe.contentDocument.createElement('img');
i.src = "cat.jpg";
document.body.appendChild(i);
iframe.remove();
</script>