mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
Update web-platform-tests to revision f26f3ca338953d0c2e8b62c97623f0f0eea430be
This commit is contained in:
parent
62ff032130
commit
3033b05605
32 changed files with 636 additions and 132 deletions
|
@ -14,9 +14,6 @@
|
|||
[Revoke blob URL after creating Request, will fetch]
|
||||
expected: FAIL
|
||||
|
||||
[Revoke blob URL after calling fetch, fetch should succeed]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[url-with-fetch.any.html]
|
||||
[Untitled]
|
||||
|
|
|
@ -129501,6 +129501,30 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-multicol/multicol-span-all-009.html": [
|
||||
[
|
||||
"/css/css-multicol/multicol-span-all-009.html",
|
||||
[
|
||||
[
|
||||
"/css/css-multicol/multicol-span-all-009-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-multicol/multicol-span-all-010.html": [
|
||||
[
|
||||
"/css/css-multicol/multicol-span-all-010.html",
|
||||
[
|
||||
[
|
||||
"/css/css-multicol/multicol-span-all-010-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-multicol/multicol-span-all-block-sibling-003.xht": [
|
||||
[
|
||||
"/css/css-multicol/multicol-span-all-block-sibling-003.xht",
|
||||
|
@ -136657,6 +136681,30 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-sizing/block-image-percentage-max-height-inside-inline.html": [
|
||||
[
|
||||
"/css/css-sizing/block-image-percentage-max-height-inside-inline.html",
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-sizing/image-percentage-max-height-in-anonymous-block.html": [
|
||||
[
|
||||
"/css/css-sizing/image-percentage-max-height-in-anonymous-block.html",
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-sizing/intrinsic-percent-non-replaced-001.html": [
|
||||
[
|
||||
"/css/css-sizing/intrinsic-percent-non-replaced-001.html",
|
||||
|
@ -266911,6 +266959,16 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-multicol/multicol-span-all-009-ref.html": [
|
||||
[
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-multicol/multicol-span-all-010-ref.html": [
|
||||
[
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-multicol/multicol-span-all-block-sibling-3-ref.xht": [
|
||||
[
|
||||
{}
|
||||
|
@ -382526,6 +382584,12 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/document-open-cancels-javascript-url-navigation.html": [
|
||||
[
|
||||
"/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/document-open-cancels-javascript-url-navigation.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/document.open-01.xhtml": [
|
||||
[
|
||||
"/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/document.open-01.xhtml",
|
||||
|
@ -418728,6 +418792,12 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"webaudio/the-audio-api/the-pannernode-interface/automation-changes.html": [
|
||||
[
|
||||
"/webaudio/the-audio-api/the-pannernode-interface/automation-changes.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html": [
|
||||
[
|
||||
"/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html",
|
||||
|
@ -477772,7 +477842,7 @@
|
|||
"support"
|
||||
],
|
||||
"content-security-policy/navigation/to-javascript-parent-initiated-child-csp.html": [
|
||||
"d2289257a888efe0f35e296922948bdbf5f70394",
|
||||
"f4daf182f74fd550bee7d2d274e3842c84054e7c",
|
||||
"testharness"
|
||||
],
|
||||
"content-security-policy/navigation/to-javascript-parent-initiated-parent-csp-disallow.html": [
|
||||
|
@ -477780,7 +477850,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"content-security-policy/navigation/to-javascript-parent-initiated-parent-csp.html": [
|
||||
"4cbb37ee68fb83890d5f4881c4e1a78f013eaa52",
|
||||
"8aa8884914d58185bc5622dc0f3047030f873e1c",
|
||||
"testharness"
|
||||
],
|
||||
"content-security-policy/navigation/to-javascript-url-frame-src.html": [
|
||||
|
@ -566991,6 +567061,22 @@
|
|||
"2464327ff4238fb167bb8fc76b7f3d01fea1d377",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-multicol/multicol-span-all-009-ref.html": [
|
||||
"b323e423e0ce6076d166e59349a373715dc91de3",
|
||||
"support"
|
||||
],
|
||||
"css/css-multicol/multicol-span-all-009.html": [
|
||||
"7b030fb672092ad24a8bca1b21eed0a9c24e7bda",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-multicol/multicol-span-all-010-ref.html": [
|
||||
"417bd528b3ee96a8f4bcdbfb4638941176c00ef6",
|
||||
"support"
|
||||
],
|
||||
"css/css-multicol/multicol-span-all-010.html": [
|
||||
"49b8f918585b46afa8687e7e75979062f49c3e2a",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-multicol/multicol-span-all-block-sibling-003.xht": [
|
||||
"bd2cdd6cdab0fc15c2e16e2237f6b025230332c4",
|
||||
"reftest"
|
||||
|
@ -573487,6 +573573,14 @@
|
|||
"0dbbb2f9404da7cfa89f2e75af3ca06cfbe4be7e",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-sizing/block-image-percentage-max-height-inside-inline.html": [
|
||||
"2f6ad684c1fb0be5498dc6a5b938da67adfe3ec7",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-sizing/image-percentage-max-height-in-anonymous-block.html": [
|
||||
"5b1713975eb21e96a558933f81412a7bb0007d19",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-sizing/intrinsic-percent-non-replaced-001-ref.html": [
|
||||
"0b217dd192c0644ba30ec2ceb290689b99ff9193",
|
||||
"support"
|
||||
|
@ -611812,7 +611906,7 @@
|
|||
"support"
|
||||
],
|
||||
"docs/_writing-tests/testharness-api.md": [
|
||||
"5d23e253946d17e1f497d1e7487605292a079db3",
|
||||
"657d3962c98978b4c697edc6815bde7fe2ba35c5",
|
||||
"support"
|
||||
],
|
||||
"docs/_writing-tests/testharness.md": [
|
||||
|
@ -623128,7 +623222,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"html/dom/elements/global-attributes/dataset-delete.html": [
|
||||
"65e131f445a409ddff840cad7d98c449d1bca042",
|
||||
"1440118f6daa531d2bfde982c67676d22cffa197",
|
||||
"testharness"
|
||||
],
|
||||
"html/dom/elements/global-attributes/dataset-enumeration.html": [
|
||||
|
@ -638191,6 +638285,10 @@
|
|||
"be646d15b803d3fbe583a38d4524ad36e1a9b5d1",
|
||||
"testharness"
|
||||
],
|
||||
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/document-open-cancels-javascript-url-navigation.html": [
|
||||
"5596382f2264cb84da5b528f18df74bbe79f4695",
|
||||
"testharness"
|
||||
],
|
||||
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/document.open-01.xhtml": [
|
||||
"974702ae8cbdbd45704d325d5d7e1e649535bd09",
|
||||
"testharness"
|
||||
|
@ -639636,7 +639734,7 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/accelerometer.idl": [
|
||||
"8be7d09881d28240bc7c48d897e05a5b8ca234ad",
|
||||
"3705d4ba0ec93e23254374bd9b8e60dfb2cf0a08",
|
||||
"support"
|
||||
],
|
||||
"interfaces/ambient-light.idl": [
|
||||
|
@ -639820,7 +639918,7 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/geolocation-sensor.idl": [
|
||||
"40a164767e2a92e2cce07c6416bc22a7809568cb",
|
||||
"41c310acefe12f7dcf8ae2a3369fcc11230b2a09",
|
||||
"support"
|
||||
],
|
||||
"interfaces/geometry.idl": [
|
||||
|
@ -639828,7 +639926,7 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/gyroscope.idl": [
|
||||
"d71fd367bf0630938f523c710f421148edbc092d",
|
||||
"24cd82c643159d680004937d12a17a38c06ece1b",
|
||||
"support"
|
||||
],
|
||||
"interfaces/hr-time.idl": [
|
||||
|
@ -639868,7 +639966,7 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/magnetometer.idl": [
|
||||
"bcc8d4becbafb2d2c717d63a118cf768576daa63",
|
||||
"fd29af847679dcca3c4d2d3eedf56d1cf9af89ff",
|
||||
"support"
|
||||
],
|
||||
"interfaces/media-capabilities.idl": [
|
||||
|
@ -639920,7 +640018,7 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/orientation-sensor.idl": [
|
||||
"49acba9e201d28753103964db7458d324be50bdf",
|
||||
"a9aec968e0a072df3bf1eb1452045958f693bc96",
|
||||
"support"
|
||||
],
|
||||
"interfaces/page-visibility.idl": [
|
||||
|
@ -666008,7 +666106,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"service-workers/service-worker/claim-fetch.https.html": [
|
||||
"6b7d353c6ae3b53c5c7d9398f09fb2f476201db1",
|
||||
"400b593ac961942f6e9274aee98bac22856eaf22",
|
||||
"testharness"
|
||||
],
|
||||
"service-workers/service-worker/claim-not-using-registration.https.html": [
|
||||
|
@ -673560,7 +673658,7 @@
|
|||
"support"
|
||||
],
|
||||
"tools/ci/tag_master.py": [
|
||||
"72bafd3a866317889ecbb75a6981ce1c88a38b9e",
|
||||
"0ae2801dfe70b2e3409800f210410a107ea53d81",
|
||||
"support"
|
||||
],
|
||||
"tools/ci/taskcluster-run.py": [
|
||||
|
@ -673844,7 +673942,7 @@
|
|||
"support"
|
||||
],
|
||||
"tools/manifest/vcs.py": [
|
||||
"69eb9ab8ecb8f08cadfaf3fb76ee2ae39903fa9b",
|
||||
"69c7a79076bfa57035e74f9e9cbc61add523891a",
|
||||
"support"
|
||||
],
|
||||
"tools/py27-flake8.ini": [
|
||||
|
@ -674244,7 +674342,7 @@
|
|||
"support"
|
||||
],
|
||||
"tools/requirements_flake8.txt": [
|
||||
"00d182e2d0f5fc013056951229e3aa3f38143369",
|
||||
"970f00416dc8bea1e7722dac6fa1074d50bb00b6",
|
||||
"support"
|
||||
],
|
||||
"tools/runner/css/bootstrap-theme.min.css": [
|
||||
|
@ -679208,7 +679306,7 @@
|
|||
"support"
|
||||
],
|
||||
"tools/wptserve/tests/test_config.py": [
|
||||
"45f138f131d3bcb754fcd4605d5e3a101cf8d6e8",
|
||||
"85271c3a4b324705688f505b53499bab83e133b4",
|
||||
"support"
|
||||
],
|
||||
"tools/wptserve/tests/test_replacement_tokenizer.py": [
|
||||
|
@ -683415,6 +683513,10 @@
|
|||
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
|
||||
"support"
|
||||
],
|
||||
"webaudio/the-audio-api/the-pannernode-interface/automation-changes.html": [
|
||||
"8aa73552aab5e1639ac95e4ae7e06c725c9cad0c",
|
||||
"testharness"
|
||||
],
|
||||
"webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html": [
|
||||
"d330c9c3de4482ee70c036e0ab7ff8feb1fd5a36",
|
||||
"testharness"
|
||||
|
@ -685104,7 +685206,7 @@
|
|||
"support"
|
||||
],
|
||||
"webrtc-quic/RTCQuicStream.https.html": [
|
||||
"b62377f0ced871f8f8d6b51b5715d68abbe0334e",
|
||||
"563d74a20808c23491d3b1228b827e6809dba1bf",
|
||||
"testharness"
|
||||
],
|
||||
"webrtc-quic/RTCQuicTransport-helper.js": [
|
||||
|
@ -685216,7 +685318,7 @@
|
|||
"support"
|
||||
],
|
||||
"webrtc/RTCIceTransport-extension.https.html": [
|
||||
"e9e70379a483e1456259b521fc8094689aa15373",
|
||||
"0d54c8b0239ce90f15680f8075c8aae651eb20d1",
|
||||
"testharness"
|
||||
],
|
||||
"webrtc/RTCIceTransport.html": [
|
||||
|
|
|
@ -6,3 +6,6 @@
|
|||
[Instant scrolling while doing history navigation.]
|
||||
expected: FAIL
|
||||
|
||||
[Smooth scrolling while doing history navigation.]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -312,3 +312,6 @@
|
|||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[dataset-delete.html]
|
||||
[Deleting element.dataset['-foo'\] should not remove an attribute with name 'data--foo' should it exist.]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[document-open-cancels-javascript-url-navigation.html]
|
||||
[document-open-cancels-javascript-url-navigation]
|
||||
expected: FAIL
|
||||
|
|
@ -12,6 +12,3 @@
|
|||
[Verifies the resolution of entry.startTime is at least 5 microseconds.]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Verifies the resolution of performance.now() is at least 5 microseconds.]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[automation-changes.html]
|
||||
expected: ERROR
|
|
@ -8,11 +8,13 @@
|
|||
<div onclick="frames[0].location.href = 'javascript:parent.postMessage(\'executed\', \'*\')'" id="special_div"></div>
|
||||
<script>
|
||||
var t = async_test("Should have executed the javascript url");
|
||||
frames[0].addEventListener('load', () => {
|
||||
window.onmessage = t.step_func(function(e) {
|
||||
if (e.data == "executed")
|
||||
t.done();
|
||||
});
|
||||
window.addEventListener('securitypolicyviolation', t.unreached_func("Should not have raised a violation event"));
|
||||
document.getElementById('special_div').click();
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
<div onclick="frames[0].location.href = 'javascript:parent.postMessage(\'executed\', \'*\')'" id="special_div"></div>
|
||||
<script nonce='abc'>
|
||||
var t = async_test("Should not have executed the javascript url");
|
||||
frames[0].addEventListener('load', () => {
|
||||
window.onmessage = t.step_func(function(e) {
|
||||
if (e.data == "executed")
|
||||
assert_true(false, "Javascript url executed");
|
||||
|
@ -18,5 +19,6 @@
|
|||
assert_equals(e.violatedDirective, 'script-src-attr');
|
||||
}));
|
||||
document.getElementById('special_div').click();
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Multi-column Layout Test Reference: Test the multicol element is the containing block of absolute elements</title>
|
||||
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
|
||||
<style>
|
||||
body {
|
||||
column-count: 1;
|
||||
column-rule: 6px solid;
|
||||
width: 400px;
|
||||
outline: 1px solid black;
|
||||
transform: scale(1);
|
||||
}
|
||||
h3 {
|
||||
/* "column-count: 1" makes this behave like a real spanner. */
|
||||
outline: 1px solid blue;
|
||||
}
|
||||
.out-of-flow {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<body>
|
||||
<article id="column">
|
||||
<h3>spanner</h3>
|
||||
<div class="out-of-flow">out-of-flow</div>
|
||||
</article>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Multi-column Layout Test: Test the multicol element is the containing block of absolute elements</title>
|
||||
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-multicol-1/#the-multi-column-model">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-multicol-1/#column-span">
|
||||
<link rel="match" href="multicol-span-all-009-ref.html">
|
||||
<meta name="assert" content="This test checks the multicol element, not the column boxes divided by column-span, is the containing block of absolute elements.">
|
||||
|
||||
<style>
|
||||
article {
|
||||
column-count: 3;
|
||||
column-rule: 6px solid;
|
||||
width: 400px;
|
||||
outline: 1px solid black;
|
||||
transform: scale(1);
|
||||
}
|
||||
h3 {
|
||||
column-span: all;
|
||||
outline: 1px solid blue;
|
||||
}
|
||||
.out-of-flow {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<body>
|
||||
<article id="column">
|
||||
<h3>spanner</h3>
|
||||
<div class="out-of-flow">out-of-flow</div>
|
||||
</article>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,34 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Multi-column Layout Test Reference: Test the position of the out-of-flow block is relative to the fragment divided by column-span:all</title>
|
||||
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
|
||||
<style>
|
||||
body {
|
||||
column-count: 1;
|
||||
column-rule: 6px solid;
|
||||
width: 400px;
|
||||
outline: 1px solid black;
|
||||
}
|
||||
h3 {
|
||||
/* "column-count: 1" makes this behave like a real spanner. */
|
||||
outline: 1px solid blue;
|
||||
}
|
||||
.out-of-flow {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<body>
|
||||
<article id="column">
|
||||
<h3>spanner</h3>
|
||||
<div style="transform: scale(1)">
|
||||
<div class="out-of-flow">out-of-flow</div>
|
||||
</div>
|
||||
</article>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,40 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Multi-column Layout Test: Test the position of the out-of-flow block is relative to the later fragment divided by the column-span:all</title>
|
||||
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-multicol-1/#the-multi-column-model">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-multicol-1/#column-span">
|
||||
<link rel="match" href="multicol-span-all-010-ref.html">
|
||||
<meta name="assert" content="This test checks the position of the out-of-flow block is relative to the latre fragment divided by the column-span:all.">
|
||||
|
||||
<style>
|
||||
article {
|
||||
column-count: 3;
|
||||
column-rule: 6px solid;
|
||||
width: 400px;
|
||||
outline: 1px solid black;
|
||||
}
|
||||
h3 {
|
||||
column-span: all;
|
||||
outline: 1px solid blue;
|
||||
}
|
||||
.out-of-flow {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<body>
|
||||
<article id="column">
|
||||
<!-- "transform" doesn't create a new block formatting context, so
|
||||
column-span:all still works. -->
|
||||
<div style="transform: scale(1)">
|
||||
<h3>spanner</h3>
|
||||
<div class="out-of-flow">out-of-flow</div>
|
||||
</div>
|
||||
</article>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-sizing-3/#max-size-properties">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||
<div style="width:100px; height:100px; background:red;">
|
||||
<span>
|
||||
<!-- The image is a 1x1 transparent one. -->
|
||||
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" style="display:block; max-width:100px; height:1000px; max-height:100%; background:green;">
|
||||
</span>
|
||||
</div>
|
|
@ -0,0 +1,10 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-sizing-3/#max-size-properties">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||
<div style="width:100px; height:100px; background:red;">
|
||||
<div></div>
|
||||
<!-- The image is a 1x1 transparent one. -->
|
||||
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" style="max-width:100px; height:1000px; max-height:100%; background:green;">
|
||||
</div>
|
|
@ -776,11 +776,14 @@ assert that property `property_name` on object is readonly
|
|||
### `assert_throws(code, func, description)`
|
||||
`code` - the expected exception. This can take several forms:
|
||||
|
||||
* string - the thrown exception must be a DOMException with the given
|
||||
name, e.g., "TimeoutError" (for compatibility with existing
|
||||
tests, a constant is also supported, e.g., "TIMEOUT_ERR")
|
||||
* object - the thrown exception must have a property called "name" that
|
||||
matches code.name
|
||||
* string - asserts that the thrown exception must be a DOMException
|
||||
with the given name, e.g., "TimeoutError". (For
|
||||
compatibility with existing tests, the name of a
|
||||
DOMException constant can also be given, e.g.,
|
||||
"TIMEOUT_ERR")
|
||||
* object - asserts that the thrown exception must be any other kind
|
||||
of exception, with a property called "name" that matches
|
||||
`code.name`.
|
||||
|
||||
`func` - a function that should throw
|
||||
|
||||
|
|
|
@ -32,8 +32,15 @@
|
|||
"Deleting element.dataset['-'] should also remove an attribute with name 'data--' should it exist.");
|
||||
test(function() { assert_true(testDelete('data--foo', 'Foo')); },
|
||||
"Deleting element.dataset['Foo'] should also remove an attribute with name 'data--foo' should it exist.");
|
||||
test(function() { assert_true(testDeleteNoAdd('data--foo', '-foo')); },
|
||||
"Deleting element.dataset['-foo'] should also remove an attribute with name 'data--foo' should it exist.");
|
||||
test(function() {
|
||||
var d = document.createElement("div");
|
||||
d.setAttribute('data--foo', "value");
|
||||
assert_equals(d.dataset['-foo'], undefined);
|
||||
assert_false('-foo' in d.dataset);
|
||||
delete d.dataset['-foo'];
|
||||
assert_true(d.hasAttribute('data--foo'));
|
||||
assert_equals(d.getAttribute('data--foo'), "value");
|
||||
}, "Deleting element.dataset['-foo'] should not remove an attribute with name 'data--foo' should it exist.");
|
||||
test(function() { assert_true(testDelete('data---foo', '-Foo')); },
|
||||
"Deleting element.dataset['-Foo'] should also remove an attribute with name 'data---foo' should it exist.");
|
||||
test(function() { assert_true(testDelete('data-', '')); },
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
<body>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
async_test(t => {
|
||||
window.onload = t.step_func_done(() => assert_equals(i.contentDocument.body.innerText, "PASS"));
|
||||
|
||||
var i = document.createElement('iframe');
|
||||
i.id ='i';
|
||||
i.src = "javascript:'FAIL'";
|
||||
document.body.appendChild(i);
|
||||
i.contentDocument.open();
|
||||
i.contentDocument.write("PASS")
|
||||
i.contentDocument.close();
|
||||
});
|
||||
</script>
|
||||
</body>
|
|
@ -26,3 +26,15 @@ interface LinearAccelerationSensor : Accelerometer {
|
|||
Exposed=Window]
|
||||
interface GravitySensor : Accelerometer {
|
||||
};
|
||||
|
||||
dictionary AccelerometerReadingValues {
|
||||
required double? x;
|
||||
required double? y;
|
||||
required double? z;
|
||||
};
|
||||
|
||||
dictionary LinearAccelerationReadingValues : AccelerometerReadingValues {
|
||||
};
|
||||
|
||||
dictionary GravityReadingValues : AccelerometerReadingValues {
|
||||
};
|
||||
|
|
|
@ -33,3 +33,13 @@ dictionary GeolocationSensorReading {
|
|||
double? heading;
|
||||
double? speed;
|
||||
};
|
||||
|
||||
dictionary GeolocationReadingValues {
|
||||
required double? latitude;
|
||||
required double? longitude;
|
||||
required double? altitude;
|
||||
required double? accuracy;
|
||||
required double? altitudeAccuracy;
|
||||
required double? heading;
|
||||
required double? speed;
|
||||
};
|
||||
|
|
|
@ -15,3 +15,9 @@ enum GyroscopeLocalCoordinateSystem { "device", "screen" };
|
|||
dictionary GyroscopeSensorOptions : SensorOptions {
|
||||
GyroscopeLocalCoordinateSystem referenceFrame = "device";
|
||||
};
|
||||
|
||||
dictionary GyroscopeReadingValues {
|
||||
required double? x;
|
||||
required double? y;
|
||||
required double? z;
|
||||
};
|
||||
|
|
|
@ -27,3 +27,18 @@ interface UncalibratedMagnetometer : Sensor {
|
|||
readonly attribute double? yBias;
|
||||
readonly attribute double? zBias;
|
||||
};
|
||||
|
||||
dictionary MagnetometerReadingValues {
|
||||
required double? x;
|
||||
required double? y;
|
||||
required double? z;
|
||||
};
|
||||
|
||||
dictionary UncalibratedMagnetometerReadingValues {
|
||||
required double? x;
|
||||
required double? y;
|
||||
required double? z;
|
||||
required double? xBias;
|
||||
required double? yBias;
|
||||
required double? zBias;
|
||||
};
|
||||
|
|
|
@ -24,3 +24,10 @@ interface AbsoluteOrientationSensor : OrientationSensor {
|
|||
[Constructor(optional OrientationSensorOptions sensorOptions), SecureContext, Exposed=Window]
|
||||
interface RelativeOrientationSensor : OrientationSensor {
|
||||
};
|
||||
|
||||
dictionary AbsoluteOrientationReadingValues {
|
||||
required FrozenArray<double>? quaternion;
|
||||
};
|
||||
|
||||
dictionary RelativeOrientationReadingValues : AbsoluteOrientationReadingValues {
|
||||
};
|
||||
|
|
|
@ -7,66 +7,80 @@
|
|||
<body>
|
||||
<script>
|
||||
|
||||
promise_test(function(t) {
|
||||
var frame;
|
||||
var resource = 'simple.txt';
|
||||
async function try_fetch(fetch_func, path) {
|
||||
let response;
|
||||
try {
|
||||
response = await fetch_func(path);
|
||||
} catch (err) {
|
||||
throw (`fetch() threw: ${err}`);
|
||||
}
|
||||
|
||||
var worker;
|
||||
var scope = 'resources/';
|
||||
var script = 'resources/claim-worker.js';
|
||||
let response_text;
|
||||
try {
|
||||
response_text = await response.text();
|
||||
} catch (err) {
|
||||
throw (`text() threw: ${err}`);
|
||||
}
|
||||
|
||||
return Promise.resolve()
|
||||
// Create the test iframe.
|
||||
.then(() => with_iframe('resources/blank.html'))
|
||||
.then(f => frame = f)
|
||||
return response_text;
|
||||
}
|
||||
|
||||
promise_test(async function(t) {
|
||||
let frame;
|
||||
const scope = 'resources/';
|
||||
const script = 'resources/claim-worker.js';
|
||||
t.add_cleanup(async () => {
|
||||
if (frame)
|
||||
frame.remove();
|
||||
return service_worker_unregister(t, scope);
|
||||
});
|
||||
|
||||
const resource = 'simple.txt';
|
||||
|
||||
// Create the test frame.
|
||||
await service_worker_unregister(t, scope);
|
||||
frame = await with_iframe('resources/blank.html');
|
||||
|
||||
// Check the controller and test with fetch.
|
||||
.then(() => assert_equals(frame.contentWindow.navigator.controller,
|
||||
undefined,
|
||||
'Should have no controller.'))
|
||||
.then(() => frame.contentWindow.fetch(resource))
|
||||
.then(response => response.text())
|
||||
.then(response_text => assert_equals(response_text,
|
||||
'a simple text file\n',
|
||||
'fetch() should not be intercepted.'))
|
||||
assert_equals(frame.contentWindow.navigator.controller, undefined,
|
||||
'Should have no controller.');
|
||||
let response;
|
||||
try {
|
||||
response = await try_fetch(frame.contentWindow.fetch, resource);
|
||||
} catch (err) {
|
||||
assert_unreached(`uncontrolled fetch failed: ${err}`);
|
||||
}
|
||||
assert_equals(response, 'a simple text file\n',
|
||||
'fetch() should not be intercepted.');
|
||||
|
||||
// Register a service worker.
|
||||
.then(() => service_worker_unregister_and_register(t, script, scope))
|
||||
.then(r => {
|
||||
t.add_cleanup(() => service_worker_unregister(t, scope));
|
||||
const registration = await navigator.serviceWorker.register(script, {scope});
|
||||
const worker = registration.installing;
|
||||
await wait_for_state(t, worker, 'activated');
|
||||
|
||||
worker = r.installing;
|
||||
|
||||
return wait_for_state(t, worker, 'activated');
|
||||
})
|
||||
// Let the service worker claim the iframe.
|
||||
.then(() => {
|
||||
var channel = new MessageChannel();
|
||||
var saw_message = new Promise(function(resolve) {
|
||||
channel.port1.onmessage = t.step_func(function(e) {
|
||||
assert_equals(e.data, 'PASS',
|
||||
'Worker call to claim() should fulfill.');
|
||||
resolve();
|
||||
});
|
||||
// Tell the service worker to claim the iframe.
|
||||
const saw_message = new Promise((resolve) => {
|
||||
const channel = new MessageChannel();
|
||||
channel.port1.onmessage = t.step_func((event) => {
|
||||
resolve(event.data);
|
||||
});
|
||||
worker.postMessage({port: channel.port2}, [channel.port2]);
|
||||
return saw_message;
|
||||
})
|
||||
});
|
||||
const data = await saw_message;
|
||||
assert_equals(data, 'PASS', 'Worker call to claim() should fulfill.');
|
||||
|
||||
// Check the controller and test with fetch.
|
||||
.then(() => frame.contentWindow.navigator.serviceWorker.getRegistration(scope))
|
||||
.then(r => assert_equals(frame.contentWindow.navigator.serviceWorker.controller,
|
||||
r.active,
|
||||
'Test iframe should be claimed.'))
|
||||
.then(() => frame.contentWindow.fetch(resource))
|
||||
.then(response => response.text())
|
||||
.then(response_text => assert_equals(response_text,
|
||||
'Intercepted!',
|
||||
'fetch() should be intercepted.'))
|
||||
|
||||
// Cleanup this testcase.
|
||||
.then(() => frame.remove())
|
||||
}, 'fetch() should be intercepted after the client is claimed.')
|
||||
const controller = frame.contentWindow.navigator.serviceWorker.controller;
|
||||
assert_true(controller instanceof frame.contentWindow.ServiceWorker,
|
||||
'iframe should be controlled.');
|
||||
try {
|
||||
response = await try_fetch(frame.contentWindow.fetch, resource);
|
||||
} catch (err) {
|
||||
assert_unreached(`controlled fetch failed: ${err}`);
|
||||
}
|
||||
assert_equals(response, 'Intercepted!',
|
||||
'fetch() should be intercepted.');
|
||||
}, 'fetch() should be intercepted after the client is claimed.');
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -17,9 +17,9 @@ logging.basicConfig(level=logging.INFO)
|
|||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def get_pr(repo, owner, sha):
|
||||
def get_pr(owner, repo, sha):
|
||||
url = ("https://api.github.com/search/issues?q=type:pr+is:merged+repo:%s/%s+sha:%s" %
|
||||
(repo, owner, sha))
|
||||
(owner, repo, sha))
|
||||
try:
|
||||
resp = urllib2.urlopen(url)
|
||||
body = resp.read()
|
||||
|
@ -51,11 +51,11 @@ def get_pr(repo, owner, sha):
|
|||
return pr["number"]
|
||||
|
||||
|
||||
def tag(repo, owner, sha, tag):
|
||||
def tag(owner, repo, sha, tag):
|
||||
data = json.dumps({"ref": "refs/tags/%s" % tag,
|
||||
"sha": sha})
|
||||
try:
|
||||
url = "https://api.github.com/repos/%s/%s/git/refs" % (repo, owner)
|
||||
url = "https://api.github.com/repos/%s/%s/git/refs" % (owner, repo)
|
||||
req = urllib2.Request(url, data=data)
|
||||
|
||||
base64string = base64.b64encode(os.environ["GH_TOKEN"])
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
flake8==3.6.0
|
||||
pycodestyle==2.4.0
|
||||
pycodestyle==2.5.0
|
||||
pyflakes==2.1.0
|
||||
pep8-naming==0.7.0
|
||||
|
|
|
@ -0,0 +1,140 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Panner Node Automation</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="../../resources/audit-util.js"></script>
|
||||
<script src="../../resources/audit.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<script>
|
||||
// Use a power-of-two to eliminate some round-off; otherwise, this isn't
|
||||
// really important.
|
||||
const sampleRate = 16384;
|
||||
|
||||
// Render enough for the test; we don't need a lot.
|
||||
const renderFrames = 2048;
|
||||
|
||||
// Initial panner positionX and final positionX for listener.
|
||||
const positionX = 2000;
|
||||
|
||||
const audit = Audit.createTaskRunner();
|
||||
|
||||
// Test that listener.positionX.value setter does the right thing.
|
||||
audit.define('Set Listener.positionX.value', (task, should) => {
|
||||
const context = new OfflineAudioContext(2, renderFrames, sampleRate);
|
||||
|
||||
createGraph(context);
|
||||
|
||||
// Frame at which the listener instantaneously moves to a new location.
|
||||
const moveFrame = 512;
|
||||
|
||||
context.suspend(moveFrame / context.sampleRate)
|
||||
.then(() => {
|
||||
context.listener.positionX.value = positionX;
|
||||
})
|
||||
.then(() => context.resume());
|
||||
|
||||
verifyOutput(context, moveFrame, should, 'listenr.positionX.value')
|
||||
.then(() => task.done());
|
||||
});
|
||||
|
||||
// Test that listener.positionX.setValueAtTime() does the right thing.
|
||||
audit.define('Listener.positionX.setValue', (task, should) => {
|
||||
const context = new OfflineAudioContext(2, renderFrames, sampleRate);
|
||||
|
||||
createGraph(context);
|
||||
|
||||
// Frame at which the listener instantaneously moves to a new location.
|
||||
const moveFrame = 512;
|
||||
|
||||
context.listener.positionX.setValueAtTime(
|
||||
positionX, moveFrame / context.sampleRate);
|
||||
|
||||
verifyOutput(
|
||||
context, moveFrame, should, 'listener.positionX.setValueATTime')
|
||||
.then(() => task.done());
|
||||
});
|
||||
|
||||
// Test that listener.setPosition() does the right thing.
|
||||
audit.define('Listener.setPosition', (task, should) => {
|
||||
const context = new OfflineAudioContext(2, renderFrames, sampleRate);
|
||||
|
||||
createGraph(context);
|
||||
|
||||
// Frame at which the listener instantaneously moves to a new location.
|
||||
const moveFrame = 512;
|
||||
|
||||
context.suspend(moveFrame / context.sampleRate)
|
||||
.then(() => {
|
||||
context.listener.setPosition(positionX, 0, 0);
|
||||
})
|
||||
.then(() => context.resume());
|
||||
|
||||
verifyOutput(context, moveFrame, should, 'listener.setPostion')
|
||||
.then(() => task.done());
|
||||
});
|
||||
|
||||
audit.run();
|
||||
|
||||
|
||||
// Create the basic graph for testing which consists of an oscillator node
|
||||
// connected to a panner node.
|
||||
function createGraph(context) {
|
||||
const listener = context.listener;
|
||||
|
||||
listener.positionX.value = 0;
|
||||
listener.positionY.value = 0;
|
||||
listener.positionZ.value = 0;
|
||||
|
||||
const src = new OscillatorNode(context);
|
||||
|
||||
const panner = new PannerNode(context, {
|
||||
distanceModel: 'linear',
|
||||
refDistance: 1,
|
||||
maxDistance: 3000,
|
||||
positionX: positionX,
|
||||
positionY: 0,
|
||||
positionZ: 0
|
||||
});
|
||||
src.connect(panner).connect(context.destination);
|
||||
|
||||
src.start();
|
||||
}
|
||||
|
||||
|
||||
// Verify the output from the panner is correct.
|
||||
function verifyOutput(context, moveFrame, should, prefix) {
|
||||
return context.startRendering().then(resultBuffer => {
|
||||
// Get the outputs (left and right)
|
||||
const c0 = resultBuffer.getChannelData(0);
|
||||
const c1 = resultBuffer.getChannelData(1);
|
||||
|
||||
// The src/listener set up is such that audio should only come
|
||||
// from the right for until |moveFrame|. Hence the left channel
|
||||
// should be 0 (or very nearly 0).
|
||||
const zero = new Float32Array(moveFrame);
|
||||
|
||||
should(
|
||||
c0.slice(0, moveFrame), `${prefix}: output0[0:${moveFrame - 1}]`)
|
||||
.beCloseToArray(zero, {absoluteThreshold: 1e-16});
|
||||
should(
|
||||
c1.slice(0, moveFrame), `${prefix}: output1[0:${moveFrame - 1}]`)
|
||||
.notBeConstantValueOf(0);
|
||||
|
||||
// At |moveFrame| and beyond, the listener and source are at the
|
||||
// same position, so the outputs from the left and right should be
|
||||
// identical, and the left channel should not be 0 anymore.
|
||||
|
||||
should(c0.slice(moveFrame), `${prefix}: output0[${moveFrame}:]`)
|
||||
.notBeConstantValueOf(0);
|
||||
should(c1.slice(moveFrame), `${prefix}: output1[${moveFrame}:]`)
|
||||
.beCloseToArray(c0.slice(moveFrame));
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -500,18 +500,6 @@ function generateData(amount) {
|
|||
return data;
|
||||
}
|
||||
|
||||
// Writes |amount| of bytes to the given RTCQuicStream in maxWriteBufferedAmount
|
||||
// chunks.
|
||||
async function writeGeneratedData(stream, amount) {
|
||||
const data = generateData(Math.min(stream.maxWriteBufferedAmount, amount));
|
||||
while (amount > 0) {
|
||||
const chunkSize = Math.min(stream.maxWriteBufferedAmount, amount);
|
||||
await stream.waitForWriteBufferedAmountBelow(0);
|
||||
stream.write({ data: data.subarray(0, chunkSize) });
|
||||
amount -= chunkSize;
|
||||
}
|
||||
}
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
|
@ -535,22 +523,6 @@ promise_test(async t => {
|
|||
finReadBuffer, data.subarray(5, data.length));
|
||||
}, 'readInto() reads out finish after reading all data.');
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
const localStream = localQuicTransport.createStream();
|
||||
const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream');
|
||||
writeGeneratedData(localStream, localStream.maxReadBufferedAmount);
|
||||
const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream');
|
||||
await remoteStream.waitForReadable(localStream.maxReadBufferedAmount);
|
||||
const readBuffer = new Uint8Array(localStream.maxReadBufferedAmount);
|
||||
assert_object_equals(
|
||||
remoteStream.readInto(readBuffer),
|
||||
{ amount: localStream.maxReadBufferedAmount, finished: false } );
|
||||
assert_array_equals(
|
||||
readBuffer, generateData(localStream.maxReadBufferedAmount));
|
||||
}, 'Read maxReadBufferedAmount bytes all at once.');
|
||||
|
||||
promise_test(async t => {
|
||||
const [ localQuicTransport, remoteQuicTransport ] =
|
||||
await makeTwoConnectedQuicTransports(t);
|
||||
|
|
|
@ -255,6 +255,26 @@ promise_test(async t => {
|
|||
]);
|
||||
}, 'Two RTCIceTransports connect to each other');
|
||||
|
||||
['controlling', 'controlled'].forEach(role => {
|
||||
promise_test(async t => {
|
||||
const [ localTransport, remoteTransport ] =
|
||||
makeAndGatherTwoIceTransports(t);
|
||||
localTransport.start(remoteTransport.getLocalParameters(), role);
|
||||
localTransport.start(remoteTransport.getLocalParameters(), role);
|
||||
const localWatcher = new EventWatcher(t, localTransport, 'statechange');
|
||||
const remoteWatcher = new EventWatcher(t, remoteTransport, 'statechange');
|
||||
await Promise.all([
|
||||
localWatcher.wait_for('statechange').then(() => {
|
||||
assert_equals(localTransport.state, 'connected');
|
||||
}),
|
||||
remoteWatcher.wait_for('statechange').then(() => {
|
||||
assert_equals(remoteTransport.state, 'connected');
|
||||
}),
|
||||
]);
|
||||
}, `Two RTCIceTransports configured with the ${role} role resolve the ` +
|
||||
'conflict in band and still connect.');
|
||||
});
|
||||
|
||||
promise_test(async t => {
|
||||
async function waitForConnectedThenSelectedCandidatePairChange(t, transport,
|
||||
transportName) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue