Auto merge of #23001 - servo-wpt-sync:wpt_update_07-03-2019, r=jdm

Sync WPT with upstream (07-03-2019)

Automated downstream sync of changes from upstream as of 07-03-2019.
[no-wpt-sync]

<!-- 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/23001)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2019-03-08 08:35:58 -05:00 committed by GitHub
commit a0a977cee8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
133 changed files with 3076 additions and 304 deletions

View file

@ -14,9 +14,6 @@
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
[Revoke blob URL after calling fetch, fetch should succeed]
expected: FAIL
[url-with-fetch.any.html]
[Untitled]
@ -37,6 +34,3 @@
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
[Revoke blob URL after calling fetch, fetch should succeed]
expected: FAIL

File diff suppressed because it is too large Load diff

View file

@ -6,6 +6,3 @@
[Instant scrolling while doing history navigation.]
expected: FAIL
[Smooth scrolling while doing history navigation.]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-feblend-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-feblend-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fecomponenttransfer-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fecomponenttransfer-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fecomposite-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fecomposite-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-feconvolvematrix-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-feconvolvematrix-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fediffuselighting-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fediffuselighting-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fediffuselighting-003.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fediffuselighting-dynamic.html]
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[tainting-fedisplacementmap-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fedisplacementmap-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fedropshadow-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fedropshadow-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fedropshadow-003.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-feflood-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-feflood-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-feflood-dynamic.html]
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[tainting-fegaussianblur-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fegaussianblur-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-femorphology-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-femorphology-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-feoffset-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-feoffset-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fespecularlighting-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fespecularlighting-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fespecularlighting-003.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fetile-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[tainting-fetile-002.html]
expected: FAIL

View file

@ -32,7 +32,7 @@
[single-byte-decoder.html?XMLHttpRequest]
expected: CRASH
expected: TIMEOUT
[ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)]
expected: FAIL
@ -84,12 +84,6 @@
[windows-1255: cp1255 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1254: iso88599 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1254: iso8859-9 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1255: windows-1255 (XMLHttpRequest)]
expected: TIMEOUT
@ -111,21 +105,9 @@
[windows-1256: cp1256 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1254: iso-8859-9 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1254: csisolatin5 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1257: x-cp1257 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1254: iso-ir-148 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1256: windows-1256 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1254: iso_8859-9 (XMLHttpRequest)]
expected: TIMEOUT

View file

