summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/decode/image-decode.html
blob: fac61a1446b6a3dde64125f49c69dc6ecec7bd28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<!DOCTYPE html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>HTMLImageElement.prototype.decode(), basic tests.</title>
<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
<link rel=help href="https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-decode">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<script>
"use strict";

// src tests
// -------------------
promise_test(function() {
  var img = new Image();
  img.src = "/images/green.png";
  return img.decode().then(function(arg) {
    assert_equals(arg, undefined);
  });
}, document.title + " Image with PNG src decodes with undefined.");

promise_test(function() {
  var img = new Image();
  img.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAA" +
            "D91JpzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QUSEioKsyAgyw" +
            "AAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAAWSURBVA" +
            "jXY9y3bx8DAwPL58+fGRgYACktBRltLfebAAAAAElFTkSuQmCC";
  return img.decode().then(function(arg) {
    assert_equals(arg, undefined);
  });
}, document.title + " Image with PNG data URL src decodes with undefined.");

promise_test(function() {
  var img = new Image();
  img.src = "/images/green.svg";
  return img.decode().then(function(arg) {
    assert_equals(arg, undefined);
  });
}, document.title + " Image with SVG src decodes with undefined.");

promise_test(function(t) {
  var img = new Image();
  img.src = "/non/existent/path.png";
  var promise = img.decode();
  return promise_rejects_dom(t, "EncodingError", promise);
}, document.title + " Non-existent src fails decode.");

promise_test(function(t) {
  var inactive_doc = document.implementation.createHTMLDocument();
  var img = inactive_doc.createElement("img");
  img.src = "/images/green.png";
  var promise = img.decode();
  return promise_rejects_dom(t, "EncodingError", promise);
}, document.title + " Inactive document fails decode.");

promise_test(function(t) {
  var inactive_doc = document.implementation.createHTMLDocument();
  var img = document.createElement("img");
  img.src = "/images/green.png";
  var promise = img.decode();
  inactive_doc.body.appendChild(img);
  return promise_rejects_dom(t, "EncodingError", promise);
}, document.title + " Adopted active image into inactive document fails decode.");

promise_test(function() {
  var inactive_doc = document.implementation.createHTMLDocument();
  var img = inactive_doc.createElement("img");
  img.src = "/images/green.png";
  document.body.appendChild(img);
  return img.decode().then(function(arg) {
    assert_equals(arg, undefined);
  });
}, document.title + " Adopted inactive image into active document succeeds.");

promise_test(function(t) {
  var img = new Image();
  img.src = "data:image/png;base64,iVBO00PDR0BADBEEF00KGg";
  var promise = img.decode();
  return promise_rejects_dom(t, "EncodingError", promise);
}, document.title + " Corrupt image in src fails decode.");

promise_test(function(t) {
  var img = new Image();
  var promise = img.decode();
  return promise_rejects_dom(t, "EncodingError", promise);
}, document.title + " Image without src/srcset fails decode.");

promise_test(function() {
  var img = new Image();
  img.src = "/images/green.png";
  var first_promise = img.decode();
  var second_promise = img.decode();
  assert_not_equals(first_promise, second_promise);
  return Promise.all([
    first_promise,
    second_promise
  ]);
}, document.title + " Multiple decodes for images with src succeed.");

// srcset tests
// -------------------
promise_test(function() {
  var img = new Image();
  img.srcset = "/images/green.png 100w";
  return img.decode().then(function(arg) {
    assert_equals(arg, undefined);
  });
}, document.title + " Image with PNG srcset decodes with undefined.");

promise_test(function() {
  var img = new Image();
  img.srcset = "/images/green.svg 100w";
  return img.decode().then(function(arg) {
    assert_equals(arg, undefined);
  });
}, document.title + " Image with SVG srcset decodes with undefined.");

promise_test(function(t) {
  var img = new Image();
  img.srcset = "/non/existent/path.png 100w";
  var promise = img.decode();
  return promise_rejects_dom(t, "EncodingError", promise);
}, document.title + " Non-existent srcset fails decode.");

promise_test(function() {
  var img = new Image();
  img.srcset = "/images/green.png 100w";
  var first_promise = img.decode();
  var second_promise = img.decode();
  assert_not_equals(first_promise, second_promise);
  return Promise.all([
    first_promise,
    second_promise
  ]);
}, document.title + " Multiple decodes for images with srcset succeed.");

</script>