Auto merge of #26753 - servo-wpt-sync:wpt_update_02-06-2020, r=jdm

Sync WPT with upstream (02-06-2020)

Automated downstream sync of changes from upstream as of 02-06-2020.
[no-wpt-sync]
r? @servo-wpt-sync
This commit is contained in:
bors-servo 2020-06-02 23:30:51 -04:00 committed by GitHub
commit af85d2fd20
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
73 changed files with 726 additions and 152 deletions

View file

@ -0,0 +1,4 @@
[hit-test-floats-003.html]
[Miss float below something else]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-004.html]
[Miss float below something else]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -0,0 +1,2 @@
[min-height-applies-to-013.xht]
expected: FAIL

View file

@ -0,0 +1,2 @@
[min-height-applies-to-014.xht]
expected: FAIL

View file

@ -2,3 +2,6 @@
[Hit test intersecting scaled box]
expected: FAIL
[Hit test within unscaled box]
expected: FAIL

View file

@ -17,6 +17,3 @@
[test the top of layer]
expected: FAIL
[test some point of the element: top left corner]
expected: FAIL

View file

@ -1,4 +0,0 @@
[elementsFromPoint-invalid-cases.html]
[The root element is the last element returned for otherwise empty queries within the viewport]
expected: FAIL

View file

@ -321,15 +321,18 @@
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL

View file

@ -56,6 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript;charset=windows-1252 error text/javascript]
[separate text/javascript error]
expected: FAIL

View file

@ -11,6 +11,3 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL
[X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_1.html]
[Multiple history traversals from the same task]
expected: FAIL

View file

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

View file

@ -1,8 +1,8 @@
[embedded-opener-remove-frame.html]
expected: CRASH
expected: TIMEOUT
[opener of discarded nested browsing context]
expected: FAIL
[opener of discarded auxiliary browsing context]
expected: FAIL
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[event_loadstart.html]
expected: TIMEOUT

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-1.html]
expected: CRASH
expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_nonescaping-1.html]
expected: CRASH
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN

View file

@ -1,4 +0,0 @@
[module-static-import-delayed.html]
[document.write in an imported module]
expected: FAIL

View file

@ -3,3 +3,6 @@
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: TIMEOUT
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: FAIL

View file

@ -0,0 +1,5 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -0,0 +1,5 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -1,5 +0,0 @@
[018.html]
expected: TIMEOUT
[origin of the script that invoked the method, javascript:]
expected: TIMEOUT

View file