@ -312,3 +312,9 @@
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: */* text/html]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL

View file

@ -11,3 +11,9 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
[X-Content-Type-Options%3A%20'NosniFF']
expected: FAIL
[Content-Type-Options%3A%20nosniff]
expected: FAIL

View file

@ -0,0 +1,4 @@
[fetch-sw.https.tentative.html]
[Second fetch returns same response]
expected: FAIL

View file

@ -0,0 +1,4 @@
[fetch.tentative.html]
[Second fetch returns same response]
expected: FAIL

View file

@ -0,0 +1,5 @@
[javascript-url-abort-return-value-undefined.tentative.html]
expected: TIMEOUT
[Not aborting fetch for javascript:undefined navigation]
expected: TIMEOUT

View file

@ -1,4 +1,4 @@
[traverse_the_history_3.html]
[traverse_the_history_4.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -1,4 +0,0 @@
[traverse_the_history_5.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -0,0 +1,13 @@
[closed-attribute.window.html]
[closed and cross-site nested browsing context]
expected: FAIL
[closed/close() and cross-origin auxiliary browsing context]
expected: FAIL
[closed/close() and same-origin auxiliary browsing context]
expected: FAIL
[closed/close() and cross-site auxiliary browsing context]
expected: FAIL

View file

@ -1,4 +1,5 @@
[embedded-opener-remove-frame.html]
expected: CRASH
[opener and "removed" embedded documents]
expected: FAIL

View file

@ -1,7 +0,0 @@
[toggleEvent.html]
[Calling open twice on 'details' fires only one toggle event]
expected: FAIL
[Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element]
expected: FAIL

View file

@ -0,0 +1,2 @@
[script-onerror-insertion-point-2.html]
expected: TIMEOUT

View file

@ -0,0 +1,4 @@
[iframe_005.html]
[document.write external script into iframe write back into parent]
expected: FAIL

View file

@ -1,4 +1,5 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL

View file

@ -1,4 +1,3 @@
[test_paint_worklet_timeout.html]
type: testharness
prefs: [dom.worklet.timeout_ms:10]
expected: FAIL

View file

@ -0,0 +1,272 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>The Second Acid Test (pixel-for-pixel reference version)</title>
<style type="text/css">
*
{
margin: 0;
padding: 0;
}
html
{
font: 12px sans-serif;
overflow: hidden;
color: red;
background: white;
}
#top
{
font: 2em / 24px sans-serif;
margin: 2em 3.5em 0;
text-align: left;
white-space: pre;
color: navy;
}
.picture
{
margin: 3em 1em 1em 6em;
}
.line
{
height: 1em;
border: 0 solid black;
background: yellow;
}
.one
{
width: 0;
margin-left: 5em;
border-width: 0 2em;
}
.two
{
width: 4em;
margin-left: 3em;
border-width: 0 2em;
}
.three
{
width: 8em;
margin-left: 2em;
border-width: 0 1em;
}
/* the eyes, in all their three-layer glory
these need to appear with both background layers as on hidpi displays
the two background layers don't just create a solid yellow background */
.eyes
{
position: relative;
width: 12em;
height: 2em;
margin-left: 1em;
background: red;
}
.eyes .lower
{
position: absolute;
z-index: 1; /* redundant, but make stacking explicit */
width: 9em;
height: 2em;
margin-left: 1em;
border-left: solid 1em yellow;
background: fixed url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAABnRSTlMAAAAAAABupgeRAAAABmJLR0QA%2FwD%2FAP%2BgvaeTAAAAEUlEQVR42mP4%2F58BCv7%2FZwAAHfAD%2FabwPj4AAAAASUVORK5CYII%3D');
}
.eyes .upper
{
position: absolute;
z-index: 2; /* redundant, but make stacking explicit */
width: 10em;
height: 2em;
margin-left: 0;
border: solid 1em black;
border-width: 0 1em;
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAABnRSTlMAAAAAAABupgeRAAAABmJLR0QA%2FwD%2FAP%2BgvaeTAAAAEUlEQVR42mP4%2F58BCv7%2FZwAAHfAD%2FabwPj4AAAAASUVORK5CYII%3D') fixed 1px 0;
}
.eyes .img
{
position: absolute;
z-index: 3; /* redundant, but make stacking explicit */
width: 8em;
height: 2em;
margin-left: 2em;
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAYCAYAAAFy7sgCAAAGsUlEQVRo3u2ZbWwcZxHHf3s%2B7LNbO3ZjXBtowprGODRX0qpNQCjmJKuVKhMl1P2AkCwhFOIKkCBSm9IXavGFKAixIAECwkmWo5MrhRI3Ub40IEwQgp6aIDg3Cd6eEqyIHEteah%2B1E69vhw%2BZtTaX8704ZzkKjHS6271nZ56ZZ%2BY%2F%2F%2BdZKF%2FCwYshx3EkkggLsD1v4FQkEZZYLCbAKyG9%2Ba9EIsG6hnUAf8x74K3aUC3j4%2BM54HcsR2oAIomwZOezkv%2FnSHpYNh%2BNCmAE7xv94zvFdd1bHsjMZmQkPSxAJP%2B%2FfuBLwK54PC7JZFKAVJmzXLBt2w%2FMvcDLwIb8QS8CeJ4nkURYIomw7J%2FYJ8BvSiiXptGGxWds2%2Fa9%2Bnaxh%2BYAD%2Bgt04NDgABTpQY2cvvSFLzw86gWeBVwC8SzlOSv2YeBPfmDBoBHgKmR9LBEEmHZfDTqGykqfkUE0nA78BzQGfSgUeP3wNeTXwXg7MwZDhw4UHL6ra2ti79%2FOvljgG8AZ4H64Lhm4MvAocxsRppGG%2FxcXihlwLIs6R%2FfKV2HO%2F26uA94pdDYUKUZUU7W1RQYXA98Gnhaf5%2FXWX0HeAHYoQonqa4sZSOsSWMCWeC9Yko%2BCQwBe4E6oNc0Tc91XTl1%2BaTsn9gnI%2Blhyc5nZWxsrBIkKSbl2tiic3tW53YDEwOKaoFBrcOfqKee53lG9xsPMjV784r%2F4lO%2FpPvyJ9iyZcuvFSaXK5XYeAZ4CDgGvB3MS4B54LQuWYPeuy4iRFsevsXqpuYoqVQKIH2bK1CuDQNo11o4XUzh%2FcDWYIe1LEtyuZx4niee54njOGKapgfsqlL%2Bl2OjEXg8nxrc1dJ0h3hbtL%2BGCtz7KPBF4CuBe9uB15VafE8hr9qylI3HgG8C2%2FK7VyHZoJj7MrBRm30qFotJMpkU27YlHo%2F7Ha5a%2BV%2FKRkSJ4KuKRLVLKapTjB1SzAVIjY2NSXY%2BKyPpYdk%2FsU9OXT4pruv6BdZbBQfKsVGnvWlIe1VB6VQO8JxC1vZYLCbZ%2BaxsPhpdZDyRRFhG0sPiOE6ldKBg2lRg4xF1YCDIIIKN7DGgD3gH%2BBXwejKZfPrs2tPs%2FvPN2bKuYR1nd7xLKBSSJeqoXKnERjPwNWAG%2BLn2rZuM%2B4Tpml6vaWlp4eLcxVusZq5lCgVgOVKJjRqdX86ffL4D5wIoZACnTpw4wRMdT96i%2FImOJxERAs4uVyqxUacF%2FPdiCj%2BjdRBRGFtwXVdG0sPSdbhTmkYbpH98p2RmM2JZlig1vl0GWo4NQ%2Fn%2Bs5pKRXfwjweaxy7TND3HcRZbfC6X8xVPVQlGy7WxVWlO5XRXFXm6EZmrQuSXYyPE3SiVoEhE6Wyr0u2rumO6zv%2B21AFdQAswC1wCMuUCXCmyWQus103Qg8qlDO0lxwOb%2Fl4FiK3AB3VS%2FuKKLtK%2FgbeAnwG%2FvUODuRw%2FFrR0H1UC75fwu8oJ%2FhFsW5VIG%2FBUgEIN6Y65O4AHu4Ap0zQ9y7LEcZyb9lRBUHQcRyzL8unZVBW5bFWAvAp%2BhDQ2g4F47dUYtlU6obXA54DnVdFLekjUGGifh4AFy7LEdV3xj3X9I66m0QZpGm2QrsOd0j%2B%2BU0bSw5KZzYjrun6HWlAd961i4FfCj0aN1Usau%2Bc1lmuXPFwvAEumUut7tQQvAb%2FXb%2FT0bCAej9cODg7yt%2Bm%2F8q2%2F7OUHZ76PnZ1k2p0mJzlykmPancbOTnL0whHs7CQfb%2B5mx2d3sH79%2BtCRI0c6FeaOr9ICrIQfLvA%2B8BGNXxi4R6HrisJVUWrxAVW2oMFf0Aczim8o3kV6enowDIPjF9%2Fk%2BMU3S3rrjzMMg56eHr%2BxP7qKFbASfojG6kpeDGs1tiW53RxwWT%2Bin5q8w4xpQK5evQpAR30H7ZH2khNvj7TTUd8BgD4rqmu1ZKX8qNeY%2BfHz4zlXDgT5E8tpCTUq7XSBC4Euv8227TV9fX1E73%2BYtvo27BmbS9cvFVTY3bSRFza9yOcf6Gfmygy7d%2B%2Fm%2FPnzF4DvrsBLhnJlJfwIKXxv1PheAE4qK6p4H9AGbNKTuhngBPBPXYRe4IemaT5kWZbR19fHNbmGnZ1k4r3U4glDR30Hm5qjbGjsImJEOHbsGHv27JFz5869o0eFq01Jq%2BmHAXwI6FFKagMTgHM7GzFDS%2BoeLSMv7zjzC9x4Y7gxFovVDAwMEI1GaWlpWSzRVCrFwYMH%2FXfxZ4AfAa8B%2F7lDaGg1%2FQgp43lfK0yqtRMuJa3ceKe5DfgYsCYAZ2ngD8CfAkzqTpW7xY%2F%2FSznyX%2FVeUb2kVmX4AAAAAElFTkSuQmCC');
}
/* lines six to nine are the nose
(note these are scarcely changed from the test as border anti-aliasing
quickly differs) */
.nose
{
width: 12em;
height: 4em;
margin-left: 0;
border-width: 0 1em;
}
.nose > div
{
height: 0;
padding: 1em 1em 3em;
background: yellow;
}
.nose div div
{
width: 2em;
height: 2em;
margin-left: 4em;
background: red;
}
.nose div:hover div:before
{
border-bottom-color: blue;
}
.nose div:hover div:after
{
border-top-color: blue;
}
.nose div div:before
{
display: block;
height: 0;
content: '';
border-width: 1em;
border-style: none solid solid;
border-color: red yellow black yellow;
}
.nose div div:after
{
display: block;
height: 0;
content: '';
border-width: 1em;
border-style: solid solid none;
border-color: black yellow red yellow;
}
/* lines ten and eleven are the smile */
.ten
{
width: 10em;
margin-left: 1em;
border-width: 0 1em;
}
.ten div
{
width: 6em;
height: 1em;
margin-left: 1em;
border: solid black;
border-width: 0 1em;
background: transparent;
}
.eleven
{
width: 10em;
margin-left: 1em;
border-width: 0 1em;
}
.eleven div
{
width: 6em;
height: 1em;
margin-left: 2em;
background: black;
}
/* bottom of the face */
.twelve
{
width: 8em;
margin-left: 2em;
border-width: 0 1em;
}
.thirteen
{
width: 4em;
margin-left: 3em;
border-width: 0 2em;
}
.fourteen
{
width: 0;
margin-left: 5em;
border-width: 0 2em;
}
</style>
</head>
<body>
<h2 id="top">Hello World!</h2>
<div class="picture">
<div class="line one"></div>
<div class="line two"></div>
<div class="line three"></div>
<div class="eyes"><div class=lower></div><div class=upper></div><div class=img></div></div>
<div class="line nose"><div><div></div></div></div>
<div class="line ten"><div></div></div>
<div class="line eleven"><div></div></div>
<div class="line twelve"></div>
<div class="line thirteen"></div>
<div class="line fourteen"></div>
</div>
</body>
</html>

