relevant-mutations.html (27369B)
1 <!doctype html> 2 <title>img relevant mutations</title> 3 <meta name="timeout" content="long"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="support/relevant-mutations.js"></script> 7 <div id=log></div> 8 9 <!-- should invoke update the image data --> 10 11 <img data-desc="src set"> 12 <img src="/images/green-2x2.png" data-desc="src changed"> 13 <img src="/images/green-2x2.png" data-desc="src removed"> 14 15 <img data-desc="srcset set"> 16 <img srcset="/images/green-2x2.png" data-desc="srcset changed"> 17 <img srcset="/images/green-2x2.png" data-desc="srcset removed"> 18 19 <img data-desc="sizes set"> 20 <img sizes="" data-desc="sizes changed"> 21 <img sizes="" data-desc="sizes removed"> 22 23 <img src="/images/green-2x2.png" data-desc="src set to same value"> 24 25 <img data-desc="crossorigin absent to empty, src absent"> 26 <img data-desc="crossorigin absent to anonymous, src absent"> 27 <img data-desc="crossorigin absent to use-credentials, src absent"> 28 <img crossorigin data-desc="crossorigin empty to absent, src absent"> 29 <img crossorigin data-desc="crossorigin empty to use-credentials, src absent"> 30 <img crossorigin=anonymous data-desc="crossorigin anonymous to absent, src absent"> 31 <img crossorigin=anonymous data-desc="crossorigin anonymous to use-credentials, src absent"> 32 <img crossorigin=use-credentials data-desc="crossorigin use-credentials to absent, src absent"> 33 <img crossorigin=use-credentials data-desc="crossorigin use-credentials to empty, src absent"> 34 <img crossorigin=use-credentials data-desc="crossorigin use-credentials to anonymous, src absent"> 35 <img crossorigin=use-credentials data-desc="crossorigin use-credentials to invalid, src absent"> 36 37 <img src="/images/green-2x2.png" data-desc="crossorigin absent to empty, src already set"> 38 <img src="/images/green-2x2.png" data-desc="crossorigin absent to anonymous, src already set"> 39 <img src="/images/green-2x2.png" data-desc="crossorigin absent to use-credentials, src already set"> 40 <img src="/images/green-2x2.png" crossorigin data-desc="crossorigin empty to absent, src already set"> 41 <img src="/images/green-2x2.png" crossorigin data-desc="crossorigin empty to use-credentials, src already set"> 42 <img src="/images/green-2x2.png" crossorigin=anonymous data-desc="crossorigin anonymous to absent, src already set"> 43 <img src="/images/green-2x2.png" crossorigin=anonymous data-desc="crossorigin anonymous to use-credentials, src already set"> 44 <img src="/images/green-2x2.png" crossorigin=use-credentials data-desc="crossorigin use-credentials to absent, src already set"> 45 <img src="/images/green-2x2.png" crossorigin=use-credentials data-desc="crossorigin use-credentials to empty, src already set"> 46 <img src="/images/green-2x2.png" crossorigin=use-credentials data-desc="crossorigin use-credentials to anonymous, src already set"> 47 <img src="/images/green-2x2.png" crossorigin=use-credentials data-desc="crossorigin use-credentials to invalid, src already set"> 48 49 <img data-desc="referrerpolicy absent to no-referrer-when-downgrade, src absent"> 50 <img data-desc="referrerpolicy absent to no-referrer, src absent"> 51 <img referrerpolicy data-desc="referrerpolicy empty to no-referrer-when-downgrade, src absent"> 52 <img referrerpolicy data-desc="referrerpolicy empty to no-referrer, src absent"> 53 <img referrerpolicy=no-referrer-when-downgrade data-desc="referrerpolicy no-referrer-when-downgrade to absent, src absent"> 54 <img referrerpolicy=no-referrer-when-downgrade data-desc="referrerpolicy no-referrer-when-downgrade to empty, src absent"> 55 <img referrerpolicy=no-referrer-when-downgrade data-desc="referrerpolicy no-referrer-when-downgrade to no-referrer, src absent"> 56 <img referrerpolicy=no-referrer-when-downgrade data-desc="referrerpolicy no-referrer-when-downgrade to invalid, src absent"> 57 <img referrerpolicy=no-referrer data-desc="referrerpolicy no-referrer to absent, src absent"> 58 <img referrerpolicy=no-referrer data-desc="referrerpolicy no-referrer to empty, src absent"> 59 <img referrerpolicy=no-referrer data-desc="referrerpolicy no-referrer to no-referrer-when-downgrade, src absent"> 60 <img referrerpolicy=no-referrer data-desc="referrerpolicy no-referrer to invalid, src absent"> 61 62 <img src="/images/green-2x2.png" data-desc="referrerpolicy absent to no-referrer-when-downgrade, src already set"> 63 <img src="/images/green-2x2.png" data-desc="referrerpolicy absent to no-referrer, src already set"> 64 <img src="/images/green-2x2.png" referrerpolicy data-desc="referrerpolicy empty to no-referrer-when-downgrade, src already set"> 65 <img src="/images/green-2x2.png" referrerpolicy data-desc="referrerpolicy empty to no-referrer, src already set"> 66 <img src="/images/green-2x2.png" referrerpolicy=no-referrer-when-downgrade data-desc="referrerpolicy no-referrer-when-downgrade to absent, src already set"> 67 <img src="/images/green-2x2.png" referrerpolicy=no-referrer-when-downgrade data-desc="referrerpolicy no-referrer-when-downgrade to empty, src already set"> 68 <img src="/images/green-2x2.png" referrerpolicy=no-referrer-when-downgrade data-desc="referrerpolicy no-referrer-when-downgrade to no-referrer, src already set"> 69 <img src="/images/green-2x2.png" referrerpolicy=no-referrer-when-downgrade data-desc="referrerpolicy no-referrer-when-downgrade to invalid, src already set"> 70 <img src="/images/green-2x2.png" referrerpolicy=no-referrer data-desc="referrerpolicy no-referrer to absent, src already set"> 71 <img src="/images/green-2x2.png" referrerpolicy=no-referrer data-desc="referrerpolicy no-referrer to empty, src already set"> 72 <img src="/images/green-2x2.png" referrerpolicy=no-referrer data-desc="referrerpolicy no-referrer to no-referrer-when-downgrade, src already set"> 73 <img src="/images/green-2x2.png" referrerpolicy=no-referrer data-desc="referrerpolicy no-referrer to invalid, src already set"> 74 75 <img src="/images/green-2x2.png" data-desc="inserted into picture"><picture></picture> 76 77 <picture><img src="/images/green-2x2.png" data-desc="removed from picture"></picture> 78 79 <picture><img src="/images/green-2x2.png" data-desc="parent is picture, previous source inserted"></picture> 80 81 <picture><source><img src="/images/green-2x2.png" data-desc="parent is picture, previous source removed"></picture> 82 83 <picture><source><img src="/images/green-2x2.png" data-desc="parent is picture, previous source has srcset set"></picture> 84 <picture><source srcset=""><img src="/images/green-2x2.png" data-desc="parent is picture, previous source has srcset changed"></picture> 85 <picture><source srcset=""><img src="/images/green-2x2.png" data-desc="parent is picture, previous source has srcset removed"></picture> 86 87 <picture><source><img src="/images/green-2x2.png" data-desc="parent is picture, previous source has sizes set"></picture> 88 <picture><source sizes=""><img src="/images/green-2x2.png" data-desc="parent is picture, previous source has sizes changed"></picture> 89 <picture><source sizes=""><img src="/images/green-2x2.png" data-desc="parent is picture, previous source has sizes removed"></picture> 90 91 <picture><source><img src="/images/green-2x2.png" data-desc="parent is picture, previous source has media set"></picture> 92 <picture><source media=""><img src="/images/green-2x2.png" data-desc="parent is picture, previous source has media changed"></picture> 93 <picture><source media=""><img src="/images/green-2x2.png" data-desc="parent is picture, previous source has media removed"></picture> 94 95 <picture><source><img src="/images/green-2x2.png" data-desc="parent is picture, previous source has type set"></picture> 96 <picture><source type=""><img src="/images/green-2x2.png" data-desc="parent is picture, previous source has type changed"></picture> 97 <picture><source type=""><img src="/images/green-2x2.png" data-desc="parent is picture, previous source has type removed"></picture> 98 99 <img srcset="/images/green-2x2.png" data-desc="srcset is set to same value"> 100 <img srcset="/images/green-2x2.png" sizes data-desc="sizes is set to same value"> 101 102 <img src="/images/green-2x2.png" data-desc="crossorigin state not changed: absent, removeAttribute"> 103 <img src="/images/green-2x2.png" crossorigin data-desc="crossorigin state not changed: empty to anonymous"> 104 <img src="/images/green-2x2.png" crossorigin=anonymous data-desc="crossorigin state not changed: anonymous to foobar"> 105 <img src="/images/green-2x2.png" crossorigin=use-credentials data-desc="crossorigin state not changed: use-credentials to USE-CREDENTIALS"> 106 107 <img src="/images/green-2x2.png" data-desc="referrerpolicy state not changed: absent, removeAttribute"> 108 <img src="/images/green-2x2.png" referrerpolicy data-desc="referrerpolicy state not changed: empty to empty"> 109 <img src="/images/green-2x2.png" referrerpolicy data-desc="referrerpolicy state not changed: empty to invalid"> 110 <img src="/images/green-2x2.png" data-desc="referrerpolicy state not changed: absent to invalid"> 111 <img src="/images/green-2x2.png" referrerpolicy=no-referrer data-desc="referrerpolicy state not changed: no-referrer to NO-REFERRER"> 112 <img src="/images/green-2x2.png" referrerpolicy=foobar data-desc="referrerpolicy state not changed: invalid to other-invalid"> 113 114 <img src="/images/green-2x2.png" data-desc="inserted into picture ancestor"><picture><span></span></picture> 115 <picture><span><img src="/images/green-2x2.png" data-desc="removed from picture ancestor"></span></picture> 116 117 <picture><span><img src="/images/green-2x2.png" data-desc="ancestor picture has a source inserted"></span></picture> 118 <picture><source><span><img src="/images/green-2x2.png" data-desc="ancestor picture has a source removed"></span></picture> 119 120 <picture><span><img src="/images/green-2x2.png" data-desc="ancestor picture; previous sibling source inserted"></span></picture> 121 <picture><span><source><img src="/images/green-2x2.png" data-desc="ancestor picture; previous sibling source removed"></span></picture> 122 123 <picture><img src="/images/green-2x2.png" data-desc="parent is picture, following sibling source inserted"></picture> 124 <picture><img src="/images/green-2x2.png" data-desc="parent is picture, following sibling source removed"><source></picture> 125 126 <picture><img src="/images/green-2x2.png" data-desc="parent is picture, following sibling source has srcset set"><source></picture> 127 128 <img src="/images/green-2x2.png" data-desc="media on img set"> 129 <img src="/images/green-2x2.png" data-desc="type on img set"> 130 <img src="/images/green-2x2.png" data-desc="class on img set"> 131 <img src="/images/green-2x2.png" data-desc="alt on img set"> 132 133 <picture><source><img src="/images/green-2x2.png" data-desc="src on previous sibling source set"></picture> 134 <picture><source><img src="/images/green-2x2.png" data-desc="class on previous sibling source set"></picture> 135 136 <img src="/images/green-2x2.png" data-desc="inserted/removed children of img"> 137 138 <picture><img src="/images/green-2x2.png" data-desc="picture is inserted; img has src"></picture><span></span> 139 <picture><img srcset="/images/green-2x2.png" data-desc="picture is inserted; img has srcset"></picture><span></span> 140 <picture><source srcset="/images/green-2x2.png"><img src="/images/green-2x2.png" data-desc="picture is inserted; img has previous sibling source"></picture><span></span> 141 <picture><img src="/images/green-2x2.png" data-desc="picture is inserted; img has following sibling source"><source srcset="/images/green-2x2.png"></picture><span></span> 142 143 <picture><img src="/images/green-2x2.png" data-desc="picture is removed; img has src"></picture> 144 <picture><img srcset="/images/green-2x2.png" data-desc="picture is removed; img has srcset"></picture> 145 <picture><source srcset="/images/green-2x2.png"><img src="/images/green-2x2.png" data-desc="picture is removed; img has previous sibling source"></picture> 146 <picture><img src="/images/green-2x2.png" data-desc="picture is removed; img has following sibling source"><source srcset="/images/green-2x2.png"></picture> 147 148 <picture><img src="/images/green-2x2.png" data-desc="parent is picture, following img inserted"></picture> 149 <picture><img src="/images/green-2x2.png" data-desc="parent is picture, following img removed"><img></picture> 150 <picture><img src="/images/green-2x2.png" data-desc="parent is picture, following img has src set"><img></picture> 151 <picture><img src="/images/green-2x2.png" data-desc="parent is picture, following img has srcset set"><img></picture> 152 <picture><img src="/images/green-2x2.png" data-desc="parent is picture, following img has sizes set"><img></picture> 153 154 155 <script> 156 onload = function() { 157 158 t('src set', function(img) { 159 img.src = '/images/green-2x2.png'; 160 }, 'load'); 161 162 t('src changed', function(img) { 163 img.src = '/images/green-2x2.png '; 164 }, 'load'); 165 166 t('src removed', function(img) { 167 img.removeAttribute('src'); 168 }, 'timeout'); 169 170 t('srcset set', function(img) { 171 img.srcset = '/images/green-2x2.png'; 172 }, 'load'); 173 174 t('srcset changed', function(img) { 175 img.srcset = '/images/green-2x2.png '; 176 }, 'load'); 177 178 t('srcset removed', function(img) { 179 img.removeAttribute('srcset'); 180 }, 'timeout'); 181 182 t('sizes set', function(img) { 183 img.sizes = ''; 184 }, 'timeout'); 185 186 t('sizes changed', function(img) { 187 img.sizes = ' '; 188 }, 'timeout'); 189 190 t('sizes removed', function(img) { 191 img.removeAttribute('sizes'); 192 }, 'timeout'); 193 194 t('src set to same value', function(img) { 195 img.src = '/images/green-2x2.png'; 196 }, 'load'); 197 198 // When src is absent, changing the crossorigin attribute state MUST NOT 199 // generate events. 200 201 t('crossorigin absent to empty, src absent', function(img) { 202 img.crossOrigin = ''; 203 }, 'timeout'); 204 205 t('crossorigin absent to anonymous, src absent', function(img) { 206 img.crossOrigin = 'anonymous'; 207 }, 'timeout'); 208 209 t('crossorigin absent to use-credentials, src absent', function(img) { 210 img.crossOrigin = 'use-credentials'; 211 }, 'timeout'); 212 213 t('crossorigin empty to absent, src absent', function(img) { 214 img.removeAttribute('crossorigin'); 215 }, 'timeout'); 216 217 t('crossorigin empty to use-credentials, src absent', function(img) { 218 img.crossOrigin = 'use-credentials'; 219 }, 'timeout'); 220 221 t('crossorigin anonymous to absent, src absent', function(img) { 222 img.removeAttribute('crossorigin'); 223 }, 'timeout'); 224 225 t('crossorigin anonymous to use-credentials, src absent', function(img) { 226 img.crossOrigin = 'use-credentials'; 227 }, 'timeout'); 228 229 t('crossorigin use-credentials to absent, src absent', function(img) { 230 img.removeAttribute('crossorigin'); 231 }, 'timeout'); 232 233 t('crossorigin use-credentials to empty, src absent', function(img) { 234 img.crossOrigin = ''; 235 }, 'timeout'); 236 237 t('crossorigin use-credentials to anonymous, src absent', function(img) { 238 img.crossOrigin = 'anonymous'; 239 }, 'timeout'); 240 241 t('crossorigin use-credentials to invalid, src absent', function(img) { 242 img.crossOrigin = 'foobar'; 243 }, 'timeout'); 244 245 // When src is set, changing the crossorigin attribute state MUST generate 246 // events. 247 248 t('crossorigin absent to empty, src already set', function(img) { 249 img.crossOrigin = ''; 250 }, 'load'); 251 252 t('crossorigin absent to anonymous, src already set', function(img) { 253 img.crossOrigin = 'anonymous'; 254 }, 'load'); 255 256 t('crossorigin absent to use-credentials, src already set', function(img) { 257 img.crossOrigin = 'use-credentials'; 258 }, 'load'); 259 260 t('crossorigin empty to absent, src already set', function(img) { 261 img.removeAttribute('crossorigin'); 262 }, 'load'); 263 264 t('crossorigin empty to use-credentials, src already set', function(img) { 265 img.crossOrigin = 'use-credentials'; 266 }, 'load'); 267 268 t('crossorigin anonymous to absent, src already set', function(img) { 269 img.removeAttribute('crossorigin'); 270 }, 'load'); 271 272 t('crossorigin anonymous to use-credentials, src already set', function(img) { 273 img.crossOrigin = 'use-credentials'; 274 }, 'load'); 275 276 t('crossorigin use-credentials to absent, src already set', function(img) { 277 img.removeAttribute('crossorigin'); 278 }, 'load'); 279 280 t('crossorigin use-credentials to empty, src already set', function(img) { 281 img.crossOrigin = ''; 282 }, 'load'); 283 284 t('crossorigin use-credentials to anonymous, src already set', function(img) { 285 img.crossOrigin = 'anonymous'; 286 }, 'load'); 287 288 t('crossorigin use-credentials to invalid, src already set', function(img) { 289 img.crossOrigin = 'foobar'; 290 }, 'load'); 291 292 // When src is absent, changing the referrerpolicy attribute state MUST NOT 293 // generate events. 294 295 t('referrerpolicy absent to no-referrer-when-downgrade, src absent', function(img) { 296 img.referrerPolicy = 'no-referrer-when-downgrade'; 297 }, 'timeout'); 298 299 t('referrerpolicy absent to no-referrer, src absent', function(img) { 300 img.referrerPolicy = 'no-referrer'; 301 }, 'timeout'); 302 303 t('referrerpolicy empty to no-referrer-when-downgrade, src absent', function(img) { 304 img.referrerPolicy = 'no-referrer-when-downgrade'; 305 }, 'timeout'); 306 307 t('referrerpolicy empty to no-referrer, src absent', function(img) { 308 img.referrerPolicy = 'no-referrer'; 309 }, 'timeout'); 310 311 t('referrerpolicy no-referrer-when-downgrade to absent, src absent', function(img) { 312 img.removeAttribute('referrerpolicy'); 313 }, 'timeout'); 314 315 t('referrerpolicy no-referrer-when-downgrade to empty, src absent', function(img) { 316 img.referrerPolicy = ''; 317 }, 'timeout'); 318 319 t('referrerpolicy no-referrer-when-downgrade to no-referrer, src absent', function(img) { 320 img.referrerPolicy = 'no-referrer'; 321 }, 'timeout'); 322 323 t('referrerpolicy no-referrer-when-downgrade to invalid, src absent', function(img) { 324 img.referrerPolicy = 'foobar'; 325 }, 'timeout'); 326 327 t('referrerpolicy no-referrer to absent, src absent', function(img) { 328 img.removeAttribute('referrerpolicy'); 329 }, 'timeout'); 330 331 t('referrerpolicy no-referrer to empty, src absent', function(img) { 332 img.referrerPolicy = ''; 333 }, 'timeout'); 334 335 t('referrerpolicy no-referrer to no-referrer-when-downgrade, src absent', function(img) { 336 img.referrerPolicy = 'no-referrer-when-downgrade'; 337 }, 'timeout'); 338 339 t('referrerpolicy no-referrer to invalid, src absent', function(img) { 340 img.removeAttribute('referrerpolicy'); 341 }, 'timeout'); 342 343 // When src is set, changing the referrerpolicy attribute state MUST generate 344 // events. 345 346 t('referrerpolicy absent to no-referrer-when-downgrade, src already set', function(img) { 347 img.referrerPolicy = 'no-referrer-when-downgrade'; 348 }, 'load'); 349 350 t('referrerpolicy absent to no-referrer, src already set', function(img) { 351 img.referrerPolicy = 'no-referrer'; 352 }, 'load'); 353 354 t('referrerpolicy empty to no-referrer-when-downgrade, src already set', function(img) { 355 img.referrerPolicy = 'no-referrer-when-downgrade'; 356 }, 'load'); 357 358 t('referrerpolicy empty to no-referrer, src already set', function(img) { 359 img.referrerPolicy = 'no-referrer'; 360 }, 'load'); 361 362 t('referrerpolicy no-referrer-when-downgrade to absent, src already set', function(img) { 363 img.removeAttribute('referrerpolicy'); 364 }, 'load'); 365 366 t('referrerpolicy no-referrer-when-downgrade to empty, src already set', function(img) { 367 img.referrerPolicy = ''; 368 }, 'load'); 369 370 t('referrerpolicy no-referrer-when-downgrade to no-referrer, src already set', function(img) { 371 img.referrerPolicy = 'no-referrer'; 372 }, 'load'); 373 374 t('referrerpolicy no-referrer-when-downgrade to invalid, src already set', function(img) { 375 img.referrerPolicy = 'foobar'; 376 }, 'load'); 377 378 t('referrerpolicy no-referrer to absent, src already set', function(img) { 379 img.removeAttribute('referrerpolicy'); 380 }, 'load'); 381 382 t('referrerpolicy no-referrer to empty, src already set', function(img) { 383 img.referrerPolicy = ''; 384 }, 'load'); 385 386 t('referrerpolicy no-referrer to no-referrer-when-downgrade, src already set', function(img) { 387 img.referrerPolicy = 'no-referrer-when-downgrade'; 388 }, 'load'); 389 390 t('referrerpolicy no-referrer to invalid, src already set', function(img) { 391 img.removeAttribute('referrerpolicy'); 392 }, 'load'); 393 394 395 t('inserted into picture', function(img) { 396 img.nextSibling.appendChild(img); 397 }, 'load'); 398 399 t('removed from picture', function(img) { 400 img.parentNode.removeChild(img); 401 }, 'load'); 402 403 t('parent is picture, previous source inserted', function(img) { 404 img.parentNode.insertBefore(document.createElement('source'), img); 405 }, 'load'); 406 407 t('parent is picture, previous source removed', function(img) { 408 img.parentNode.removeChild(img.previousSibling); 409 }, 'load'); 410 411 t('parent is picture, previous source has srcset set', function(img) { 412 img.previousSibling.srcset = ''; 413 }, 'load'); 414 415 t('parent is picture, previous source has srcset changed', function(img) { 416 img.previousSibling.srcset = ' '; 417 }, 'load'); 418 419 t('parent is picture, previous source has srcset removed', function(img) { 420 img.previousSibling.removeAttribute('srcset'); 421 }, 'load'); 422 423 t('parent is picture, previous source has sizes set', function(img) { 424 img.previousSibling.sizes = ''; 425 }, 'load'); 426 427 t('parent is picture, previous source has sizes changed', function(img) { 428 img.previousSibling.sizes = ' '; 429 }, 'load'); 430 431 t('parent is picture, previous source has sizes removed', function(img) { 432 img.previousSibling.removeAttribute('sizes'); 433 }, 'load'); 434 435 t('parent is picture, previous source has media set', function(img) { 436 img.previousSibling.media = ''; 437 }, 'load'); 438 439 t('parent is picture, previous source has media changed', function(img) { 440 img.previousSibling.media = ' '; 441 }, 'load'); 442 443 t('parent is picture, previous source has media removed', function(img) { 444 img.previousSibling.removeAttribute('media'); 445 }, 'load'); 446 447 t('parent is picture, previous source has type set', function(img) { 448 img.previousSibling.type = ''; 449 }, 'load'); 450 451 t('parent is picture, previous source has type changed', function(img) { 452 img.previousSibling.type = ' '; 453 }, 'load'); 454 455 t('parent is picture, previous source has type removed', function(img) { 456 img.previousSibling.removeAttribute('type'); 457 }, 'load'); 458 459 t('srcset is set to same value', function(img) { 460 img.srcset = "/images/green-2x2.png"; 461 }, 'load'); 462 463 t('sizes is set to same value', function(img) { 464 img.sizes = ''; 465 }, 'load'); 466 467 t('crossorigin state not changed: absent, removeAttribute', function(img) { 468 img.removeAttribute('crossorigin'); 469 }, 'timeout'); 470 471 t('crossorigin state not changed: empty to anonymous', function(img) { 472 img.crossOrigin = 'anonymous'; 473 }, 'timeout'); 474 475 t('crossorigin state not changed: anonymous to foobar', function(img) { 476 img.crossOrigin = 'foobar'; 477 }, 'timeout'); 478 479 t('crossorigin state not changed: use-credentials to USE-CREDENTIALS', function(img) { 480 img.crossOrigin = 'USE-CREDENTIALS'; 481 }, 'timeout'); 482 483 t('referrerpolicy state not changed: absent, removeAttribute', function(img) { 484 img.removeAttribute('referrerpolicy'); 485 }, 'timeout'); 486 487 t('referrerpolicy state not changed: empty to empty', function(img) { 488 img.referrerPolicy = ''; 489 }, 'timeout'); 490 491 t('referrerpolicy state not changed: empty to invalid', function(img) { 492 img.referrerPolicy = 'foobar'; 493 }, 'timeout'); 494 495 t('referrerpolicy state not changed: absent to invalid', function(img) { 496 img.referrerPolicy = 'foobar'; 497 }, 'timeout'); 498 499 t('referrerpolicy state not changed: no-referrer to NO-REFERRER', function(img) { 500 img.referrerPolicy = 'NO-REFERRER'; 501 }, 'timeout'); 502 503 t('referrerpolicy state not changed: invalid to other-invalid', function(img) { 504 img.referrerPolicy = 'foobar2'; 505 }, 'timeout'); 506 507 t('inserted into picture ancestor', function(img) { 508 img.nextSibling.firstChild.appendChild(img); 509 }, 'timeout'); 510 511 t('removed from picture ancestor', function(img) { 512 img.parentNode.removeChild(img); 513 }, 'timeout'); 514 515 t('ancestor picture has a source inserted', function(img) { 516 img.parentNode.parentNode.insertBefore(document.createElement('source'), img.parentNode); 517 }, 'timeout'); 518 519 t('ancestor picture has a source removed', function(img) { 520 img.parentNode.parentNode.removeChild(img.parentNode.previousSibling); 521 }, 'timeout'); 522 523 t('ancestor picture; previous sibling source inserted', function(img) { 524 img.parentNode.insertBefore(document.createElement('source'), img); 525 }, 'timeout'); 526 527 t('ancestor picture; previous sibling source removed', function(img) { 528 img.parentNode.removeChild(img.previousSibling); 529 }, 'timeout'); 530 531 t('parent is picture, following sibling source inserted', function(img) { 532 img.parentNode.appendChild(document.createElement('source')); 533 }, 'timeout'); 534 535 t('parent is picture, following sibling source removed', function(img) { 536 img.parentNode.removeChild(img.nextSibling); 537 }, 'timeout'); 538 539 t('parent is picture, following sibling source has srcset set', function(img) { 540 img.nextSibling.srcset = ''; 541 }, 'timeout'); 542 543 t('media on img set', function(img) { 544 img.setAttribute('media', ''); 545 }, 'timeout'); 546 547 t('type on img set', function(img) { 548 img.setAttribute('type', ''); 549 }, 'timeout'); 550 551 t('class on img set', function(img) { 552 img.className = ''; 553 }, 'timeout'); 554 555 t('alt on img set', function(img) { 556 img.alt = ''; 557 }, 'timeout'); 558 559 t('src on previous sibling source set', function(img) { 560 img.previousSibling.setAttribute('src', ''); 561 }, 'timeout'); 562 563 t('class on previous sibling source set', function(img) { 564 img.previousSibling.className = ''; 565 }, 'timeout'); 566 567 t('inserted/removed children of img', function(img) { 568 img.appendChild(document.createElement('source')); 569 setTimeout(this.step_func(function() { 570 img.removeChild(img.firstChild); 571 }), 0); 572 }, 'timeout'); 573 574 t('picture is inserted; img has src', function(img) { 575 img.parentNode.nextSibling.appendChild(img.parentNode); 576 }, 'timeout'); 577 578 t('picture is inserted; img has srcset', function(img) { 579 img.parentNode.nextSibling.appendChild(img.parentNode); 580 }, 'timeout'); 581 582 t('picture is inserted; img has previous sibling source', function(img) { 583 img.parentNode.nextSibling.appendChild(img.parentNode); 584 }, 'timeout'); 585 586 t('picture is inserted; img has following sibling source', function(img) { 587 img.parentNode.nextSibling.appendChild(img.parentNode); 588 }, 'timeout'); 589 590 t('picture is removed; img has src', function(img) { 591 img.parentNode.parentNode.removeChild(img.parentNode); 592 }, 'timeout'); 593 594 t('picture is removed; img has srcset', function(img) { 595 img.parentNode.parentNode.removeChild(img.parentNode); 596 }, 'timeout'); 597 598 t('picture is removed; img has previous sibling source', function(img) { 599 img.parentNode.parentNode.removeChild(img.parentNode); 600 }, 'timeout'); 601 602 t('picture is removed; img has following sibling source', function(img) { 603 img.parentNode.parentNode.removeChild(img.parentNode); 604 }, 'timeout'); 605 606 t('parent is picture, following img inserted', function(img) { 607 img.parentNode.appendChild(document.createElement('img')); 608 }, 'timeout'); 609 610 t('parent is picture, following img removed', function(img) { 611 img.parentNode.removeChild(img.nextSibling); 612 }, 'timeout'); 613 614 t('parent is picture, following img has src set', function(img) { 615 img.nextSibling.src = ''; 616 }, 'timeout'); 617 618 t('parent is picture, following img has srcset set', function(img) { 619 img.nextSibling.srcset = ''; 620 }, 'timeout'); 621 622 t('parent is picture, following img has sizes set', function(img) { 623 img.nextSibling.sizes = ''; 624 }, 'timeout'); 625 626 done(); 627 }; 628 </script>