@ -678,6 +678,15 @@
]
]
},
"scroll-animations": {
"null-scroll-source-crash.html": [
"5ffc522d68e751995e6183a49f85d2ca7378f66d",
[
null,
{}
]
]
},
"selection": {
"selection-select-all-move-input-crash.html": [
"6f692dc5e7d69a30a407f107268c9e012efcd9e3",
@ -50633,7 +50642,7 @@
]
],
"c414-flt-fit-000.xht": [
"099c67163544bff7daaddfe7b08db543620a2a4e",
"15a53e4aa02b1ec7ec69a42f1df4eeca02f98999",
[
null,
[
@ -81744,6 +81753,32 @@
{}
]
],
"min-height-applies-to-013.xht": [
"ec0137bba43dc40496ad6cd3a0f09748d410e1da",
[
null,
[
[
"/css/reference/pass_if_square_96px_black.html",
"=="
]
],
{}
]
],
"min-height-applies-to-014.xht": [
"48ccd1914fd7835bc066332149b967969853a2be",
[
null,
[
[
"/css/reference/pass_if_square_96px_black.html",
"=="
]
],
{}
]
],
"min-height-applies-to-015.xht": [
"158c9a29c7c924517f8e3e21bbeaac23fe70bed6",
[
@ -237521,6 +237556,19 @@
]
},
"scroll-animations": {
"animation-with-animatable-interface.html": [
"4c3fa027fd073e5e86eafd8d10dc898ab0fb88a5",
[
null,
[
[
"/scroll-animations/animation-ref.html",
"=="
]
],
{}
]
],
"animation-with-display-none.html": [
"310cb5fc8b0ca7c0ab042a1aecf664528dc3b5eb",
[
@ -272566,7 +272614,7 @@
[]
],
"c414-flt-fit-000-ref.xht": [
"ae8e72079a6d60287e093aa330c08dd7062d7bcd",
"49f2b02d99895d35897daaad5e719ae5cd1421d1",
[]
],
"c414-flt-fit-001-ref.xht": [
@ -330696,7 +330744,7 @@
[]
],
"load-into-the-iframe.html": [
"05a80be73745465ddcd65bc5745a674824974590",
"9e08eb587ab38283b53034128ca36c82b545d03f",
[]
],
"navigation-changed-iframe.html": [
@ -333975,10 +334023,6 @@
}
},
"interfaces": {
"BackgroundSync.idl": [
"c52dcdb89843e80e9bd89591df76ba26f7172dab",
[]
],
"CSP.idl": [
"e427ae8801a7863a59d9507d384e075e34bd4731",
[]
@ -334047,6 +334091,10 @@
"cf3d75125402197f7b1a52b4a38fe9acc168643f",
[]
],
"background-sync.idl": [
"c52dcdb89843e80e9bd89591df76ba26f7172dab",
[]
],
"badging.idl": [
"01481820935a08675e4bef734aada27b3151e814",
[]
@ -334821,7 +334869,7 @@
]
},
"lint.ignore": [
"078a706f079c3cfc2a88dbd8ce9b3b290d1ffcfb",
"9d057e76edc3bb6a94adcff9c897ef48e2235e3c",
[]
],
"loading": {
@ -334882,6 +334930,12 @@
[]
]
},
"manifest": {
"META.yml": [
"013fc58a29fa7f83e5e6a034d3a343bc87ab629d",
[]
]
},
"mathml": {
"META.yml": [
"5aea9088d744bfa835ca91217c9a6d9f60253e3e",
@ -341603,6 +341657,10 @@
"39149915cc573b3f8a5e0e01a10729494aec59f1",
[]
],
"embed-navigation-is-not-intercepted-iframe.html": [
"5e86f67735f778c590eeb5fd29567dbb23033055",
[]
],
"embedded-content-from-server.html": [
"ff50a9c752690d6726d0cd6d9820947f1bc5d4b0",
[]
@ -342175,6 +342233,10 @@
"0aeb81951ede48c62780fe723013b2ad77ffe336",
[]
],
"object-navigation-is-not-intercepted-iframe.html": [
"5c8ab79a500a93ce04e6704e5762eacd717c4f71",
[]
],
"onactivate-throw-error-from-nested-event-worker.js": [
"7c97014fd042affbd38d77fa538d8a584d7c72f7",
[]
@ -344501,7 +344563,7 @@
[]
],
"README.md": [
"9342aded298bdd0e5daac12289c78163d1d5bec5",
"2203727ef96f313cd7c5e6afb766a07b70969cec",
[]
],
"__init__.py": [
@ -344509,7 +344571,7 @@
[]
],
"commands.json": [
"15182cc9e6531d5a5ba3d42c9f00821946c5e8a3",
"421b0a636c2593bb3aa133b133373b54be6796ea",
[]
],
"documentation": {
@ -344519,7 +344581,7 @@
]
},
"frontend.py": [
"59a1cff2ebd0efda06fadd144a84b5d35b2d81c8",
"6d35d4c3826311da2b36b9f2efe6dd7bfd0cc7a8",
[]
],
"retry.py": [
@ -344891,7 +344953,7 @@
],
"quic": {
"README.md": [
"5a64b701cfb85900c219463624e6afa299a3813d",
"ef1d66e3220285f8b1eb0e0a7d188a09350c3fd8",
[]
],
"__init__.py": [
@ -350113,7 +350175,7 @@
[]
],
"run.py": [
"a9fdeada1ec780a50093f221673cf406864e36c2",
"95d9369f2a888657c23315d8d97b9eb636e3db96",
[]
],
"testfiles.py": [
@ -350138,7 +350200,7 @@
[]
],
"test_run.py": [
"ef58ec41b2b4cfc14955b701627d047af78f29bc",
"d533977e0c7436010ec9d81c826dd6f8453a9785",
[]
],
"test_testfiles.py": [
@ -352045,7 +352107,7 @@
[]
],
"keyframe-tests.js": [
"3cf3cf22bf8666a3800dfd3cc3cd4e37c7f7598e",
"43e0d7575f2cc47294e2435f311e26c66bb52a36",
[]
],
"keyframe-utils.js": [
@ -357794,7 +357856,7 @@
"testharness": {
"BackgroundSync": {
"idlharness.https.any.js": [
"120477a51e61ad32f629e991a12e8bc99c4dbb7e",
"29fb87b8263e87a0d570c874a9531e64d5d76b83",
[
"BackgroundSync/idlharness.https.any.html",
{
@ -401818,6 +401880,13 @@
{}
]
],
"text-overflow-ellipsis-self-painting.html": [
"2810f8dae1810f3385fe978f0066210cfc24fdf6",
[
null,
{}
]
],
"text-overflow-ellipsis-width-001.html": [
"2042111588254242c202527589507b40ef0c3538",
[
@ -455975,7 +456044,7 @@
]
],
"iframe_sandbox_allow_top_navigation-1.html": [
"feb876608aca54d9bbe9113a9e5a28fa1d2e0ee2",
"b033ec44d24e106a265bf480296f09cbe3e27c32",
[
null,
{}
@ -455989,7 +456058,7 @@
]
],
"iframe_sandbox_allow_top_navigation-3.html": [
"c7c56d670e5a32884b39e4034f83f5443cd76290",
"c3e5dc1fd6a0c5786dfeed57699bbf37901fa08e",
[
null,
{}
@ -468677,6 +468746,15 @@
]
]
},
"manifest": {
"link-rel-manifest.html": [
"8eb39703a082daedc921b156287b014eaf836665",
[
null,
{}
]
]
},
"mathml": {
"presentation-markup": {
"direction": {
@ -474818,6 +474896,13 @@
{}
]
],
"parent-no-child-bad-subdomain.sub.https.html": [
"2653dabd980b8caf65cf84b4765a2cfc0c4cb5c9",
[
null,
{}
]
],
"parent-no-child-yes-same.sub.https.html": [
"4239e1644638b04d330ff70f8a27e97f5af88ab0",
[
@ -474832,6 +474917,13 @@
{}
]
],
"parent-no-child-yes-with-params-subdomain.sub.https.html": [
"164a19ff381f9f351af805cf8ff73ddac92bafb1",
[
null,
{}
]
],
"parent-no-child1-no-child2-yes-children-different.sub.https.html": [
"3c879391a4571398a4254a15906411d5e844c596",
[
@ -491849,7 +491941,7 @@
]
],
"embed-and-object-are-not-intercepted.https.html": [
"34556a785aea6810243ca473fc40066d16265116",
"581dbeca9772268ab85a2b50d8f7f45cf61e781f",
[
null,
{}
@ -509905,7 +509997,7 @@
]
],
"animate.html": [
"00e68b429621f65e68285bda2fa04ccb39f3f8e9",
"dad633ba9a2ca0ed10574c973b036f76b738d0db",
[
null,
{}
@ -535897,20 +535989,6 @@
{}
]
],
"min-height-applies-to-013.xht": [
"13ddef79ec10b58218885d267dc47f4e5ae90ec9",
[
null,
{}
]
],
"min-height-applies-to-014.xht": [
"2abb772d9b53644c2d46d2bbbf100273cf38258a",
[
null,
{}
]
],
"min-width-014.xht": [
"611e40506bcc1e0ecfcce3ad84ea005efa221b9d",
[

View file

@ -0,0 +1,4 @@
[hit-test-floats-003.html]
[Miss float below something else]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-004.html]
[Miss float below something else]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -0,0 +1,2 @@
[min-height-applies-to-013.xht]
expected: FAIL

View file

@ -0,0 +1,2 @@
[min-height-applies-to-014.xht]
expected: FAIL

View file

@ -2,3 +2,6 @@
[Hit test intersecting scaled box]
expected: FAIL
[Hit test within unscaled box]
expected: FAIL

View file

@ -0,0 +1,4 @@
[text-overflow-ellipsis-self-painting.html]
[CSS Basic User Interface Test: ellipsis when there are self-painting objects]
expected: FAIL

View file

@ -21,6 +21,3 @@
[test the top of layer]
expected: FAIL
[test some point of the element: top left corner]
expected: FAIL

View file

@ -1,4 +0,0 @@
[elementsFromPoint-invalid-cases.html]
[The root element is the last element returned for otherwise empty queries within the viewport]
expected: FAIL

View file

@ -321,15 +321,18 @@
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL

View file

@ -56,6 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript;charset=windows-1252 error text/javascript]
[separate text/javascript error]
expected: FAIL

View file

@ -11,6 +11,3 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL
[X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_1.html]
[Multiple history traversals from the same task]
expected: FAIL

View file

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

View file

@ -1,5 +1,5 @@
[embedded-opener-remove-frame.html]
expected: CRASH
expected: TIMEOUT
[opener and "removed" embedded documents]
expected: FAIL
@ -7,5 +7,5 @@
expected: FAIL
[opener of discarded auxiliary browsing context]
expected: FAIL
expected: TIMEOUT

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_escaping-1.html]
type: testharness
expected: CRASH
expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_nonescaping-1.html]
type: testharness
expected: CRASH
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN

View file

@ -1,4 +0,0 @@
[module-static-import-delayed.html]
[document.write in an imported module]
expected: FAIL

View file

@ -4,3 +4,6 @@
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: TIMEOUT
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: FAIL

View file

@ -0,0 +1,5 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -0,0 +1,5 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -1,5 +0,0 @@
[018.html]
expected: TIMEOUT
[origin of the script that invoked the method, javascript:]
expected: TIMEOUT

View file

@ -4,10 +4,10 @@
'use strict';
// https://wicg.github.io/BackgroundSync/spec/
// https://wicg.github.io/background-sync/spec/
idl_test(
['BackgroundSync'],
['background-sync'],
['service-workers', 'html', 'dom'],
idlArray => {
const isServiceWorker = location.pathname.includes('.serviceworker.');

View file

@ -11,6 +11,7 @@
<style type="text/css"><![CDATA[
table
{
font: 16px monospace;
border-collapse: separate;
border: blue solid medium;
border-spacing: 0px;
@ -33,7 +34,6 @@
td
{
color: navy;
padding: 0;
}
]]></style>

View file

@ -10,8 +10,8 @@
<link rel="match" href="c414-flt-fit-000-ref.xht" />
<style type="text/css"><![CDATA[
div { border: solid blue; padding: 1em; width: 14em; margin: 10px; }
div p { margin: 0; width: 5em; float: left; color: navy; }
div { font: 16px monospace; border: solid blue; padding: 1em; width: 14em; margin: 10px; }
div p { margin: 0; width: 5em; float: left; }
]]></style>
</head>
@ -22,7 +22,7 @@
<p> 2 </p>
<p> 4 </p>
3
5&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;
5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <!-- the font is set to monospace so we know how wide a nbsp is -->
</div>
</body>
</html>

View file

@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-min-height" />
<link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#min-max-heights" />
<link rel="match" href="../../reference/pass_if_square_96px_black.html" />
<meta name="flags" content="" />
<meta name="assert" content="The 'min-height' property applies to elements with 'display' set to 'table'." />
<style type="text/css">
@ -36,4 +37,4 @@
</div>
</div>
</body>
</html>
</html>

View file

@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-min-height" />
<link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#min-max-heights" />
<link rel="match" href="../../reference/pass_if_square_96px_black.html" />
<meta name="flags" content="" />
<meta name="assert" content="The 'min-height' property applies to elements with 'display' set to 'inline-table'." />
<style type="text/css">
@ -36,4 +37,4 @@
</div>
</div>
</body>
</html>
</html>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<title>CSS Basic User Interface Test: ellipsis when there are self-painting objects</title>
<link rel="help" href="http://www.w3.org/TR/css3-ui/#text-overflow">
<link rel="help" href="https://crbug.com/1005645">
<link rel="author" href="mailto:kojii@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.test {
width: 5ch;
white-space: nowrap;
}
.ellipsis {
text-overflow: ellipsis;
overflow: hidden;
}
span {
display: inline-block;
width: 16px;
height: 16px;
background: red;
opacity: 0.3;
}
</style>
<body>
<div id="test" class="test ellipsis">1234567890 <span></span></div>
<div id="ref" class="test">1234567890 <span></span></div>
<script>
test(() => {
const ref_element = document.getElementById('ref');
const test_element = document.getElementById('test');
assert_equals(test_element.scrollWidth, ref_element.scrollWidth);
});
</script>
</body>

View file

@ -8,7 +8,6 @@
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<iframe sandbox="allow-top-navigation allow-scripts"></iframe>
<script>
// We are the main test page. Open a popup, so that we can
// can experiment navigation of the top frame.
@ -17,7 +16,8 @@
assert_equals(e.data, "can navigate");
e.source.close();
}));
window.open("support/load-into-the-iframe.html");
let sandbox = "allow-top-navigation allow-scripts";
window.open("support/load-into-the-iframe.html?sandbox=" + sandbox);
}, "Frames with `allow-top-navigation` should be able to navigate the top frame.");
</script>
</body>

View file

@ -9,10 +9,6 @@
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<!-- Specifying both allow-top-navigation and
allow-top-navigation-by-user-activation is a document conformance
error: allow-top-navigation-by-user-activation will have no effect. -->
<iframe sandbox="allow-top-navigation allow-top-navigation-by-user-activation allow-scripts"></iframe>
<script>
// We are the main test page. Open a popup, so that we can
// can experiment navigation of the top frame.
@ -21,7 +17,11 @@
assert_equals(e.data, "can navigate");
e.source.close();
}));
window.open("support/load-into-the-iframe.html");
// Specifying both allow-top-navigation and
// allow-top-navigation-by-user-activation is a document conformance
// error: allow-top-navigation-by-user-activation will have no effect.
let sandbox = "allow-top-navigation allow-top-navigation-by-user-activation allow-scripts";
window.open("support/load-into-the-iframe.html?sandbox=" + sandbox);
}, "Frames with `allow-top-navigation` should be able to navigate the top frame even when `allow-top-navigation-by-user-activation` is set.");
</script>
</body>

View file

@ -7,13 +7,18 @@
<body>
<iframe sandbox="allow-scripts"></iframe>
<script>
let frame = document.querySelector("iframe");
let sandbox = new URL(location.href).searchParams.get("sandbox");
if (sandbox) {
frame.sandbox = sandbox;
}
// We're the popup (i.e. a top frame). Load into the iframe the page
// trying to modifying the top frame and transmit the result to our
// opener.
onmessage = function(e) {
opener.postMessage(e.data, "*")
}
document.querySelector("iframe").src = "iframe-that-performs-top-navigation-on-popup.html";
frame.src = "iframe-that-performs-top-navigation-on-popup.html";
</script>
</body>
</html>

View file

@ -757,6 +757,7 @@ TESTHARNESS-IN-OTHER-TYPE: html/semantics/interactive-elements/the-summary-eleme
TESTHARNESS-IN-OTHER-TYPE: html/semantics/text-level-semantics/the-ruby-element/rt-without-ruby-crash.html
TESTHARNESS-IN-OTHER-TYPE: portals/portals-no-frame-crash.html
TESTHARNESS-IN-OTHER-TYPE: quirks/table-replaced-descendant-percentage-height-crash.html
TESTHARNESS-IN-OTHER-TYPE: scroll-animations/null-scroll-source-crash.html
TESTHARNESS-IN-OTHER-TYPE: svg/extensibility/foreignObject/foreign-object-circular-filter-reference-crash.html
TESTHARNESS-IN-OTHER-TYPE: svg/extensibility/foreignObject/foreign-object-under-clip-path-crash.html
TESTHARNESS-IN-OTHER-TYPE: svg/extensibility/foreignObject/foreign-object-under-defs-crash.html