View file

@ -1,6 +1,8 @@
<!doctype html>
<html class=reftest-wait>
<title>Acid2 reftest</title>
<link rel="match" href="reference.html">
<link rel="match" href="px-reference.html">
<script src="/common/reftest-wait.js"></script>
<style>
* {
margin: 0;
@ -12,4 +14,12 @@ iframe {
height: 300px;
}
</style>
<iframe src="test.html#top"></iframe>
<script>
function frameLoaded(frame) {
let fwin = frame.contentWindow;
let fdoc = frame.contentDocument;
fdoc.querySelector("#top").scrollIntoView();
takeScreenshot();
}
</script>
<iframe src="test.html" onload="frameLoaded(this)"></iframe>

View file

@ -679,7 +679,7 @@ test(t => {
{ offset: 0, computedOffset: 0, easing: "ease", composite: "auto",
transform: "none" },
{ offset: 1, computedOffset: 1, easing: "ease", composite: "auto",
transform: "translate(100px, 0px)" },
transform: "translate(100px)" },
];
for (let i = 0; i < frames.length; i++) {
assert_frames_equal(frames[i], expected[i], "ComputedKeyframe #" + i);
@ -743,7 +743,7 @@ test(t => {
const expected = [
{ offset: 0, computedOffset: 0, easing: "ease", composite: "auto",
transform: "translate(100px, 0px)" },
transform: "translate(100px)" },
{ offset: 1, computedOffset: 1, easing: "ease", composite: "auto",
transform: "none" },
];

View file

@ -69,10 +69,6 @@ div {
<input type="range" class="i" style="max-width:50%">
</div></div>
<div class="grid" style="grid-template-columns:4px">
<input type="range" class="i" style="width:2px;">
</div>
<div class="grid" style="grid-template-columns:30px">
<input type="range" class="i" style="width:15px">
</div>
@ -89,10 +85,6 @@ div {
<input type="range" class="i n" style="width:14px; margin-right:0">
</div></div>
<div class="grid" style="grid-template-columns:4px">
<input type="range" class="i n" style="width:2px;">
</div>
<div class="grid" style="grid-template-columns:30px">
<input type="range" class="i n" style="width:15px">
</div>

View file

@ -77,10 +77,6 @@ div {
<input type="range" class="i">
</div></div>
<div class="grid">
<input type="range" class="i">
</div>
<div class="grid" style="grid-template-columns:minmax(min-content,30px)">
<input type="range" class="i">
</div>
@ -97,10 +93,6 @@ div {
<input type="range" class="i n">
</div></div>
<div class="grid">
<input type="range" class="i n">
</div>
<div class="grid" style="grid-template-columns:minmax(min-content,30px)">
<input type="range" class="i n">
</div>

View file

@ -0,0 +1,86 @@
<!DOCTYPE HTML>
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html><head>
<meta charset="utf-8">
<title>Reference: INPUT type=range percent intrinsic block-size</title>
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1513959">
<style>
html,body {
color:black; background-color:white; font:16px/1 monospace;
}
input { margin: 2px; }
input.b {
min-height: 0;
background: lime;
}
input.mb {
min-height: 0;
max-height: 100%;
background: lime;
}
div {
display: inline-block;
border:1px solid;
}
.grid {
display: inline-grid;
grid: auto / min-content;
place-items: start;
}
input[orient="vertical"] {
-webkit-appearance: slider-vertical;
-webkit-appearance: range;
}
</style></head><body>
<div style="height:30px"><div>
<input type="range" class="b" orient="vertical">
</div></div>
<div class="grid" style="grid: min-content / auto">
<input type="range" class="b" orient="vertical" style="height:50%; grid-area:1/1">
<input type="range" class="b" orient="vertical" style="visibility:hidden; grid-area:1/1">
</div>
<div class="grid" style="grid: min-content / auto">
<input type="range" class="b" orient="vertical" style="height:50%; grid-area:1/1">
<input type="range" class="b" orient="vertical" style="visibility:hidden; grid-area:1/1">
</div>
<div class="grid" style="grid: 30px / auto">
<input type="range" class="b" orient="vertical" style="height:15px">
</div>
<div class="grid" style="grid: 30px / auto">
<input type="range" class="b" orient="vertical" style="height:15px">
</div>
<br>
<br>
<div style="height:30px"><div>
<input type="range" class="mb" orient="vertical">
</div></div>
<div class="grid" style="grid: 30px / auto">
<input type="range" class="b" orient="vertical" style="height:15px">
</div>
<div class="grid" style="grid: 30px / auto">
<input type="range" class="b" orient="vertical" style="height:15px">
</div>
<div class="grid" style="grid: 30px / auto">
<input type="range" class="b" orient="vertical" style="height:15px">
</div>
</body></html>

View file

@ -0,0 +1,94 @@
<!DOCTYPE HTML>
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html><head>
<meta charset="utf-8">
<title>Test: INPUT type=range percent intrinsic block-size</title>
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1513959">
<link rel="help" href="https://drafts.csswg.org/css-sizing-3/#percentage-sizing">
<link rel="help" href="https://drafts.csswg.org/css-sizing-3/#min-content-zero">
<link rel="match" href="range-percent-intrinsic-size-2a-ref.html">
<style>
html,body {
color:black; background-color:white; font:16px/1 monospace;
}
input { margin: 2px; }
input.b {
height: 50%;
min-height: -moz-min-content;
min-height: min-content;
background: lime;
}
input.mb {
max-height: 50%;
min-height: -moz-min-content;
min-height: min-content;
background: lime;
}
input.b.min-auto, input.mb.min-auto, {
min-height: auto;
}
div {
display: inline-block;
border:1px solid;
}
.grid {
display: inline-grid;
grid: auto / min-content;
place-items: start;
}
input[orient="vertical"] {
-webkit-appearance: slider-vertical;
-webkit-appearance: range;
}
</style></head><body>
<div style="height:30px"><div>
<input type="range" class="b" orient="vertical">
</div></div>
<div class="grid" style="grid: min-content / auto">
<input type="range" class="b" orient="vertical">
</div>
<div class="grid" style="grid: minmax(min-content,30px) / auto">
<input type="range" class="b" orient="vertical">
</div>
<div class="grid" style="grid: minmax(auto,30px) / auto">
<input type="range" class="b" orient="vertical">
</div>
<div class="grid" style="grid: minmax(auto,30px) / auto">
<input type="range" class="b min-auto" orient="vertical">
</div>
<br>
<br>
<div style="height:30px"><div>
<input type="range" class="mb" orient="vertical">
</div></div>
<div class="grid" style="grid: minmax(min-content,30px) / auto">
<input type="range" class="mb" orient="vertical">
</div>
<div class="grid" style="grid: minmax(auto,30px) / auto">
<input type="range" class="mb" orient="vertical">
</div>
<div class="grid" style="grid: minmax(auto,30px) / auto">
<input type="range" class="mb min-auto" orient="vertical">
</div>
</body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p style="text-decoration:underline">This text should be underlined.</p>

View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<title>CSS Test: text-decoration propagation into shadow DOM boxes</title>
<link rel="help" href="https://drafts.csswg.org/css-text-decor/#line-decoration">
<link rel="match" href="reference/text-decoration-underline-ref.html">
<style>
#host { text-decoration: underline }
</style>
<p>
<div id="host">
<span>This text should be underlined.</span>
</div>
</p>
<script>
const root = host.attachShadow({mode:"open"});
root.appendChild(document.createElement("slot"));
</script>

View file

@ -39,7 +39,7 @@ test_valid_value("transform", "rotate(90deg)");
test_valid_value("transform", "skew(0)", "skew(0deg)");
test_valid_value("transform", "skew(90deg)");
test_valid_value("transform", "skew(0, -90deg)", "skew(0deg, -90deg)");
test_valid_value("transform", "skew(90deg, 0)", "skew(90deg, 0deg)");
test_valid_value("transform", "skew(90deg, 0)", ["skew(90deg)", "skew(90deg, 0deg)"]);
test_valid_value("transform", "skewX(0)", "skewX(0deg)");
test_valid_value("transform", "skewX(90deg)");

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<div style="width: 50px; height: 100px; background-color: blue; border-left: 50px solid green"></div>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<title>feBlend: does not taint the filter chain</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-blue-stripe-100x100.html">
<svg>
<linearGradient id="g">
<stop stop-color="red"/>
<stop stop-color="red" offset=".5"/>
<stop stop-color="green" offset=".5"/>
<stop stop-color="green" offset="1"/>
</linearGradient>
<filter id="blend_notaint" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="rgb(0%, 100%, 50%)"/>
<feBlend/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="blue"/>
<rect width="100" height="100" fill="url(#g)"
filter="url(#blend_notaint)"/>
</svg>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<title>feBlend: propagates tainting from tainted input primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="blend_taintedinput" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="currentcolor" style="color: rgb(0%, 100%, 50%)"/>
<feBlend/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#blend_taintedinput)"/>
</svg>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<title>feComponentTransfer: does not taint the filter chain</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-blue-stripe-100x100.html">
<svg>
<linearGradient id="g">
<stop stop-color="red"/>
<stop stop-color="red" offset=".5"/>
<stop stop-color="green" offset=".5"/>
<stop stop-color="green" offset="1"/>
</linearGradient>
<filter id="compxfer_notaint" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="rgb(0%, 100%, 50%)"/>
<feComponentTransfer/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="blue"/>
<rect width="100" height="100" fill="url(#g)"
filter="url(#compxfer_notaint)"/>
</svg>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<title>feComponentTransfer: propagates tainting from tainted input primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="compxfer_taintedinput" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="currentcolor" style="color: rgb(0%, 100%, 50%)"/>
<feComponentTransfer/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#compxfer_taintedinput)"/>
</svg>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<title>feComposite: does not taint the filter chain</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-blue-stripe-100x100.html">
<svg>
<linearGradient id="g">
<stop stop-color="red"/>
<stop stop-color="red" offset=".5"/>
<stop stop-color="green" offset=".5"/>
<stop stop-color="green" offset="1"/>
</linearGradient>
<filter id="composite_notaint" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="rgb(0%, 100%, 50%)"/>
<feComposite/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="blue"/>
<rect width="100" height="100" fill="url(#g)"
filter="url(#composite_notaint)"/>
</svg>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<title>feComposite: propagates tainting from tainted input primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="composite_taintedinput" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="currentcolor" style="color: rgb(0%, 100%, 50%)"/>
<feComposite/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#composite_taintedinput)"/>
</svg>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<title>feConvolveMatrix: does not taint the filter chain</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-blue-stripe-100x100.html">
<svg>
<linearGradient id="g">
<stop stop-color="red"/>
<stop stop-color="red" offset=".5"/>
<stop stop-color="green" offset=".5"/>
<stop stop-color="green" offset="1"/>
</linearGradient>
<filter id="convolve_notaint" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="rgb(0%, 100%, 50%)"/>
<feConvolveMatrix order="1" kernelMatrix="1"/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="blue"/>
<rect width="100" height="100" fill="url(#g)"
filter="url(#convolve_notaint)"/>
</svg>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<title>feConvolveMatrix: propagates tainting from tainted input primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="convolve_taintedinput" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="currentcolor" style="color: rgb(0%, 100%, 50%)"/>
<feConvolveMatrix order="1" kernelMatrix="1"/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#convolve_taintedinput)"/>
</svg>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<title>feDiffuseLighting: no tainting with regular &lt;color> lighting-color</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-blue-stripe-100x100.html">
<svg>
<linearGradient id="g">
<stop stop-color="red"/>
<stop stop-color="red" offset=".5"/>
<stop stop-color="green" offset=".5"/>
<stop stop-color="green" offset="1"/>
</linearGradient>
<filter id="diffuse_notaint" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood/>
<feDiffuseLighting lighting-color="rgb(0%, 100%, 50%)">
<feDistantLight elevation="90"/>
</feDiffuseLighting>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100" x="0" y="0" width="100" height="100"/>
</filter>
<rect width="100" height="100" fill="blue"/>
<rect width="100" height="100" fill="url(#g)" filter="url(#diffuse_notaint)"/>
</svg>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<title>feDiffuseLighting: 'currentcolor' lighting-color taints the primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="diffuse_currentcolor" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood/>
<feDiffuseLighting lighting-color="currentcolor"
style="color: rgb(0%, 100%, 50%)">
<feDistantLight elevation="90"/>
</feDiffuseLighting>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#diffuse_currentcolor)"/>
</svg>

View file

@ -0,0 +1,20 @@
<!DOCTYPE html>
<title>feDiffuseLighting: propagates tainting from tainted input primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="diffuse_taintedinput" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="currentcolor" style="color: black"/>
<feDiffuseLighting lighting-color="rgb(0%, 100%, 50%)">
<feDistantLight elevation="90"/>
</feDiffuseLighting>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#diffuse_taintedinput)"/>
</svg>

View file

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html class="reftest-wait">
<title>feDiffuseLighting: tainting state changes dynamically</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<script src="/common/reftest-wait.js"></script>
<svg>
<filter id="diffuse" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood/>
<feDiffuseLighting lighting-color="rgb(0%, 100%, 50%)"
style="color: rgb(0%, 100%, 50%)">
<feDistantLight elevation="90"/>
</feDiffuseLighting>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100" x="0" y="0" width="100" height="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green" filter="url(#diffuse)"/>
</svg>
<script>
requestAnimationFrame(() => {
requestAnimationFrame(() => {
document.querySelector('feDiffuseLighting').style.lightingColor = 'currentcolor';
takeScreenshot();
});
});
</script>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<title>feDisplacementMap: does not taint the filter chain</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-blue-stripe-100x100.html">
<svg>
<linearGradient id="g">
<stop stop-color="red"/>
<stop stop-color="red" offset=".5"/>
<stop stop-color="green" offset=".5"/>
<stop stop-color="green" offset="1"/>
</linearGradient>
<filter id="dispmap_notaint" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="rgb(0%, 100%, 50%)"/>
<feDisplacementMap xChannelSelector="G" yChannelSelector="B"
scale="0"/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="blue"/>
<rect width="100" height="100" fill="url(#g)"
filter="url(#dispmap_notaint)"/>
</svg>

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<title>feDisplacementMap: propagates tainting from tainted input primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="dispmap_taintedinput" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="currentcolor" style="color: rgb(0%, 100%, 50%)"/>
<feDisplacementMap xChannelSelector="G" yChannelSelector="B"
scale="0"/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#dispmap_taintedinput)"/>
</svg>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<title>feDropShadow: no tainting with regular &lt;color> flood-color</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-blue-stripe-100x100.html">
<svg>
<linearGradient id="g">
<stop stop-color="red"/>
<stop stop-color="red" offset=".5"/>
<stop stop-color="green" offset=".5"/>
<stop stop-color="green" offset="1"/>
</linearGradient>
<filter id="dropshdw_notaint" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood x="0" y="0" width="100" height="100"/>
<feDropShadow width="100%" flood-color="rgb(0%, 100%, 50%)" stdDeviation="0"
dx="100" dy="0"/>
<feOffset dx="-100"/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100" x="0" y="0" width="100" height="100"/>
</filter>
<rect width="100" height="100" fill="blue"/>
<rect width="100" height="100" fill="url(#g)" filter="url(#dropshdw_notaint)"/>
</svg>

View file

@ -0,0 +1,20 @@
<!DOCTYPE html>
<title>feDropShadow: 'currentcolor' flood-color taints the primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="dropshdw_currentcolor" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood x="0" y="0" width="100" height="100"/>
<feDropShadow width="100%" flood-color="currentcolor" stdDeviation="0"
dx="100" dy="0" style="color: rgb(0%, 100%, 50%)"/>
<feOffset dx="-100"/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100" x="0" y="0" width="100" height="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#dropshdw_currentcolor)"/>
</svg>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<title>feDropShadow: propagates tainting from tainted input primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="dropshdw_taintedinput" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood x="0" y="0" width="100" height="100" flood-color="currentcolor"
style="color: black"/>
<feDropShadow width="100%" flood-color="rgb(0%, 100%, 50%)" stdDeviation="0"
dx="100" dy="0"/>
<feOffset dx="-100"/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100" x="0" y="0" width="100" height="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#dropshdw_taintedinput)"/>
</svg>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<title>feFlood: no tainting with regular &lt;color> flood-color</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-blue-stripe-100x100.html">
<svg>
<linearGradient id="g">
<stop stop-color="red"/>
<stop stop-color="red" offset=".5"/>
<stop stop-color="green" offset=".5"/>
<stop stop-color="green" offset="1"/>
</linearGradient>
<filter id="flood_notaint" color-interpolation-filters="sRGB">
<feFlood flood-color="rgb(0%, 100%, 50%)"/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="blue"/>
<rect width="100" height="100" fill="url(#g)" filter="url(#flood_notaint)"/>
</svg>

View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<title>feFlood: 'currentcolor' flood-color taints the primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="flood_currentcolor" color-interpolation-filters="sRGB">
<feFlood flood-color="currentcolor" style="color: rgb(0%, 100%, 50%)"/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#flood_currentcolor)"/>
</svg>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<html class="reftest-wait">
<title>feFlood: tainting state changes dynamically</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<script src="/common/reftest-wait.js"></script>
<svg>
<filter id="flood" color-interpolation-filters="sRGB">
<feFlood flood-color="rgb(0%, 100%, 50%)" style="color: rgb(0%, 100%, 50%)"/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green" filter="url(#flood)"/>
</svg>
<script>
requestAnimationFrame(() => {
requestAnimationFrame(() => {
document.querySelector('feFlood').style.floodColor = 'currentcolor';
takeScreenshot();
});
});
</script>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<title>feGaussianBlur: does not taint the filter chain</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-blue-stripe-100x100.html">
<svg>
<linearGradient id="g">
<stop stop-color="red"/>
<stop stop-color="red" offset=".5"/>
<stop stop-color="green" offset=".5"/>
<stop stop-color="green" offset="1"/>
</linearGradient>
<filter id="gaussian_notaint" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="rgb(0%, 100%, 50%)"/>
<feGaussianBlur stdDeviation="0"/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="blue"/>
<rect width="100" height="100" fill="url(#g)"
filter="url(#gaussian_notaint)"/>
</svg>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<title>feGaussianBlur: propagates tainting from tainted input primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="gaussian_taintedinput" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="currentcolor" style="color: rgb(0%, 100%, 50%)"/>
<feGaussianBlur stdDeviation="0"/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#gaussian_taintedinput)"/>
</svg>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<title>feMorphology: does not taint the filter chain</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-blue-stripe-100x100.html">
<svg>
<linearGradient id="g">
<stop stop-color="red"/>
<stop stop-color="red" offset=".5"/>
<stop stop-color="green" offset=".5"/>
<stop stop-color="green" offset="1"/>
</linearGradient>
<filter id="morphology_notaint" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="rgb(0%, 100%, 50%)"/>
<feMorphology radius="0.5"/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="blue"/>
<rect width="100" height="100" fill="url(#g)"
filter="url(#morphology_notaint)"/>
</svg>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<title>feMorphology: propagates tainting from tainted input primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="morphology_taintedinput" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="currentcolor" style="color: rgb(0%, 100%, 50%)"/>
<feMorphology radius="0.5"/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#morphology_taintedinput)"/>
</svg>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<title>feOffset: does not taint the filter chain</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-blue-stripe-100x100.html">
<svg>
<linearGradient id="g">
<stop stop-color="red"/>
<stop stop-color="red" offset=".5"/>
<stop stop-color="green" offset=".5"/>
<stop stop-color="green" offset="1"/>
</linearGradient>
<filter id="offset_notaint" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="rgb(0%, 100%, 50%)"/>
<feOffset/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="blue"/>
<rect width="100" height="100" fill="url(#g)"
filter="url(#offset_notaint)"/>
</svg>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<title>feOffset: propagates tainting from tainted input primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="offset_taintedinput" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="currentcolor" style="color: rgb(0%, 100%, 50%)"/>
<feOffset/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#offset_taintedinput)"/>
</svg>

View file

@ -0,0 +1,26 @@
<!DOCTYPE html>
<title>feSpecularLighting: no tainting with regular &lt;color> lighting-color</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-blue-stripe-100x100.html">
<svg>
<linearGradient id="g">
<stop stop-color="red"/>
<stop stop-color="red" offset=".5"/>
<stop stop-color="green" offset=".5"/>
<stop stop-color="green" offset="1"/>
</linearGradient>
<filter id="specular_notaint" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood/>
<feSpecularLighting lighting-color="rgb(0%, 100%, 50%)">
<feDistantLight elevation="90"/>
</feSpecularLighting>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="blue"/>
<rect width="100" height="100" fill="url(#g)"
filter="url(#specular_notaint)"/>
</svg>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<title>feSpecularLighting: 'currentcolor' lighting-color taints the primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="specular_currentcolor" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood/>
<feSpecularLighting lighting-color="currentcolor"
style="color: rgb(0%, 100%, 50%)">
<feDistantLight elevation="90"/>
</feSpecularLighting>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#specular_currentcolor)"/>
</svg>

View file

@ -0,0 +1,20 @@
<!DOCTYPE html>
<title>feSpecularLighting: propagates tainting from tainted input primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="specular_taintedinput" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="currentcolor" style="color: black"/>
<feSpecularLighting lighting-color="rgb(0%, 100%, 50%)">
<feDistantLight elevation="90"/>
</feSpecularLighting>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#specular_taintedinput)"/>
</svg>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<title>feTile: does not taint the filter chain</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-blue-stripe-100x100.html">
<svg>
<linearGradient id="g">
<stop stop-color="red"/>
<stop stop-color="red" offset=".5"/>
<stop stop-color="green" offset=".5"/>
<stop stop-color="green" offset="1"/>
</linearGradient>
<filter id="tile_notaint" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="rgb(0%, 100%, 50%)"/>
<feTile/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="blue"/>
<rect width="100" height="100" fill="url(#g)"
filter="url(#tile_notaint)"/>
</svg>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<title>feTile: propagates tainting from tainted input primitive</title>
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives">
<link rel="help" href="https://drafts.fxtf.org/filter-effects/#fedisplacemnentmap-restrictions">
<link rel="match" href="reference/green-100x100.html">
<svg>
<filter id="tile_taintedinput" color-interpolation-filters="sRGB"
filterUnits="userSpaceOnUse">
<feFlood flood-color="currentcolor" style="color: rgb(0%, 100%, 50%)"/>
<feTile/>
<feDisplacementMap in="SourceGraphic"
xChannelSelector="G" yChannelSelector="B"
scale="100"/>
</filter>
<rect width="100" height="100" fill="red"/>
<rect width="100" height="100" fill="green"
filter="url(#tile_taintedinput)"/>
</svg>

View file

@ -112,10 +112,67 @@ only guaranteed to be after those events.
## Fuzzy Matching
In some situations a test may have subtle differences in rendering
compared to the reference due to, e.g., anti-aliasing. This may cause
the test to pass on some platforms but fail on others. In this case
some affordance for subtle discrepancies is desirable. However no
mechanism to allow this has yet been standardized.
compared to the reference due to, e.g., anti-aliasing. To allow for
these small differences, we allow tests to specify a fuzziness
characterised by two parameters, both of which must be specified:
* A maximum difference in the per-channel color value for any pixel.
* A number of total pixels that may be different.
The maximum difference in the per pixel color value is formally
defined as follows: let <code>T<sub>x,y,c</sub></code> be the value of
colour channel `c` at pixel coordinates `x`, `y` in the test image and
<code>R<sub>x,y,c</sub></code> be the corresponding value in the
reference image, and let <code>width</code> and <code>height</code> be
the dimensions of the image in pixels. Then <code>maxDifference =
max<sub>x=[0,width) y=[0,height), c={r,g,b}</sub>(|T<sub>x,y,c</sub> -
R<sub>x,y,c</sub>|)</code>.
To specify the fuzziness in the test file one may add a `<meta
name=fuzzy>` element (or, in the case of more complex tests, to any
page containing the `<link rel=[mis]match>` elements). In the simplest
case this has a `content` attribute containing the parameters above,
separated by a colon e.g.
```
<meta name=fuzzy content="maxDifference=15;totalPixels=300">
```
would allow for a difference of exactly 15 / 255 on any color channel
and 300 exactly pixels total difference. The argument names are optional
and may be elided; the above is the same as:
```
<meta name=fuzzy content="15;300">
```
The values may also be given as ranges e.g.
```
<meta name=fuzzy content="maxDifference=10-15;totalPixels=200-300">
```
or
```
<meta name=fuzzy content="10-15;200-300">
```
In this case the maximum pixel difference must be in the range
`10-15` and the total number of different pixels must be in the range
`200-300`.
In cases where a single test has multiple possible refs and the
fuzziness is not the same for all refs, a ref may be specified by
prefixing the `content` value with the relative url for the ref e.g.
```
<meta name=fuzzy content="option1-ref.html:10-15;200-300">
```
One meta element is required per reference requiring a unique
fuzziness value, but any unprefixed value will automatically be
applied to any ref that doesn't have a more specific value.
## Limitations

View file

@ -0,0 +1,63 @@
<!DOCTYPE html>
<!---
Tentative test against:
https://github.com/whatwg/fetch/pull/853
-->
<html>
<head>
<meta charset="utf-8">
<title>Stale Revalidation Requests don't get sent to service worker</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../service-workers/service-worker/resources/test-helpers.sub.js"></script>
<script src="/common/utils.js"></script>
</head>
<body>
<script>
// Duplicating this resource to make service worker scoping simpler.
async function setupRegistration(t, scope) {
const reg = await navigator.serviceWorker.register('sw-intercept.js');
await wait_for_state(t, reg.installing, 'activated');
add_completion_callback(_ => reg.unregister());
return reg;
}
function wait25ms(test) {
return new Promise(resolve => {
test.step_timeout(() => {
resolve();
}, 25);
});
}
promise_test(async (test) => {
var request_token = token();
const uri = 'stale-script.py?token=' + request_token;
await setupRegistration(test, 'stale-script.py');
var service_worker_count = 0;
navigator.serviceWorker.addEventListener('message', function once(event) {
if (event.data.endsWith(uri)) {
service_worker_count++;
}
});
const response = await fetch(uri);
const response2 = await fetch(uri);
assert_equals(response.headers.get('Unique-Id'), response2.headers.get('Unique-Id'));
while(true) {
const revalidation_check = await fetch(`stale-script.py?query&token=` + request_token);
if (revalidation_check.headers.get('Count') == '2') {
// The service worker should not see the revalidation request.
assert_equals(service_worker_count, 2);
break;
}
await wait25ms(test);
}
}, 'Second fetch returns same response');
</script>
</body>
</html>

View file

@ -9,12 +9,28 @@ https://github.com/whatwg/fetch/pull/853
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script>
function wait25ms(test) {
return new Promise(resolve => {
test.step_timeout(() => {
resolve();
}, 25);
});
}
promise_test(async (test) => {
var request_token = token();
const response = await fetch(`stale-script.py?token=` + request_token);
const response2 = await fetch(`stale-script.py?token=` + request_token);
assert_not_equals(response.headers.get('Unique-Id'), response2.headers.get('Unique-Id'));
}, 'Second fetch does not return same response');
assert_equals(response.headers.get('Unique-Id'), response2.headers.get('Unique-Id'));
while(true) {
const revalidation_check = await fetch(`stale-script.py?query&token=` + request_token);
if (revalidation_check.headers.get('Count') == '2') {
break;
}
await wait25ms(test);
}
}, 'Second fetch returns same response');
</script>

View file

@ -8,6 +8,8 @@ def main(request, response):
if request.GET.first("query", None) != None:
headers = [("Count", count)]
content = ""
if count < 2:
request.server.stash.put(token, count)
return 200, headers, content
else:
count = count + 1

View file

@ -10,6 +10,8 @@ def main(request, response):
if request.GET.first("query", None) != None:
headers = [("Count", count)]
content = ""
if count < 2:
request.server.stash.put(token, count)
return 200, headers, content
else:
count = count + 1

View file

@ -13,6 +13,8 @@ def main(request, response):
if request.GET.first("query", None) != None:
headers = [("Count", count)]
content = ""
if count < 2:
request.server.stash.put(token, count)
return 200, headers, content
else:
count = count + 1

View file

@ -0,0 +1,14 @@
async function broadcast(msg) {
for (const client of await clients.matchAll()) {
client.postMessage(msg);
}
}
self.addEventListener('fetch', event => {
event.waitUntil(broadcast(event.request.url));
event.respondWith(fetch(event.request));
});
self.addEventListener('activate', event => {
self.clients.claim();
});

View file

@ -0,0 +1,69 @@
// META: script=/common/get-host-info.sub.js
function closedTest(newWindow, closeNewWindowsBrowsingContext) {
assert_equals(newWindow.closed, false);
closeNewWindowsBrowsingContext();
assert_equals(newWindow.closed, true);
}
test(() => {
const frame = document.body.appendChild(document.createElement("iframe"));
closedTest(frame.contentWindow, () => frame.remove());
}, "closed and same-origin nested browsing context");
test(() => {
const openee = window.open();
closedTest(openee, () => openee.close());
// close() is a no-op once "is closing" is set
openee.close();
assert_equals(openee.closed, true);
}, "closed/close() and same-origin auxiliary browsing context");
const support = new URL("support/closed.html", location.href).pathname;
[
{
type: "cross-origin",
url: `${get_host_info().HTTP_REMOTE_ORIGIN}${support}`
},
{
type: "cross-site",
url: `${get_host_info().HTTP_NOTSAMESITE_ORIGIN}${support}`
}
].forEach(val => {
async_test(t => {
const frame = document.createElement("iframe"),
ident = `${val.type}-nested-bc`;
frame.src = `${val.url}?window=parent&ident=${ident}`;
const listener = t.step_func(e => {
if (e.data === ident) {
closedTest(frame.contentWindow, () => frame.remove());
self.removeEventListener("message", listener);
t.done();
}
});
// Use a message event rather than onload for consistency with auxiliary browsing contexts.
self.addEventListener("message", listener);
document.body.append(frame);
}, `closed and ${val.type} nested browsing context`);
async_test(t => {
const ident = `${val.type}-auxiliary-bc`,
support = new URL("support/closed.html", location.href).pathname,
openee = window.open(`${val.url}?window=opener&ident=${ident}`),
listener = t.step_func(e => {
if (e.data === ident) {
closedTest(openee, () => openee.close());
// close() is a no-op once "is closing" is set
openee.close();
assert_equals(openee.closed, true);
self.removeEventListener("message", listener);
t.done();
}
});
// As there's no cross-origin onload, use a message event.
self.addEventListener("message", listener);
}, `closed/close() and ${val.type} auxiliary browsing context`);
});

View file

@ -0,0 +1,12 @@
<!DOCTYPE html>
<!--
There's two URL parameters supported here:
window: The property name of a getter on the global object that returns the relevant WindowProxy
object to message.
ident: A reasonably unique identifier that will be echoed as the message.
-->
<script>
const params = new URLSearchParams(location.search);
self[params.get("window")].postMessage(params.get("ident"), "*");
</script>

Some files were not shown because too many files have changed in this diff Show more