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] [Revoke blob URL after creating Request, will fetch]
expected: FAIL expected: FAIL
[Revoke blob URL after calling fetch, fetch should succeed]
expected: FAIL
[url-with-fetch.any.html] [url-with-fetch.any.html]
[Untitled] [Untitled]
@ -37,6 +34,3 @@
[Revoke blob URL after creating Request, will fetch] [Revoke blob URL after creating Request, will fetch]
expected: FAIL 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.] [Instant scrolling while doing history navigation.]
expected: FAIL 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] [single-byte-decoder.html?XMLHttpRequest]
expected: CRASH expected: TIMEOUT
[ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)] [ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)]
expected: FAIL expected: FAIL
@ -84,12 +84,6 @@
[windows-1255: cp1255 (XMLHttpRequest)] [windows-1255: cp1255 (XMLHttpRequest)]
expected: TIMEOUT expected: TIMEOUT
[windows-1254: iso88599 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1254: iso8859-9 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1255: windows-1255 (XMLHttpRequest)] [windows-1255: windows-1255 (XMLHttpRequest)]
expected: TIMEOUT expected: TIMEOUT
@ -111,21 +105,9 @@
[windows-1256: cp1256 (XMLHttpRequest)] [windows-1256: cp1256 (XMLHttpRequest)]
expected: TIMEOUT expected: TIMEOUT
[windows-1254: iso-8859-9 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1254: csisolatin5 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1257: x-cp1257 (XMLHttpRequest)] [windows-1257: x-cp1257 (XMLHttpRequest)]
expected: TIMEOUT expected: TIMEOUT
[windows-1254: iso-ir-148 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1256: windows-1256 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1254: iso_8859-9 (XMLHttpRequest)] [windows-1254: iso_8859-9 (XMLHttpRequest)]
expected: TIMEOUT expected: TIMEOUT

View file

@ -312,3 +312,9 @@
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk] [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL 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] [X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL 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] [Multiple history traversals, last would be aborted]
expected: FAIL 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] [embedded-opener-remove-frame.html]
expected: CRASH
[opener and "removed" embedded documents] [opener and "removed" embedded documents]
expected: FAIL 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] [realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.] [X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL expected: FAIL

View file

@ -1,4 +1,3 @@
[test_paint_worklet_timeout.html] [test_paint_worklet_timeout.html]
type: testharness type: testharness
prefs: [dom.worklet.timeout_ms:10] 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> <!doctype html>
<html class=reftest-wait>
<title>Acid2 reftest</title> <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> <style>
* { * {
margin: 0; margin: 0;
@ -12,4 +14,12 @@ iframe {
height: 300px; height: 300px;
} }
</style> </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", { offset: 0, computedOffset: 0, easing: "ease", composite: "auto",
transform: "none" }, transform: "none" },
{ offset: 1, computedOffset: 1, easing: "ease", composite: "auto", { offset: 1, computedOffset: 1, easing: "ease", composite: "auto",
transform: "translate(100px, 0px)" }, transform: "translate(100px)" },
]; ];
for (let i = 0; i < frames.length; i++) { for (let i = 0; i < frames.length; i++) {
assert_frames_equal(frames[i], expected[i], "ComputedKeyframe #" + i); assert_frames_equal(frames[i], expected[i], "ComputedKeyframe #" + i);
@ -743,7 +743,7 @@ test(t => {
const expected = [ const expected = [
{ offset: 0, computedOffset: 0, easing: "ease", composite: "auto", { offset: 0, computedOffset: 0, easing: "ease", composite: "auto",
transform: "translate(100px, 0px)" }, transform: "translate(100px)" },
{ offset: 1, computedOffset: 1, easing: "ease", composite: "auto", { offset: 1, computedOffset: 1, easing: "ease", composite: "auto",
transform: "none" }, transform: "none" },
]; ];

View file

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

View file

@ -77,10 +77,6 @@ div {
<input type="range" class="i"> <input type="range" class="i">
</div></div> </div></div>
<div class="grid">
<input type="range" class="i">
</div>
<div class="grid" style="grid-template-columns:minmax(min-content,30px)"> <div class="grid" style="grid-template-columns:minmax(min-content,30px)">
<input type="range" class="i"> <input type="range" class="i">
</div> </div>
@ -97,10 +93,6 @@ div {
<input type="range" class="i n"> <input type="range" class="i n">
</div></div> </div></div>
<div class="grid">
<input type="range" class="i n">
</div>
<div class="grid" style="grid-template-columns:minmax(min-content,30px)"> <div class="grid" style="grid-template-columns:minmax(min-content,30px)">
<input type="range" class="i n"> <input type="range" class="i n">
</div> </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(0)", "skew(0deg)");
test_valid_value("transform", "skew(90deg)"); test_valid_value("transform", "skew(90deg)");
test_valid_value("transform", "skew(0, -90deg)", "skew(0deg, -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(0)", "skewX(0deg)");
test_valid_value("transform", "skewX(90deg)"); 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 ## Fuzzy Matching
In some situations a test may have subtle differences in rendering In some situations a test may have subtle differences in rendering
compared to the reference due to, e.g., anti-aliasing. This may cause compared to the reference due to, e.g., anti-aliasing. To allow for
the test to pass on some platforms but fail on others. In this case these small differences, we allow tests to specify a fuzziness
some affordance for subtle discrepancies is desirable. However no characterised by two parameters, both of which must be specified:
mechanism to allow this has yet been standardized.
* 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 ## 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="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script> <script src="/common/utils.js"></script>
<script> <script>
function wait25ms(test) {
return new Promise(resolve => {
test.step_timeout(() => {
resolve();
}, 25);
});
}
promise_test(async (test) => { promise_test(async (test) => {
var request_token = token(); var request_token = token();
const response = await fetch(`stale-script.py?token=` + request_token); const response = await fetch(`stale-script.py?token=` + request_token);
const response2 = 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')); assert_equals(response.headers.get('Unique-Id'), response2.headers.get('Unique-Id'));
}, 'Second fetch does not return same response');
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> </script>

View file

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

View file

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

View file

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