View file

@ -0,0 +1,5 @@
spec: https://w3c.github.io/manifest/
suggested_reviewers:
- marcoscaceres
- mgiuca
- kenchris

View file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<title>Test that "manifest" is a supported value for the `rel` of a `link`</title>
<link rel="help" href="https://w3c.github.io/manifest">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
test(() => {
const result = document.createElement("link").relList.supports("manifest")
assert_true(result, "Expected true if manifest is supported as a link relationship");
}, 'link element supports a rel value of "manifest".');
</script>

View file

@ -0,0 +1,33 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Parent is not isolated, child attempts to isolate but uses a bad header value, child is a subdomain of the parent</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script type="module">
import { insertIframe, sendWasmModule, setBothDocumentDomains } from "./resources/helpers.mjs";
for (const badValue of ["", "?0", "true", "\"?1\"", "1", "?2", "(?1)"]) {
let frameWindow;
promise_test(async () => {
frameWindow = await insertIframe("{{hosts[][www]}}", badValue);
}, `"${badValue}": frame insertion`);
// Since the header values are bad there should be no isolation
promise_test(async () => {
const whatHappened = await sendWasmModule(frameWindow);
assert_equals(whatHappened, "WebAssembly.Module message received");
}, `"${badValue}": message event must occur for`);
promise_test(async () => {
await setBothDocumentDomains(frameWindow);
// Must not throw
frameWindow.document;
}, `"${badValue}": setting document.domain must give sync access`);
}
</script>

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Parent is not isolated, child is isolated using parameters on its structured header, child is a subdomain of the parent</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script type="module">
import { insertIframe, sendWasmModule, setBothDocumentDomains } from "./resources/helpers.mjs";
let frameWindow;
promise_setup(async () => {
frameWindow = await insertIframe("{{hosts[][www]}}", "?1;param1;param2=value2");
});
// Since they're different-origin, the child's isolation request is respected,
// so the parent ends up in the site-keyed agent cluster and the child in the
// origin-keyed one.
promise_test(async () => {
const whatHappened = await sendWasmModule(frameWindow);
assert_equals(whatHappened, "messageerror");
}, "messageerror event must occur");
promise_test(async () => {
await setBothDocumentDomains(frameWindow);
assert_throws_dom("SecurityError", DOMException, () => {
frameWindow.document;
});
}, "setting document.domain should no-op instead of giving sync access");
</script>

