Update web-platform-tests to revision f26f3ca338953d0c2e8b62c97623f0f0eea430be

This commit is contained in:
WPT Sync Bot 2019-01-29 20:38:21 -05:00
parent 62ff032130
commit 3033b05605
32 changed files with 636 additions and 132 deletions

View file

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

View file

@ -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": [

View file

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

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,4 @@
[document-open-cancels-javascript-url-navigation.html]
[document-open-cancels-javascript-url-navigation]
expected: FAIL

View file

@ -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

View file

@ -0,0 +1,2 @@
[automation-changes.html]
expected: ERROR

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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

View file

@ -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-', '')); },

View file

@ -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>

View file

@ -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 {
};

View file

@ -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;
};

View file

@ -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;
};

View file

@ -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;
};

View file

@ -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 {
};

View file

@ -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>

View file

@ -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"])

View file

@ -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

View file

@ -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>

View file

@ -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);

View file

@ -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) {