View file

@ -0,0 +1,70 @@
<html class="reftest-wait">
<title>Scroll-linked animation with Animatable interface</title>
<link rel="help" href="https://drafts.csswg.org/scroll-animations/">
<meta name="assert" content="ScrollTimeline should work with animatable
interface">
<link rel="match" href="animation-ref.html">
<script src="/web-animations/testcommon.js"></script>
<script src="/common/reftest-wait.js"></script>
<style>
#box {
width: 100px;
height: 100px;
background-color: green;
}
#covered {
width: 100px;
height: 100px;
background-color: red;
}
#scroller {
overflow: auto;
height: 100px;
width: 100px;
will-change: transform;
/* force compositing */
}
#contents {
height: 1000px;
width: 100%;
}
</style>
<div id="box"></div>
<div id="covered"></div>
<div id="scroller">
<div id="contents"></div>
</div>
<script>
const scroller = document.getElementById('scroller');
const scroll_timeline = new ScrollTimeline({
scrollSource: scroller,
timeRange: 1000
});
const box = document.getElementById('box');
const animation = box.animate(
[
{ transform: 'translateY(0)', opacity: 1 },
{ transform: 'translateY(200px)', opacity: 0 }
], {
duration: 1000,
timeline: scroll_timeline
}
);
animation.ready.then(() => {
// Move the scroller to the halfway point.
const maxScroll = scroller.scrollHeight - scroller.clientHeight;
scroller.scrollTop = 0.5 * maxScroll;
waitForAnimationFrames(2).then(_ => {
takeScreenshot();
});
});
</script>

View file

@ -0,0 +1,26 @@
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1088319">
<meta name="assert" content="Playing animation with null scroll source should not crash.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
html {
overflow: scroll;
}
body {
overflow: scroll;
}
</style>
<div id="box"></div>
<script>
test(() => {
const effect = new KeyframeEffect(box, []);
const timeline = new ScrollTimeline({
timeRange: 1000
});
const animation = new Animation(effect, timeline);
assert_equals(document.scrollingElement, null,
"This test relies on scrolling element being nil");
animation.play();
}, "Playing animation with null scroll source should not crash");
</script>

View file

@ -75,4 +75,30 @@ promise_test(t => {
});
}, 'requests for OBJECT elements of an image should not be intercepted by service workers');
promise_test(t => {
let frame;
return with_iframe('resources/object-navigation-is-not-intercepted-iframe.html')
.then(f => {
frame = f;
t.add_cleanup(() => { frame.remove(); });
return frame.contentWindow.test_promise;
})
.then(result => {
assert_equals(result, 'request for embedded content was not intercepted');
});
}, 'post-load navigation of OBJECT elements should not be intercepted by service workers');
promise_test(t => {
let frame;
return with_iframe('resources/embed-navigation-is-not-intercepted-iframe.html')
.then(f => {
frame = f;
t.add_cleanup(() => { frame.remove(); });
return frame.contentWindow.test_promise;
})
.then(result => {
assert_equals(result, 'request for embedded content was not intercepted');
});
}, 'post-load navigation of EMBED elements should not be intercepted by service workers');
</script>

View file

@ -0,0 +1,23 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>iframe for embed-and-object-are-not-intercepted test</title>
<body>
<script>
// The EMBED element will call this with the result about whether the EMBED
// request was intercepted by the service worker.
var report_result;
// Our parent (the root frame of the test) will examine this to get the result.
var test_promise = new Promise(resolve => {
report_result = resolve;
});
let el = document.createElement('embed');
el.src = "/common/blank.html";
el.addEventListener('load', _ => {
window[0].location = "/service-workers/service-worker/resources/embedded-content-from-server.html";
}, { once: true });
document.body.appendChild(el);
</script>
</body>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>iframe for embed-and-object-are-not-intercepted test</title>
<body>
<script>
// The OBJECT element will call this with the result about whether the OBJECT
// request was intercepted by the service worker.
var report_result;
// Our parent (the root frame of the test) will examine this to get the result.
var test_promise = new Promise(resolve => {
report_result = resolve;
});
let el = document.createElement('object');
el.data = "/common/blank.html";
el.addEventListener('load', _ => {
window[0].location = "/service-workers/service-worker/resources/embedded-content-from-server.html";
}, { once: true });
document.body.appendChild(el);
</script>
</body>

View file

@ -4,15 +4,13 @@ images must be updated as well. Doing this requires you be part of the
'webplatformtests' organization on Docker Hub; ping @Hexcles or @stephenmcgruer
if you are not a member.
In this directory, run the following, where `<tag>` is of the form
`webplatformtests/wpt:{current-version + 0.01}`:
The tag for a new docker image is of the form
`webplatformtests/wpt:{current-version + 0.01}`
```sh
# --pull forces Docker to get the newest base image.
docker build --pull -t <tag> .
docker push <tag>
```
To update the docker image:
Then update the following Taskcluster configurations to use the new image:
* `.taskcluster.yml` (the decision task)
* `tools/ci/tc/tasks/test.yml` (all the other tasks)
* Update the following Taskcluster configurations to use the new image:
- `.taskcluster.yml` (the decision task)
- `tools/ci/tc/tasks/test.yml` (all the other tasks)
* Run `wpt docker-push`

View file

@ -1,6 +1,26 @@
{
"docker-run": {"path": "frontend.py", "script": "run", "parser": "parser_run", "help": "Run wpt docker image",
"virtualenv": false},
"docker-build": {"path": "frontend.py", "script": "build", "help": "Build wpt docker image",
"virtualenv": false}
"docker-run": {
"path": "frontend.py",
"script": "run",
"parser": "parser_run",
"help": "Run wpt docker image",
"virtualenv": false
},
"docker-build": {
"path": "frontend.py",
"script": "build",
"help": "Build wpt docker image",
"virtualenv": false
},
"docker-push": {
"path": "frontend.py",
"script": "push",
"parser": "parser_push",
"help": "Build and push wpt docker image",
"virtualenv": true,
"install": [
"requests",
"pyyaml"
]
}
}

View file

@ -1,18 +1,111 @@
import argparse
import subprocess
import logging
import os
import re
import subprocess
import sys
from six import iteritems
here = os.path.abspath(os.path.dirname(__file__))
wpt_root = os.path.abspath(os.path.join(here, os.pardir, os.pardir))
def build(*args, **kwargs):
logger = logging.getLogger()
def build(tag="wpt:local", *args, **kwargs):
subprocess.check_call(["docker",
"build",
"--pull",
"--tag", "wpt:local",
"--tag", tag,
here])
def parser_push():
parser = argparse.ArgumentParser()
parser.add_argument("--tag", action="store",
help="Tag to use (default is taken from .taskcluster.yml)")
parser.add_argument("--force", action="store_true",
help="Ignore warnings and push anyway")
return parser
def walk_yaml(root, target):
rv = []
if isinstance(root, list):
for value in root:
if isinstance(value, (dict, list)):
rv.extend(walk_yaml(value, target))
elif isinstance(root, dict):
for key, value in iteritems(root):
if isinstance(value, (dict, list)):
rv.extend(walk_yaml(value, target))
elif key == target:
rv.append(value)
return rv
def read_image_name():
import yaml
with open(os.path.join(wpt_root, ".taskcluster.yml")) as f:
taskcluster_data = yaml.safe_load(f)
taskcluster_values = set(walk_yaml(taskcluster_data, "image"))
with open(os.path.join(wpt_root, "tools", "ci", "tc", "tasks", "test.yml")) as f:
test_data = yaml.safe_load(f)
tests_value = test_data["components"]["wpt-base"]["image"]
return taskcluster_values, tests_value
def lookup_tag(tag):
import requests
org, repo_version = tag.split("/", 1)
repo, version = repo_version.rsplit(":", 1)
resp = requests.get("https://hub.docker.com/v2/repositories/%s/%s/tags/%s" %
(org, repo, version))
if resp.status_code == 200:
return True
if resp.status_code == 404:
return False
resp.raise_for_status()
def push(venv, tag=None, force=False, *args, **kwargs):
taskcluster_tags, tests_tag = read_image_name()
taskcluster_tag = taskcluster_tags.pop()
error_log = logger.warning if force else logger.error
if len(taskcluster_tags) != 0 or tests_tag != taskcluster_tag:
error_log("Image names in .taskcluster.yml and tools/ci/tc/tasks/test.yml "
"don't match.")
if not force:
sys.exit(1)
if tag is not None and tag != taskcluster_tag:
error_log("Supplied tag doesn't match .taskcluster.yml or "
"tools/ci/tc/tasks/test.yml; remember to update before pushing")
if not force:
sys.exit(1)
if tag is None:
logger.info("Using tag %s from .taskcluster.yml" % taskcluster_tag)
tag = taskcluster_tag
tag_re = re.compile(r"webplatformtests/wpt:\d\.\d+")
if not tag_re.match(tag):
error_log("Tag doesn't match expected format webplatformtests/wpt:0.x")
if not force:
sys.exit(1)
if lookup_tag(tag):
# No override for this case
logger.critical("Tag %s already exists" % tag)
sys.exit(1)
build(tag)
subprocess.check_call(["docker",
"push",
tag])
def parser_run():
parser = argparse.ArgumentParser()
parser.add_argument("--rebuild", action="store_true", help="Force rebuild of image")

View file

@ -11,20 +11,23 @@ authors can implement custom handlers by putting python scripts in
## Custom Handlers
The QuicTransportServer calls functions defined in each handler script.
- handle_client_indication is called during the client indication process.
- `handle_client_indication` is called during the client indication process.
This function is called with three arguments:
- connection: aioquic.asyncio.QuicConnectionProtocol
- origin: str The origin of the initiator.
- query: Dict[str, str] The dictionary of query parameters of the URL of the
connection.
- `connection`: [`aioquic.asyncio.QuicConnectionProtocol`](protocol)
- `origin`: `str` The origin of the initiator.
- `query`: `Dict[str, str]` The dictionary of query parameters of the URL of the
connection.
A handler can abort the client indication process either by raising an
exception or closing the connection.
- handle_event is called when a QuicEvent arrives.
- connection: aioquic.asyncio.QuicConnectionProtocol
- event: aioquic.quic.events.QuicEvent
- `handle_event` is called when a [`QuicEvent`](event) arrives.
- `connection`: [`aioquic.asyncio.QuicConnectionProtocol`](protocol)
- `event`: [`aioquic.quic.events.QuicEvent`](event)
This function is not called until the client indication process finishes
successfully.
[protocol]: https://aioquic.readthedocs.io/en/latest/asyncio.html#aioquic.asyncio.QuicConnectionProtocol
[event]: https://aioquic.readthedocs.io/en/latest/quic.html#module-aioquic.quic.events

View file

@ -156,11 +156,10 @@ class BrowserSetup(object):
name = None
browser_cls = None
def __init__(self, venv, prompt=True, sub_product=None):
def __init__(self, venv, prompt=True):
self.browser = self.browser_cls(logger)
self.venv = venv
self.prompt = prompt
self.sub_product = sub_product
def prompt_install(self, component):
if not self.prompt:
@ -588,8 +587,10 @@ class Sauce(BrowserSetup):
raise NotImplementedError
def setup_kwargs(self, kwargs):
kwargs.set_if_none("sauce_browser", self.sub_product[0])
kwargs.set_if_none("sauce_version", self.sub_product[1])
if kwargs["sauce_browser"] is None:
raise WptrunError("Missing required argument --sauce-browser")
if kwargs["sauce_version"] is None:
raise WptrunError("Missing required argument --sauce-version")
kwargs["test_types"] = ["testharness", "reftest"]
@ -719,9 +720,7 @@ def setup_wptrunner(venv, prompt=True, install_browser=False, **kwargs):
kwargs = utils.Kwargs(iteritems(kwargs))
product_parts = kwargs["product"].split(":")
kwargs["product"] = product_parts[0].replace("-", "_")
sub_product = product_parts[1:]
kwargs["product"] = kwargs["product"].replace("-", "_")
check_environ(kwargs["product"])
args_general(kwargs)
@ -729,7 +728,7 @@ def setup_wptrunner(venv, prompt=True, install_browser=False, **kwargs):
if kwargs["product"] not in product_setup:
raise WptrunError("Unsupported product %s" % kwargs["product"])
setup_cls = product_setup[kwargs["product"]](venv, prompt, sub_product)
setup_cls = product_setup[kwargs["product"]](venv, prompt)
setup_cls.install_requirements()
affected_revish = kwargs.pop("affected", None)

View file

@ -69,5 +69,6 @@ def test_setup_wptrunner(venv, logger, product):
kwargs["binary"] = sys.argv[0]
kwargs["webdriver_binary"] = sys.argv[0]
if kwargs["product"] == "sauce":
kwargs["product"] = "sauce:firefox:63"
kwargs["sauce_browser"] = "firefox"
kwargs["sauce_version"] = "63"
run.setup_wptrunner(venv, **kwargs)

View file

@ -202,6 +202,18 @@ async_test(t => {
}, 'Element.animate() correctly sets the Animation\'s timeline when ' +
'triggered on an element in a different document');
for (const subtest of gAnimationTimelineTests) {
test(t => {
const anim = createDiv(t).animate(null, { timeline: subtest.timeline });
assert_not_equals(anim, null,
'An animation sohuld be created');
assert_equals(anim.timeline, subtest.expectedTimeline,
'Animation timeline should be '+
subtest.expectedTimelineDescription);
}, 'Element.animate() correctly sets the Animation\'s timeline '
+ subtest.description + ' in KeyframeAnimationOptions.');
}
test(t => {
const anim = createDiv(t).animate(null, 2000);
assert_equals(anim.playState, 'running');

View file

@ -796,3 +796,32 @@ const gInvalidKeyframeEffectOptionTests = [
{ desc: 'a variable easing', input: { easing: 'var(--x)' } },
{ desc: 'a multi-value easing', input: { easing: 'ease-in-out, ease-out' } },
];
// There is currently only ScrollTimeline that can be constructed and used here
// beyond document timeline. Given that ScrollTimeline is not stable as of yet
// it's tested in scroll-animations/animation-with-animatable-interface.html.
const gAnimationTimelineTests = [
{
expectedTimeline: document.timeline,
expectedTimelineDescription: 'document.timeline',
description: 'with no timeline parameter'
},
{
timeline: undefined,
expectedTimeline: document.timeline,
expectedTimelineDescription: 'document.timeline',
description: 'with undefined timeline'
},
{
timeline: null,
expectedTimeline: null,
expectedTimelineDescription: 'null',
description: 'with null timeline'
},
{
timeline: document.timeline,
expectedTimeline: document.timeline,
expectedTimelineDescription: 'document.timeline',
description: 'with DocumentTimeline'
},
];