mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Update web-platform-tests to revision 9a4d479ed1347eb9184abc70d628a6da2297657a
This commit is contained in:
parent
b6cc0f60a9
commit
effeb278b6
120 changed files with 3731 additions and 298 deletions
|
@ -1,4 +1,5 @@
|
||||||
[url-in-tags-revoke.window.html]
|
[url-in-tags-revoke.window.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[Fetching a blob URL immediately before revoking it works in an iframe.]
|
[Fetching a blob URL immediately before revoking it works in an iframe.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -14,3 +15,6 @@
|
||||||
[Opening a blob URL in a new window by clicking an <a> tag works immediately before revoking the URL.]
|
[Opening a blob URL in a new window by clicking an <a> tag works immediately before revoking the URL.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Fetching a blob URL immediately before revoking it works in <script> tags.]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -203889,6 +203889,18 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"std-toast/ref-tests/toast-slotting.html": [
|
||||||
|
[
|
||||||
|
"std-toast/ref-tests/toast-slotting.html",
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/std-toast/ref-tests/toast-slotting-expected.html",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"svg/coordinate-systems/abspos.html": [
|
"svg/coordinate-systems/abspos.html": [
|
||||||
[
|
[
|
||||||
"svg/coordinate-systems/abspos.html",
|
"svg/coordinate-systems/abspos.html",
|
||||||
|
@ -271385,6 +271397,9 @@
|
||||||
"html/semantics/text-level-semantics/the-a-element/resources/a-download-click.html": [
|
"html/semantics/text-level-semantics/the-a-element/resources/a-download-click.html": [
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
"html/semantics/text-level-semantics/the-a-element/resources/a-download-redirect-to-javascript.html": [
|
||||||
|
[]
|
||||||
|
],
|
||||||
"html/semantics/text-level-semantics/the-b-element/b-usage-notref.html": [
|
"html/semantics/text-level-semantics/the-b-element/b-usage-notref.html": [
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
@ -272702,6 +272717,15 @@
|
||||||
"kv-storage/helpers/kvs-tests.js": [
|
"kv-storage/helpers/kvs-tests.js": [
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
"kv-storage/secure-context/README.md": [
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
"kv-storage/secure-context/resources/dummy-module.js": [
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
"kv-storage/secure-context/resources/test-side-effects.js": [
|
||||||
|
[]
|
||||||
|
],
|
||||||
"layout-instability/resources/slow-image.py": [
|
"layout-instability/resources/slow-image.py": [
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
@ -273995,6 +274019,15 @@
|
||||||
"navigation-timing/resources/performance_attribute_sender.html": [
|
"navigation-timing/resources/performance_attribute_sender.html": [
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
"navigation-timing/resources/secure-connection-interim.html": [
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
"navigation-timing/resources/secure-connection-interim.html.headers": [
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
"navigation-timing/resources/secure-connection-test.html": [
|
||||||
|
[]
|
||||||
|
],
|
||||||
"navigation-timing/resources/webperftestharness.js": [
|
"navigation-timing/resources/webperftestharness.js": [
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
@ -278966,6 +278999,9 @@
|
||||||
"std-toast/META.yml": [
|
"std-toast/META.yml": [
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
"std-toast/ref-tests/toast-slotting-expected.html": [
|
||||||
|
[]
|
||||||
|
],
|
||||||
"std-toast/resources/helpers.js": [
|
"std-toast/resources/helpers.js": [
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
@ -286634,9 +286670,6 @@
|
||||||
"webxr/resources/webxr_util.js": [
|
"webxr/resources/webxr_util.js": [
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"webxr/resources/xr-test-asserts.js": [
|
|
||||||
[]
|
|
||||||
],
|
|
||||||
"workers/META.yml": [
|
"workers/META.yml": [
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
|
@ -309136,6 +309169,42 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"css/css-align/parsing/place-content-invalid.html": [
|
||||||
|
[
|
||||||
|
"css/css-align/parsing/place-content-invalid.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-align/parsing/place-content-valid.html": [
|
||||||
|
[
|
||||||
|
"css/css-align/parsing/place-content-valid.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-align/parsing/place-items-invalid.html": [
|
||||||
|
[
|
||||||
|
"css/css-align/parsing/place-items-invalid.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-align/parsing/place-items-valid.html": [
|
||||||
|
[
|
||||||
|
"css/css-align/parsing/place-items-valid.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-align/parsing/place-self-invalid.html": [
|
||||||
|
[
|
||||||
|
"css/css-align/parsing/place-self-invalid.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/css-align/parsing/place-self-valid.html": [
|
||||||
|
[
|
||||||
|
"css/css-align/parsing/place-self-valid.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"css/css-align/self-alignment/parse-align-self-001.html": [
|
"css/css-align/self-alignment/parse-align-self-001.html": [
|
||||||
[
|
[
|
||||||
"css/css-align/self-alignment/parse-align-self-001.html",
|
"css/css-align/self-alignment/parse-align-self-001.html",
|
||||||
|
@ -329391,6 +329460,12 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"element-timing/image-src-change.html": [
|
||||||
|
[
|
||||||
|
"element-timing/image-src-change.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"element-timing/image-with-css-scale.html": [
|
"element-timing/image-with-css-scale.html": [
|
||||||
[
|
[
|
||||||
"element-timing/image-with-css-scale.html",
|
"element-timing/image-with-css-scale.html",
|
||||||
|
@ -338884,6 +338959,14 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"event-timing/buffered-flag.html": [
|
||||||
|
[
|
||||||
|
"event-timing/buffered-flag.html",
|
||||||
|
{
|
||||||
|
"testdriver": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
"event-timing/crossiframe.html": [
|
"event-timing/crossiframe.html": [
|
||||||
[
|
[
|
||||||
"event-timing/crossiframe.html",
|
"event-timing/crossiframe.html",
|
||||||
|
@ -343072,6 +343155,12 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"fetch/sec-metadata/fetch.tentative.sub.html": [
|
||||||
|
[
|
||||||
|
"fetch/sec-metadata/fetch.tentative.sub.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"fetch/sec-metadata/font.tentative.https.sub.html": [
|
"fetch/sec-metadata/font.tentative.https.sub.html": [
|
||||||
[
|
[
|
||||||
"fetch/sec-metadata/font.tentative.https.sub.html",
|
"fetch/sec-metadata/font.tentative.https.sub.html",
|
||||||
|
@ -354988,6 +355077,12 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"html/semantics/text-level-semantics/the-a-element/a-download-click-redirect-to-javascript.html": [
|
||||||
|
[
|
||||||
|
"html/semantics/text-level-semantics/the-a-element/a-download-click-redirect-to-javascript.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"html/semantics/text-level-semantics/the-a-element/a-download-click.html": [
|
"html/semantics/text-level-semantics/the-a-element/a-download-click.html": [
|
||||||
[
|
[
|
||||||
"html/semantics/text-level-semantics/the-a-element/a-download-click.html",
|
"html/semantics/text-level-semantics/the-a-element/a-download-click.html",
|
||||||
|
@ -359503,21 +359598,33 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"kv-storage/non-secure-context-dynamic-import.html": [
|
"kv-storage/secure-context/dynamic-import.html": [
|
||||||
[
|
[
|
||||||
"kv-storage/non-secure-context-dynamic-import.html",
|
"kv-storage/secure-context/dynamic-import.html",
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"kv-storage/non-secure-context-import-statement.html": [
|
"kv-storage/secure-context/import-maps.html": [
|
||||||
[
|
[
|
||||||
"kv-storage/non-secure-context-import-statement.html",
|
"kv-storage/secure-context/import-maps.html",
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"kv-storage/non-secure-context-script-element.html": [
|
"kv-storage/secure-context/import-statement.html": [
|
||||||
[
|
[
|
||||||
"kv-storage/non-secure-context-script-element.html",
|
"kv-storage/secure-context/import-statement.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"kv-storage/secure-context/script-element.html": [
|
||||||
|
[
|
||||||
|
"kv-storage/secure-context/script-element.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"kv-storage/secure-context/side-effects.html": [
|
||||||
|
[
|
||||||
|
"kv-storage/secure-context/side-effects.html",
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
@ -359551,6 +359658,12 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"largest-contentful-paint/image-src-change.html": [
|
||||||
|
[
|
||||||
|
"largest-contentful-paint/image-src-change.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"largest-contentful-paint/observe-image.html": [
|
"largest-contentful-paint/observe-image.html": [
|
||||||
[
|
[
|
||||||
"largest-contentful-paint/observe-image.html",
|
"largest-contentful-paint/observe-image.html",
|
||||||
|
@ -359569,6 +359682,12 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"layout-instability/buffered-flag.html": [
|
||||||
|
[
|
||||||
|
"layout-instability/buffered-flag.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"layout-instability/observe-layout-shift.html": [
|
"layout-instability/observe-layout-shift.html": [
|
||||||
[
|
[
|
||||||
"layout-instability/observe-layout-shift.html",
|
"layout-instability/observe-layout-shift.html",
|
||||||
|
@ -360181,6 +360300,30 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"media-source/mediasource-changetype-play-implicit.html": [
|
||||||
|
[
|
||||||
|
"media-source/mediasource-changetype-play-implicit.html",
|
||||||
|
{
|
||||||
|
"timeout": "long"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"media-source/mediasource-changetype-play-negative.html": [
|
||||||
|
[
|
||||||
|
"media-source/mediasource-changetype-play-negative.html",
|
||||||
|
{
|
||||||
|
"timeout": "long"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"media-source/mediasource-changetype-play-without-codecs-parameter.html": [
|
||||||
|
[
|
||||||
|
"media-source/mediasource-changetype-play-without-codecs-parameter.html",
|
||||||
|
{
|
||||||
|
"timeout": "long"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
"media-source/mediasource-changetype-play.html": [
|
"media-source/mediasource-changetype-play.html": [
|
||||||
[
|
[
|
||||||
"media-source/mediasource-changetype-play.html",
|
"media-source/mediasource-changetype-play.html",
|
||||||
|
@ -363801,9 +363944,9 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"native-file-system/FileSystemBaseHandle-remove.tentative.window.js": [
|
"native-file-system/FileSystemBaseHandle-remove.tentative.https.window.js": [
|
||||||
[
|
[
|
||||||
"native-file-system/FileSystemBaseHandle-remove.tentative.window.html",
|
"native-file-system/FileSystemBaseHandle-remove.tentative.https.window.html",
|
||||||
{
|
{
|
||||||
"script_metadata": [
|
"script_metadata": [
|
||||||
[
|
[
|
||||||
|
@ -363814,9 +363957,9 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.window.js": [
|
"native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.https.window.js": [
|
||||||
[
|
[
|
||||||
"native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.window.html",
|
"native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.https.window.html",
|
||||||
{
|
{
|
||||||
"script_metadata": [
|
"script_metadata": [
|
||||||
[
|
[
|
||||||
|
@ -363827,9 +363970,9 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"native-file-system/FileSystemDirectoryHandle-getFile.tentative.window.js": [
|
"native-file-system/FileSystemDirectoryHandle-getFile.tentative.https.window.js": [
|
||||||
[
|
[
|
||||||
"native-file-system/FileSystemDirectoryHandle-getFile.tentative.window.html",
|
"native-file-system/FileSystemDirectoryHandle-getFile.tentative.https.window.html",
|
||||||
{
|
{
|
||||||
"script_metadata": [
|
"script_metadata": [
|
||||||
[
|
[
|
||||||
|
@ -363840,9 +363983,9 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"native-file-system/FileSystemWriter.tentative.window.js": [
|
"native-file-system/FileSystemWriter.tentative.https.window.js": [
|
||||||
[
|
[
|
||||||
"native-file-system/FileSystemWriter.tentative.window.html",
|
"native-file-system/FileSystemWriter.tentative.https.window.html",
|
||||||
{
|
{
|
||||||
"script_metadata": [
|
"script_metadata": [
|
||||||
[
|
[
|
||||||
|
@ -363853,9 +363996,9 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"native-file-system/NativeFileSystemWritableFileStream.tentative.window.js": [
|
"native-file-system/NativeFileSystemWritableFileStream.tentative.https.window.js": [
|
||||||
[
|
[
|
||||||
"native-file-system/NativeFileSystemWritableFileStream.tentative.window.html",
|
"native-file-system/NativeFileSystemWritableFileStream.tentative.https.window.html",
|
||||||
{
|
{
|
||||||
"script_metadata": [
|
"script_metadata": [
|
||||||
[
|
[
|
||||||
|
@ -364003,6 +364146,12 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"navigation-timing/secure-connection-start-reuse.https.html": [
|
||||||
|
[
|
||||||
|
"navigation-timing/secure-connection-start-reuse.https.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"navigation-timing/secure_connection_start_non_zero.https.html": [
|
"navigation-timing/secure_connection_start_non_zero.https.html": [
|
||||||
[
|
[
|
||||||
"navigation-timing/secure_connection_start_non_zero.https.html",
|
"navigation-timing/secure_connection_start_non_zero.https.html",
|
||||||
|
@ -390517,6 +390666,12 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"std-toast/styles.html": [
|
||||||
|
[
|
||||||
|
"std-toast/styles.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"storage/estimate-indexeddb.https.any.js": [
|
"storage/estimate-indexeddb.https.any.js": [
|
||||||
[
|
[
|
||||||
"storage/estimate-indexeddb.https.any.html",
|
"storage/estimate-indexeddb.https.any.html",
|
||||||
|
@ -409917,12 +410072,48 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"webxr/events_input_source_recreation.https.html": [
|
||||||
|
[
|
||||||
|
"webxr/events_input_source_recreation.https.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"webxr/events_input_sources_change.https.html": [
|
||||||
|
[
|
||||||
|
"webxr/events_input_sources_change.https.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"webxr/events_referenceSpace_reset.https.html": [
|
"webxr/events_referenceSpace_reset.https.html": [
|
||||||
[
|
[
|
||||||
"webxr/events_referenceSpace_reset.https.html",
|
"webxr/events_referenceSpace_reset.https.html",
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"webxr/events_session_select.https.html": [
|
||||||
|
[
|
||||||
|
"webxr/events_session_select.https.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"webxr/events_session_select_subframe.https.html": [
|
||||||
|
[
|
||||||
|
"webxr/events_session_select_subframe.https.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"webxr/getInputPose_handedness.https.html": [
|
||||||
|
[
|
||||||
|
"webxr/getInputPose_handedness.https.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"webxr/getInputPose_pointer.https.html": [
|
||||||
|
[
|
||||||
|
"webxr/getInputPose_pointer.https.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"webxr/idlharness.https.window.js": [
|
"webxr/idlharness.https.window.js": [
|
||||||
[
|
[
|
||||||
"webxr/idlharness.https.window.html",
|
"webxr/idlharness.https.window.html",
|
||||||
|
@ -410036,6 +410227,24 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"webxr/xrInputSource_add_remove.https.html": [
|
||||||
|
[
|
||||||
|
"webxr/xrInputSource_add_remove.https.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"webxr/xrInputSource_gamepad_disconnect.https.html": [
|
||||||
|
[
|
||||||
|
"webxr/xrInputSource_gamepad_disconnect.https.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"webxr/xrInputSource_gamepad_input_registered.https.html": [
|
||||||
|
[
|
||||||
|
"webxr/xrInputSource_gamepad_input_registered.https.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"webxr/xrRay_constructor.https.html": [
|
"webxr/xrRay_constructor.https.html": [
|
||||||
[
|
[
|
||||||
"webxr/xrRay_constructor.https.html",
|
"webxr/xrRay_constructor.https.html",
|
||||||
|
@ -410048,6 +410257,18 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"webxr/xrReferenceSpace_originOffset.https.html": [
|
||||||
|
[
|
||||||
|
"webxr/xrReferenceSpace_originOffset.https.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"webxr/xrReferenceSpace_originOffsetBounded.https.html": [
|
||||||
|
[
|
||||||
|
"webxr/xrReferenceSpace_originOffsetBounded.https.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"webxr/xrRigidTransform_constructor.https.html": [
|
"webxr/xrRigidTransform_constructor.https.html": [
|
||||||
[
|
[
|
||||||
"webxr/xrRigidTransform_constructor.https.html",
|
"webxr/xrRigidTransform_constructor.https.html",
|
||||||
|
@ -410084,6 +410305,12 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"webxr/xrSession_input_events_end.https.html": [
|
||||||
|
[
|
||||||
|
"webxr/xrSession_input_events_end.https.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"webxr/xrSession_prevent_multiple_exclusive.https.html": [
|
"webxr/xrSession_prevent_multiple_exclusive.https.html": [
|
||||||
[
|
[
|
||||||
"webxr/xrSession_prevent_multiple_exclusive.https.html",
|
"webxr/xrSession_prevent_multiple_exclusive.https.html",
|
||||||
|
@ -530845,6 +531072,30 @@
|
||||||
"1ee23af200f6300bc3a86f0a1b843c875c8c92a9",
|
"1ee23af200f6300bc3a86f0a1b843c875c8c92a9",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"css/css-align/parsing/place-content-invalid.html": [
|
||||||
|
"3fcd9a8dbed1b488ed16a40945fcb1e48c4fe6b8",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-align/parsing/place-content-valid.html": [
|
||||||
|
"a83aa4cec86db72adb691c8ad1bb061bb793267e",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-align/parsing/place-items-invalid.html": [
|
||||||
|
"9468d30e2e745ddc576b4bee18923d6943286222",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-align/parsing/place-items-valid.html": [
|
||||||
|
"72179bf2db0dcc7b76c8e0bbe5fe42ee8d81f9f3",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-align/parsing/place-self-invalid.html": [
|
||||||
|
"8a7a2ab187f9a34593d46da69d5d29ff62a7d716",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/css-align/parsing/place-self-valid.html": [
|
||||||
|
"36a8bd5026eab2870307c223028b499c02c92099",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"css/css-align/reference/baseline-of-scrollable-1-ref.html": [
|
"css/css-align/reference/baseline-of-scrollable-1-ref.html": [
|
||||||
"422660aff6b6b486ce3288469b4769e1497b071e",
|
"422660aff6b6b486ce3288469b4769e1497b071e",
|
||||||
"support"
|
"support"
|
||||||
|
@ -609514,7 +609765,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"element-timing/cross-origin-element.sub.html": [
|
"element-timing/cross-origin-element.sub.html": [
|
||||||
"40a97056c2bfba92485f627117f61cd56a563d0b",
|
"eef69a1d423a96cc8acd6b00a35e0c344ce7b7da",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"element-timing/cross-origin-iframe-element.sub.html": [
|
"element-timing/cross-origin-iframe-element.sub.html": [
|
||||||
|
@ -609530,7 +609781,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"element-timing/image-TAO.sub.html": [
|
"element-timing/image-TAO.sub.html": [
|
||||||
"83a7a5ca0a21e9b4fd32192b019b6a15603748c8",
|
"032ae6b12198b76107ab3dfcc2ab3b7f92b13c00",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"element-timing/image-carousel.html": [
|
"element-timing/image-carousel.html": [
|
||||||
|
@ -609557,6 +609808,10 @@
|
||||||
"7441405d7475b4a300962dc21dd9b50d52250c38",
|
"7441405d7475b4a300962dc21dd9b50d52250c38",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"element-timing/image-src-change.html": [
|
||||||
|
"89b8e1d3f74750d25ca997a6f258162c5d1f113e",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"element-timing/image-with-css-scale.html": [
|
"element-timing/image-with-css-scale.html": [
|
||||||
"5c15daabe13dda37ce58a9c056cb2884cf1bb584",
|
"5c15daabe13dda37ce58a9c056cb2884cf1bb584",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -609630,7 +609885,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"element-timing/resources/element-timing-helpers.js": [
|
"element-timing/resources/element-timing-helpers.js": [
|
||||||
"6c0aec80960ebab60979986434272a96ecc6c674",
|
"f98f9b21134e334e46510bb419a12291d23817bc",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"element-timing/resources/iframe-with-square-sends-entry.html": [
|
"element-timing/resources/iframe-with-square-sends-entry.html": [
|
||||||
|
@ -611805,6 +612060,10 @@
|
||||||
"c30c01aa96bb9bc835bb1ce93bff86f5e99789d7",
|
"c30c01aa96bb9bc835bb1ce93bff86f5e99789d7",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"event-timing/buffered-flag.html": [
|
||||||
|
"8b56ad7f44d6b2849d300338b45dd104059c3520",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"event-timing/crossiframe.html": [
|
"event-timing/crossiframe.html": [
|
||||||
"c1a27a5d021e210d7604f6a7dfab436c8547f03c",
|
"c1a27a5d021e210d7604f6a7dfab436c8547f03c",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -614341,6 +614600,10 @@
|
||||||
"bffb4275df8e99c9d06d4fa4ef518e3b1efba747",
|
"bffb4275df8e99c9d06d4fa4ef518e3b1efba747",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"fetch/sec-metadata/fetch.tentative.sub.html": [
|
||||||
|
"0c5caa76a2328148c9cced21bb5c27f07bd36bde",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"fetch/sec-metadata/font.tentative.https.sub.html": [
|
"fetch/sec-metadata/font.tentative.https.sub.html": [
|
||||||
"60163ee714686fc1c3f5f9b7011ce03cf3028e6b",
|
"60163ee714686fc1c3f5f9b7011ce03cf3028e6b",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -614354,7 +614617,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"fetch/sec-metadata/iframe.tentative.sub.html": [
|
"fetch/sec-metadata/iframe.tentative.sub.html": [
|
||||||
"eab2d3f5886ed178781e092b90bfd52eaa194bc5",
|
"2bc2581fceed3e3339c67dc4d5ee69e46636394f",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"fetch/sec-metadata/img.tentative.https.sub.html": [
|
"fetch/sec-metadata/img.tentative.https.sub.html": [
|
||||||
|
@ -614386,7 +614649,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"fetch/sec-metadata/redirect/multiple-redirect-https-downgrade-upgrade.tentative.sub.html": [
|
"fetch/sec-metadata/redirect/multiple-redirect-https-downgrade-upgrade.tentative.sub.html": [
|
||||||
"3f8726dc69e7ddf57b3d66cd0866caab0c58760c",
|
"cede6712264e44ed885f8f6399ab74c2dd03a3f2",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html": [
|
"fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html": [
|
||||||
|
@ -614394,7 +614657,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"fetch/sec-metadata/redirect/redirect-http-upgrade.tentative.sub.html": [
|
"fetch/sec-metadata/redirect/redirect-http-upgrade.tentative.sub.html": [
|
||||||
"fe55cda7e6b0f108465477570288ccfc73b5af93",
|
"4f173d9808ac550b443ecb9ed2a00c0b9a402b47",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"fetch/sec-metadata/redirect/redirect-https-downgrade.tentative.sub.html": [
|
"fetch/sec-metadata/redirect/redirect-https-downgrade.tentative.sub.html": [
|
||||||
|
@ -633001,6 +633264,10 @@
|
||||||
"3c8adc0b97e0d236bf1667226714726d5d931c82",
|
"3c8adc0b97e0d236bf1667226714726d5d931c82",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"html/semantics/text-level-semantics/the-a-element/a-download-click-redirect-to-javascript.html": [
|
||||||
|
"09f63b6f4d3c775d5a351178b2d6dbd1546dbdcb",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"html/semantics/text-level-semantics/the-a-element/a-download-click.html": [
|
"html/semantics/text-level-semantics/the-a-element/a-download-click.html": [
|
||||||
"22d329f245275b464fef83aa68f8688b810954dd",
|
"22d329f245275b464fef83aa68f8688b810954dd",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -633025,6 +633292,10 @@
|
||||||
"7d36c21d1e4ca80f94fe05372f685cf55ba3d776",
|
"7d36c21d1e4ca80f94fe05372f685cf55ba3d776",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
|
"html/semantics/text-level-semantics/the-a-element/resources/a-download-redirect-to-javascript.html": [
|
||||||
|
"4ff8b61e3be97fc49b842b4b98f53ae4accd9089",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
"html/semantics/text-level-semantics/the-b-element/b-usage-notref.html": [
|
"html/semantics/text-level-semantics/the-b-element/b-usage-notref.html": [
|
||||||
"3d3c46a281f13a8361aeef472a826834d6a0a89b",
|
"3d3c46a281f13a8361aeef472a826834d6a0a89b",
|
||||||
"support"
|
"support"
|
||||||
|
@ -636670,7 +636941,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"interfaces/speech-api.idl": [
|
"interfaces/speech-api.idl": [
|
||||||
"ba86d5065b7a4d941b53e5aabf133fed54b16ff4",
|
"8a32b457a997e651c8389c0b8da4c756ddf9f571",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"interfaces/storage.idl": [
|
"interfaces/storage.idl": [
|
||||||
|
@ -637217,16 +637488,36 @@
|
||||||
"3535d2fb93993af74d752c80626d5f10c0d24a60",
|
"3535d2fb93993af74d752c80626d5f10c0d24a60",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"kv-storage/non-secure-context-dynamic-import.html": [
|
"kv-storage/secure-context/README.md": [
|
||||||
"6ccbf84ba1dc6acd4931da279c887635b7f8a771",
|
"9b3539995bfa656860ce6cb9b51b287e4afcfb30",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"kv-storage/secure-context/dynamic-import.html": [
|
||||||
|
"38e1bb79c47ecf0886f231f8f40c1aac36d8a063",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"kv-storage/non-secure-context-import-statement.html": [
|
"kv-storage/secure-context/import-maps.html": [
|
||||||
"fda02aadf14fcb9be859c091df3a2ac1d2c56994",
|
"64301f03032c0efe047297b21389ccf778949a76",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"kv-storage/non-secure-context-script-element.html": [
|
"kv-storage/secure-context/import-statement.html": [
|
||||||
"66802b1254eda87e1a966d6f835676ecba942cbe",
|
"db01152a4e155e27dcdbc264a4291d0245c115d4",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"kv-storage/secure-context/resources/dummy-module.js": [
|
||||||
|
"27fb98860ea352b1df491031487ccc0bbb9bdf42",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"kv-storage/secure-context/resources/test-side-effects.js": [
|
||||||
|
"39780a92fff17fdf64d8b43c025304b59b1fe2b7",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"kv-storage/secure-context/script-element.html": [
|
||||||
|
"b8170549ab558bbef98a357074b1ec6281a385a7",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"kv-storage/secure-context/side-effects.html": [
|
||||||
|
"f4c4b691d30db83342aaa5fc3a181d4dc98b4f1d",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"kv-storage/storage-smoke-test.https.html": [
|
"kv-storage/storage-smoke-test.https.html": [
|
||||||
|
@ -637242,21 +637533,29 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"largest-contentful-paint/cross-origin-image.sub.html": [
|
"largest-contentful-paint/cross-origin-image.sub.html": [
|
||||||
"fd4844d16b3a3b150ad98747184e4c3bb25c2f81",
|
"6e86f13b9ccccf5cecd1ca4bd02b6d0cd2007845",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"largest-contentful-paint/image-src-change.html": [
|
||||||
|
"3e083625bdc1812a2c344b8eefaaa10d3b31e623",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"largest-contentful-paint/observe-image.html": [
|
"largest-contentful-paint/observe-image.html": [
|
||||||
"a1ecbceb503a31c99ff070ff06146014f8c3fdf9",
|
"4d56cc2d8386e41e220097836755d1936185b41c",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"largest-contentful-paint/observe-text.html": [
|
"largest-contentful-paint/observe-text.html": [
|
||||||
"58897907365d3156e838ca9e0a65db289ea4cfec",
|
"7dbfbe52f3dadf01524025a80fdcce4b64a60e19",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"layout-instability/buffer-layout-shift.html": [
|
"layout-instability/buffer-layout-shift.html": [
|
||||||
"216cafd45de0785b27a0ca7fa009352de7887e23",
|
"216cafd45de0785b27a0ca7fa009352de7887e23",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"layout-instability/buffered-flag.html": [
|
||||||
|
"6a8c937e5ff17ee54c87facf1e247839a5142707",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"layout-instability/observe-layout-shift.html": [
|
"layout-instability/observe-layout-shift.html": [
|
||||||
"a522b49034e58c7aafd98eacae12353bc3476d06",
|
"a522b49034e58c7aafd98eacae12353bc3476d06",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -638349,12 +638648,24 @@
|
||||||
"38cd1717eb23be2d6ef9dde3959aa79b48621193",
|
"38cd1717eb23be2d6ef9dde3959aa79b48621193",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"media-source/mediasource-changetype-play-implicit.html": [
|
||||||
|
"c186361e791b303e958c93171ba58a260e20d5fa",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"media-source/mediasource-changetype-play-negative.html": [
|
||||||
|
"f74e12945ac1a4a5865f0f10cc66a522301400f7",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"media-source/mediasource-changetype-play-without-codecs-parameter.html": [
|
||||||
|
"f802b155f724357905d1a92f6ed1e1155b45f1b8",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"media-source/mediasource-changetype-play.html": [
|
"media-source/mediasource-changetype-play.html": [
|
||||||
"210f66e1a28dfda173ab3baa5836afe59ecd54ca",
|
"26a67c32704de1ab4f9a60aebbadf7d8f25c2601",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"media-source/mediasource-changetype-util.js": [
|
"media-source/mediasource-changetype-util.js": [
|
||||||
"3dd1c4738766155d2ab079fe5b6a7970ebdb71db",
|
"28e92893657b956d84bff1cf0c87c000f272063d",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"media-source/mediasource-changetype.html": [
|
"media-source/mediasource-changetype.html": [
|
||||||
|
@ -638546,7 +638857,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"media-source/mediasource-util.js": [
|
"media-source/mediasource-util.js": [
|
||||||
"bb701e705245828143b8b8be45ebec2cffaf9c11",
|
"6b11210052d774fb6222602a0e7cfc3f0f2eea58",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"media-source/mp3/sound_5.mp3": [
|
"media-source/mp3/sound_5.mp3": [
|
||||||
|
@ -641909,23 +642220,23 @@
|
||||||
"0d9137dc6fb91b1499d922e01d6ad96049f5757b",
|
"0d9137dc6fb91b1499d922e01d6ad96049f5757b",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"native-file-system/FileSystemBaseHandle-remove.tentative.window.js": [
|
"native-file-system/FileSystemBaseHandle-remove.tentative.https.window.js": [
|
||||||
"a4eb2871104f924347f9ec8791a6381313a54483",
|
"a4eb2871104f924347f9ec8791a6381313a54483",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.window.js": [
|
"native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.https.window.js": [
|
||||||
"2064fc46f05f5e30c14f77c14c5751b411d1c5e0",
|
"2064fc46f05f5e30c14f77c14c5751b411d1c5e0",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"native-file-system/FileSystemDirectoryHandle-getFile.tentative.window.js": [
|
"native-file-system/FileSystemDirectoryHandle-getFile.tentative.https.window.js": [
|
||||||
"473cad4c9c36660584c07d7b53dfc68c7f734cb4",
|
"473cad4c9c36660584c07d7b53dfc68c7f734cb4",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"native-file-system/FileSystemWriter.tentative.window.js": [
|
"native-file-system/FileSystemWriter.tentative.https.window.js": [
|
||||||
"f2c2fc82866b83953e2783f8dc56ceaa0803b097",
|
"f2c2fc82866b83953e2783f8dc56ceaa0803b097",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"native-file-system/NativeFileSystemWritableFileStream.tentative.window.js": [
|
"native-file-system/NativeFileSystemWritableFileStream.tentative.https.window.js": [
|
||||||
"1dbcb2b136220954c777b2cc3b0197039cf730be",
|
"1dbcb2b136220954c777b2cc3b0197039cf730be",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
@ -642057,10 +642368,26 @@
|
||||||
"99f544690d331f8c172a3f54bd589a89eaa35716",
|
"99f544690d331f8c172a3f54bd589a89eaa35716",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
|
"navigation-timing/resources/secure-connection-interim.html": [
|
||||||
|
"e40b00bedbd59b8e2f8adf10a55fe06a04022987",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"navigation-timing/resources/secure-connection-interim.html.headers": [
|
||||||
|
"b70fbaf3b020a892e9aec31f6afd2e6a3d0fd4e6",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"navigation-timing/resources/secure-connection-test.html": [
|
||||||
|
"63a80e062bfad190cf036fccb976b53fe472d342",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
"navigation-timing/resources/webperftestharness.js": [
|
"navigation-timing/resources/webperftestharness.js": [
|
||||||
"3efb52783f1e5dcb0d42aad11aec2a9e47257d33",
|
"3efb52783f1e5dcb0d42aad11aec2a9e47257d33",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
|
"navigation-timing/secure-connection-start-reuse.https.html": [
|
||||||
|
"f52a259ecd425c212d89eb114981d4f12e80f305",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"navigation-timing/secure_connection_start_non_zero.https.html": [
|
"navigation-timing/secure_connection_start_non_zero.https.html": [
|
||||||
"e95468ef9122822bf8e443e356df0fd7cc8bd4cd",
|
"e95468ef9122822bf8e443e356df0fd7cc8bd4cd",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -660830,7 +661157,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"resources/chromium/webxr-test.js": [
|
"resources/chromium/webxr-test.js": [
|
||||||
"88227cbf12326838d416470cdd9757052d66020d",
|
"16a859a8ef36727cbbaf5ea55329593c27d6f972",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"resources/chromium/webxr-test.js.headers": [
|
"resources/chromium/webxr-test.js.headers": [
|
||||||
|
@ -666182,7 +666509,7 @@
|
||||||
"manual"
|
"manual"
|
||||||
],
|
],
|
||||||
"speech-api/historical.html": [
|
"speech-api/historical.html": [
|
||||||
"2fb0ccd4b905b4503f0affa4c8c7be3141871fe3",
|
"207d3e016ed1fec05d9a1256f40088c61bb05c83",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"speech-api/idlharness.window.js": [
|
"speech-api/idlharness.window.js": [
|
||||||
|
@ -666221,14 +666548,26 @@
|
||||||
"6d4a462d3a9417a501c6ad434b25896a03e162db",
|
"6d4a462d3a9417a501c6ad434b25896a03e162db",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"std-toast/ref-tests/toast-slotting-expected.html": [
|
||||||
|
"b4b365c7a9dfa25363acfb3123b1c019c3ca08d0",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"std-toast/ref-tests/toast-slotting.html": [
|
||||||
|
"4d6f5038f2d6ffa80ebdfa12798c8c4202b39670",
|
||||||
|
"reftest"
|
||||||
|
],
|
||||||
"std-toast/resources/helpers.js": [
|
"std-toast/resources/helpers.js": [
|
||||||
"52d740c144af59f1b32cbc8bdab555da9fa72227",
|
"256f0c880408c3343d36392f8b4cf64d9bbbfbe6",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"std-toast/show-toast.html": [
|
"std-toast/show-toast.html": [
|
||||||
"50cdc2c06ddbf34b16119f9c42e3a7cbaf5ec258",
|
"50cdc2c06ddbf34b16119f9c42e3a7cbaf5ec258",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"std-toast/styles.html": [
|
||||||
|
"98e6723c3c8b16fd71d388ad3947627194c76436",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"storage/META.yml": [
|
"storage/META.yml": [
|
||||||
"2aad1fb513710e839ad86c923bf208dae604d3d2",
|
"2aad1fb513710e839ad86c923bf208dae604d3d2",
|
||||||
"support"
|
"support"
|
||||||
|
@ -666330,7 +666669,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"streams/piping/abort.any.js": [
|
"streams/piping/abort.any.js": [
|
||||||
"5064533d4defdf22a6a04b4a3f47beceee417f58",
|
"65c458aa2941ff64677ec976e05de5be264dda60",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"streams/piping/close-propagation-backward.any.js": [
|
"streams/piping/close-propagation-backward.any.js": [
|
||||||
|
@ -676026,7 +676365,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/wptrunner/wptrunner/browsers/chrome_android.py": [
|
"tools/wptrunner/wptrunner/browsers/chrome_android.py": [
|
||||||
"3c277a567d7f06f39dfc02cb18d5229c7570a131",
|
"31ae7995b4010a6fcef0c585eed1128815837fcb",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/wptrunner/wptrunner/browsers/edge.py": [
|
"tools/wptrunner/wptrunner/browsers/edge.py": [
|
||||||
|
@ -678874,7 +679213,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"wake-lock/wakelock-abortsignal.https.any.js": [
|
"wake-lock/wakelock-abortsignal.https.any.js": [
|
||||||
"7961674fea6e42f2a6a2b34b23be486e4685ccea",
|
"671852f3c946716cf6cfb6dac6249a30bec1f701",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"wake-lock/wakelock-active-document.https.window.js": [
|
"wake-lock/wakelock-active-document.https.window.js": [
|
||||||
|
@ -679994,7 +680333,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webaudio/resources/audit.js": [
|
"webaudio/resources/audit.js": [
|
||||||
"f3ce71911ac02d971157e31462b1c8d34f83f756",
|
"1876c0fc77174d861d3847f874dbad26c737d430",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webaudio/resources/biquad-filters.js": [
|
"webaudio/resources/biquad-filters.js": [
|
||||||
|
@ -687569,10 +687908,34 @@
|
||||||
"520afec2000721d04aae9ed89bca49297fa31d4b",
|
"520afec2000721d04aae9ed89bca49297fa31d4b",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
|
"webxr/events_input_source_recreation.https.html": [
|
||||||
|
"ab78d9d8fda41b821e26976351a2a77a123b524b",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"webxr/events_input_sources_change.https.html": [
|
||||||
|
"bc2b2a95e40b0d700e8d18c9dc953b84ec9fbcde",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"webxr/events_referenceSpace_reset.https.html": [
|
"webxr/events_referenceSpace_reset.https.html": [
|
||||||
"f15ffc52a8845b7e2cdd6ddb4a9b7f06c1c3e5e0",
|
"f15ffc52a8845b7e2cdd6ddb4a9b7f06c1c3e5e0",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"webxr/events_session_select.https.html": [
|
||||||
|
"b74d5ea02dbefa51311d592fbf26019f06790ec2",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"webxr/events_session_select_subframe.https.html": [
|
||||||
|
"0e2c23424c0893b6a563c2aa2fbd999e50b1cfef",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"webxr/getInputPose_handedness.https.html": [
|
||||||
|
"5a310c6dd77274631d0ef9e751c6f195def9c3d3",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"webxr/getInputPose_pointer.https.html": [
|
||||||
|
"c8545999080892701858b425d8141ae0d3b3c469",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"webxr/idlharness.https.window.js": [
|
"webxr/idlharness.https.window.js": [
|
||||||
"3e54e367787cb95dada398790fe23b10174df29f",
|
"3e54e367787cb95dada398790fe23b10174df29f",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -687586,19 +687949,15 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webxr/resources/webxr_test_asserts.js": [
|
"webxr/resources/webxr_test_asserts.js": [
|
||||||
"2253ffc2d39d268142711fca7f81dda3fc6a318c",
|
"36524211d01980283124c0e2c7fcefd67a7b8b04",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webxr/resources/webxr_test_constants.js": [
|
"webxr/resources/webxr_test_constants.js": [
|
||||||
"fd6d0fb184237e0092f499950e2562dddda695d7",
|
"a0b0e278a87401702aabf1fd375f3100f20dd7d7",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webxr/resources/webxr_util.js": [
|
"webxr/resources/webxr_util.js": [
|
||||||
"54a91c85c86a311b382c293c3e53fa92c0182b81",
|
"3a6a6c96fe0c419c1ff7ed7c5ab347cbc6978c13",
|
||||||
"support"
|
|
||||||
],
|
|
||||||
"webxr/resources/xr-test-asserts.js": [
|
|
||||||
"2253ffc2d39d268142711fca7f81dda3fc6a318c",
|
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webxr/webGLCanvasContext_create_xrcompatible.https.html": [
|
"webxr/webGLCanvasContext_create_xrcompatible.https.html": [
|
||||||
|
@ -687618,7 +687977,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webxr/xrBoundedReferenceSpace_updates.https.html": [
|
"webxr/xrBoundedReferenceSpace_updates.https.html": [
|
||||||
"e2920b176567774984e115b2998e89edf95362e6",
|
"2f84d6453672adfaa066a8c199b47333bdebb5d1",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webxr/xrDevice_disconnect_ends.https.html": [
|
"webxr/xrDevice_disconnect_ends.https.html": [
|
||||||
|
@ -687658,13 +688017,25 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webxr/xrFrame_getPose.https.html": [
|
"webxr/xrFrame_getPose.https.html": [
|
||||||
"313cd11c32005abdfa4686bc857e514ee4a29f75",
|
"8795a0a9737f673384bf208aa0043b1be04864fd",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webxr/xrFrame_lifetime.https.html": [
|
"webxr/xrFrame_lifetime.https.html": [
|
||||||
"c7af792c7bb45155c1a24e177ed3be05875872d6",
|
"c7af792c7bb45155c1a24e177ed3be05875872d6",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"webxr/xrInputSource_add_remove.https.html": [
|
||||||
|
"4c50670c70ec87754a777cc0bcfe8272e794ca07",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"webxr/xrInputSource_gamepad_disconnect.https.html": [
|
||||||
|
"a43bdaae0f924b6c89144e59aa43896349e2b0a0",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"webxr/xrInputSource_gamepad_input_registered.https.html": [
|
||||||
|
"f3e0c75a128781e275aaadbfcb46ebe81ae64cac",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"webxr/xrRay_constructor.https.html": [
|
"webxr/xrRay_constructor.https.html": [
|
||||||
"b955db4509c2f60facee570e6011a1441297e3dd",
|
"b955db4509c2f60facee570e6011a1441297e3dd",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -687673,6 +688044,14 @@
|
||||||
"83a1050d6b169d28ad6b9d4417f06895e53bcfc6",
|
"83a1050d6b169d28ad6b9d4417f06895e53bcfc6",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"webxr/xrReferenceSpace_originOffset.https.html": [
|
||||||
|
"b4e1c8e5c97cfaf8cc09ae718118c40986010ef1",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"webxr/xrReferenceSpace_originOffsetBounded.https.html": [
|
||||||
|
"f76c3c430e084709a73f6b419fba659667cd53a5",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"webxr/xrRigidTransform_constructor.https.html": [
|
"webxr/xrRigidTransform_constructor.https.html": [
|
||||||
"6a54fff808d93ac4423364b9c8b9d528a7e520c0",
|
"6a54fff808d93ac4423364b9c8b9d528a7e520c0",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -687697,6 +688076,10 @@
|
||||||
"b91a5b977cab3d2fbb5c4989246f45b0c9b2024b",
|
"b91a5b977cab3d2fbb5c4989246f45b0c9b2024b",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"webxr/xrSession_input_events_end.https.html": [
|
||||||
|
"37e020605a7e88320c42e054f867f611955c5713",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"webxr/xrSession_prevent_multiple_exclusive.https.html": [
|
"webxr/xrSession_prevent_multiple_exclusive.https.html": [
|
||||||
"cd140703784961911586f8b63cebd52b356facd5",
|
"cd140703784961911586f8b63cebd52b356facd5",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -687710,7 +688093,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webxr/xrSession_requestAnimationFrame_getViewerPose.https.html": [
|
"webxr/xrSession_requestAnimationFrame_getViewerPose.https.html": [
|
||||||
"f8587796a229ec7f0aa5ab4fcde573737c2e7eca",
|
"bdb5edda566704c4d1434b328d3adbe46d3501ba",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webxr/xrSession_requestReferenceSpace.https.html": [
|
"webxr/xrSession_requestReferenceSpace.https.html": [
|
||||||
|
@ -687722,15 +688105,15 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webxr/xrStationaryReferenceSpace_floorlevel_updates.https.html": [
|
"webxr/xrStationaryReferenceSpace_floorlevel_updates.https.html": [
|
||||||
"06a256698165e5bc592256a4ce24ddce12de74f8",
|
"aa3c1b85c5d8ef550b9a835d384c67f602e290e9",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webxr/xrView_eyes.https.html": [
|
"webxr/xrView_eyes.https.html": [
|
||||||
"4ff22ff618d96d53c7a9e8cc573608bb0ea7919e",
|
"956edba98365d90eb180ad3c9697dae098bd25db",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webxr/xrWebGLLayer_viewports.https.html": [
|
"webxr/xrWebGLLayer_viewports.https.html": [
|
||||||
"247e3b779d6105f4a9e57fd39c5dcf06ca737950",
|
"9553a445e43153b716d55c7f2be606dd548b808e",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"workers/META.yml": [
|
"workers/META.yml": [
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
[place-content-valid.html]
|
||||||
|
[e.style['place-content'\] = "stretch" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "baseline" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "first baseline stretch" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "unsafe end unsafe end" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "space-between" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "center" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "safe flex-start" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "baseline space-around" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "normal normal" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "flex-start flex-start" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "normal stretch" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "center normal" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "normal right" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "space-around" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "space-evenly" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "end" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "baseline stretch" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "first baseline start" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "last baseline flex-start" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "baseline unsafe left" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "first baseline" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "space-evenly unsafe end" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-content'\] = "last baseline" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
[place-items-valid.html]
|
||||||
|
[e.style['place-items'\] = "stretch stretch" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "baseline unsafe left" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "self-start" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "last baseline last baseline" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "stretch baseline" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "center" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "safe self-end" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "flex-end legacy" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "first baseline" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "normal" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "first baseline right legacy" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "last baseline center" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "end end" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "normal right" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "stretch legacy left" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "flex-end" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "safe self-end normal" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-items'\] = "unsafe center unsafe center" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
[place-self-valid.html]
|
||||||
|
[e.style['place-self'\] = "center center" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-self'\] = "self-start" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-self'\] = "unsafe center" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-self'\] = "auto last baseline" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-self'\] = "normal right" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-self'\] = "baseline flex-end" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-self'\] = "flex-end" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-self'\] = "auto auto" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-self'\] = "start" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-self'\] = "baseline unsafe left" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-self'\] = "last baseline last baseline" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-self'\] = "first baseline" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-self'\] = "normal" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-self'\] = "unsafe center stretch" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-self'\] = "safe self-end safe self-end" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['place-self'\] = "stretch" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[matchMedia-display-none-iframe.html]
|
|
||||||
expected: ERROR
|
|
|
@ -312,12 +312,6 @@
|
||||||
[<iframe>: separate response Content-Type: */* text/html]
|
[<iframe>: separate response Content-Type: */* text/html]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -327,12 +321,15 @@
|
||||||
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: combined response Content-Type: text/html */*]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[<iframe>: combined response Content-Type: */* text/html]
|
||||||
|
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
|
||||||
|
|
||||||
|
|
|
@ -56,12 +56,3 @@
|
||||||
[separate text/javascript x/x]
|
[separate text/javascript x/x]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[separate text/javascript error]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[separate text/javascript ]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,6 @@
|
||||||
[X-Content-Type-Options%3A%20nosniff%0C]
|
[X-Content-Type-Options%3A%20nosniff%0C]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff]
|
[Content-Type-Options%3A%20nosniff]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[fetch.tentative.sub.html]
|
||||||
|
[http->https fetch (cross-scheme => cross-site)]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[iframe.tentative.sub.html]
|
||||||
|
[Secure, cross-site (cross-scheme, same-host) iframe]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[traverse_the_history_1.html]
|
||||||
|
[Multiple history traversals from the same task]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[traverse_the_history_5.html]
|
||||||
|
[Multiple history traversals, last would be aborted]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,5 +1,24 @@
|
||||||
[open-features-negative-innerwidth-innerheight.html]
|
[open-features-negative-innerwidth-innerheight.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`]
|
[HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[features "innerheight=-404.5" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerwidth=-404.5" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerwidth=-404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerheight=-404e1" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerheight=-404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerwidth=-404e1" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,24 @@
|
||||||
[open-features-negative-screenx-screeny.html]
|
[open-features-negative-screenx-screeny.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: negative values for legacy `screenx`, `screeny`]
|
[HTML: window.open `features`: negative values for legacy `screenx`, `screeny`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[features "screenx=-204" should NOT set "left=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screeny=-204" should NOT set "top=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screeny=-204.5" should NOT set "top=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screeny=-0" should NOT set "top=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screenx=-0" should NOT set "left=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screenx=-204.5" should NOT set "left=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,24 @@
|
||||||
[open-features-negative-top-left.html]
|
[open-features-negative-top-left.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: negative values for `top`, `left`]
|
[HTML: window.open `features`: negative values for `top`, `left`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[features "top=-204" should NOT set "top=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "top=-204.5" should NOT set "top=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "left=-204" should NOT set "left=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "top=-0" should NOT set "top=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "left=-204.5" should NOT set "left=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "left=-0" should NOT set "left=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,24 @@
|
||||||
[open-features-negative-width-height.html]
|
[open-features-negative-width-height.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: negative values for `width`, `height`]
|
[HTML: window.open `features`: negative values for `width`, `height`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[features "height=-404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "height=-404e1" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "height=-404.5" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "width=-404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "width=-404e1" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "width=-404.5" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,48 @@
|
||||||
[open-features-non-integer-height.html]
|
[open-features-non-integer-height.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for feature `height`]
|
[HTML: window.open `features`: non-integer values for feature `height`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "height=405*3" should set "height=405"]
|
[features "height=405*3" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405.32" should set "height=405"]
|
[features "height=405.32" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405e1" should set "height=405"]
|
[features "height=405e1" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405/5" should set "height=405"]
|
[features "height=405/5" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405^4" should set "height=405"]
|
[features "height=405^4" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405.5" should set "height=405"]
|
[features "height=405.5" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405e-1" should set "height=405"]
|
[features "height=405e-1" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405 " should set "height=405"]
|
[features "height=405 " should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405LLl" should set "height=405"]
|
[features "height=405LLl" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "height=/404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[top=0,left=0,width=401,: absence of feature "height" should be treated same as "height=0"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[top=0,left=0: absence of feature "height" should be treated same as "height=0"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "height=_404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "height=L404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,42 @@
|
||||||
[open-features-non-integer-innerheight.html]
|
[open-features-non-integer-innerheight.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for legacy feature `innerheight`]
|
[HTML: window.open `features`: non-integer values for legacy feature `innerheight`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "innerheight=405e-1" should set "height=405"]
|
[features "innerheight=405e-1" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405LLl" should set "height=405"]
|
[features "innerheight=405LLl" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405^4" should set "height=405"]
|
[features "innerheight=405^4" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405e1" should set "height=405"]
|
[features "innerheight=405e1" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405 " should set "height=405"]
|
[features "innerheight=405 " should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405/5" should set "height=405"]
|
[features "innerheight=405/5" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405.32" should set "height=405"]
|
[features "innerheight=405.32" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405.5" should set "height=405"]
|
[features "innerheight=405.5" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405*3" should set "height=405"]
|
[features "innerheight=405*3" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerheight=_404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerheight=L404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerheight=/404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,42 @@
|
||||||
[open-features-non-integer-innerwidth.html]
|
[open-features-non-integer-innerwidth.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for legacy feature `innerwidth`]
|
[HTML: window.open `features`: non-integer values for legacy feature `innerwidth`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "innerwidth=405e-1" should set "width=405"]
|
[features "innerwidth=405e-1" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405*3" should set "width=405"]
|
[features "innerwidth=405*3" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405.5" should set "width=405"]
|
[features "innerwidth=405.5" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405e1" should set "width=405"]
|
[features "innerwidth=405e1" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405.32" should set "width=405"]
|
[features "innerwidth=405.32" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405 " should set "width=405"]
|
[features "innerwidth=405 " should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405LLl" should set "width=405"]
|
[features "innerwidth=405LLl" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405/5" should set "width=405"]
|
[features "innerwidth=405/5" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405^4" should set "width=405"]
|
[features "innerwidth=405^4" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerwidth=/404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerwidth=_404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerwidth=L404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,42 @@
|
||||||
[open-features-non-integer-left.html]
|
[open-features-non-integer-left.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for feature `left`]
|
[HTML: window.open `features`: non-integer values for feature `left`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "left=105e1" should set "left=105"]
|
[features "left=105e1" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105 " should set "left=105"]
|
[features "left=105 " should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105/5" should set "left=105"]
|
[features "left=105/5" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105e-1" should set "left=105"]
|
[features "left=105e-1" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105^4" should set "left=105"]
|
[features "left=105^4" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105LLl" should set "left=105"]
|
[features "left=105LLl" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105.32" should set "left=105"]
|
[features "left=105.32" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105*3" should set "left=105"]
|
[features "left=105*3" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105.5" should set "left=105"]
|
[features "left=105.5" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "left=L104" should NOT set "left=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "left=/104" should NOT set "left=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "left=_104" should NOT set "left=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,42 @@
|
||||||
[open-features-non-integer-screenx.html]
|
[open-features-non-integer-screenx.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for legacy feature `screenx`]
|
[HTML: window.open `features`: non-integer values for legacy feature `screenx`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "screenx=105.5" should set "left=105"]
|
[features "screenx=105.5" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105e1" should set "left=105"]
|
[features "screenx=105e1" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105 " should set "left=105"]
|
[features "screenx=105 " should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105*3" should set "left=105"]
|
[features "screenx=105*3" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105e-1" should set "left=105"]
|
[features "screenx=105e-1" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105^4" should set "left=105"]
|
[features "screenx=105^4" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105LLl" should set "left=105"]
|
[features "screenx=105LLl" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105/5" should set "left=105"]
|
[features "screenx=105/5" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105.32" should set "left=105"]
|
[features "screenx=105.32" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screenx=_104" should NOT set "left=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screenx=L104" should NOT set "left=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screenx=/104" should NOT set "left=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,42 @@
|
||||||
[open-features-non-integer-screeny.html]
|
[open-features-non-integer-screeny.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for legacy feature `screeny`]
|
[HTML: window.open `features`: non-integer values for legacy feature `screeny`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "screeny=405^4" should set "height=405"]
|
[features "screeny=405^4" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405e-1" should set "height=405"]
|
[features "screeny=405e-1" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405LLl" should set "height=405"]
|
[features "screeny=405LLl" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405e1" should set "height=405"]
|
[features "screeny=405e1" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405 " should set "height=405"]
|
[features "screeny=405 " should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405/5" should set "height=405"]
|
[features "screeny=405/5" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405*3" should set "height=405"]
|
[features "screeny=405*3" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405.32" should set "height=405"]
|
[features "screeny=405.32" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405.5" should set "height=405"]
|
[features "screeny=405.5" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screeny=_404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screeny=L404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screeny=/404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,42 @@
|
||||||
[open-features-non-integer-top.html]
|
[open-features-non-integer-top.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for feature `top`]
|
[HTML: window.open `features`: non-integer values for feature `top`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "top=105/5" should set "top=105"]
|
[features "top=105/5" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105*3" should set "top=105"]
|
[features "top=105*3" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105LLl" should set "top=105"]
|
[features "top=105LLl" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105e-1" should set "top=105"]
|
[features "top=105e-1" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105.32" should set "top=105"]
|
[features "top=105.32" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105e1" should set "top=105"]
|
[features "top=105e1" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105 " should set "top=105"]
|
[features "top=105 " should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105^4" should set "top=105"]
|
[features "top=105^4" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105.5" should set "top=105"]
|
[features "top=105.5" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "top=/104" should NOT set "top=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "top=_104" should NOT set "top=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "top=L104" should NOT set "top=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,48 @@
|
||||||
[open-features-non-integer-width.html]
|
[open-features-non-integer-width.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for feature `width`]
|
[HTML: window.open `features`: non-integer values for feature `width`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "width=405^4" should set "width=405"]
|
[features "width=405^4" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405.5" should set "width=405"]
|
[features "width=405.5" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405e1" should set "width=405"]
|
[features "width=405e1" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405 " should set "width=405"]
|
[features "width=405 " should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405.32" should set "width=405"]
|
[features "width=405.32" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405LLl" should set "width=405"]
|
[features "width=405LLl" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405*3" should set "width=405"]
|
[features "width=405*3" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405e-1" should set "width=405"]
|
[features "width=405e-1" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405/5" should set "width=405"]
|
[features "width=405/5" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[top=0,left=0: absence of feature "width" should be treated same as "width=0"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "width=_404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[top=0,left=0,height=401,: absence of feature "width" should be treated same as "width=0"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "width=/404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "width=L404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[a-download-click-redirect-to-javascript.html]
|
||||||
|
[Do not navigate or execute JS when redirecting a download to 'javascript:..']
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
[promise-rejection-events.html]
|
[promise-rejection-events.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire]
|
[delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -8,3 +9,6 @@
|
||||||
[no unhandledrejection/rejectionhandled: rejection handler attached synchronously to a promise created from createImageBitmap]
|
[no unhandledrejection/rejectionhandled: rejection handler attached synchronously to a promise created from createImageBitmap]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[rejectionhandled is dispatched from a queued task, and not immediately]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
[secure-connection-start-reuse.https.html]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[Test that secureConnectionStart value is as expected when reused]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
|
@ -104,3 +104,9 @@
|
||||||
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t9.4836157560348511e-1\t9.5236867666244507e-1\t4.0071010589599609e-3\t4.2075103446311962e-3\t3.8985999999999999e-3\n\t[31\]\t9.2646563053131104e-1\t9.3139332532882690e-1\t4.9276947975158691e-3\t5.2906700783754857e-3\t3.8985999999999999e-3\n\t[32\]\t9.0087991952896118e-1\t9.0675884485244751e-1\t5.8789253234863281e-3\t6.4834496590358351e-3\t3.8985999999999999e-3\n\t[33\]\t8.7170630693435669e-1\t8.7856203317642212e-1\t6.8557262420654297e-3\t7.8033490899654511e-3\t3.8985999999999999e-3\n\t[34\]\t8.3906102180480957e-1\t8.4691369533538818e-1\t7.8526735305786133e-3\t9.2721059699818163e-3\t3.8985999999999999e-3\n\t...and 31037 more errors.\n\tMax AbsError of 9.8276454210281372e-1 at index of 39267.\n\t[39267\]\t2.5962776047338700e-21\t-9.8276454210281372e-1\t9.8276454210281372e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\tMax RelError of 3.3137802965303198e+0 at index of 1253.\n\t[1253\]\t-4.3022233992815018e-2\t-9.9732093513011932e-3\t3.3049024641513824e-2\t3.3137802965303198e+0\t3.8985999999999999e-3\n]
|
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t9.4836157560348511e-1\t9.5236867666244507e-1\t4.0071010589599609e-3\t4.2075103446311962e-3\t3.8985999999999999e-3\n\t[31\]\t9.2646563053131104e-1\t9.3139332532882690e-1\t4.9276947975158691e-3\t5.2906700783754857e-3\t3.8985999999999999e-3\n\t[32\]\t9.0087991952896118e-1\t9.0675884485244751e-1\t5.8789253234863281e-3\t6.4834496590358351e-3\t3.8985999999999999e-3\n\t[33\]\t8.7170630693435669e-1\t8.7856203317642212e-1\t6.8557262420654297e-3\t7.8033490899654511e-3\t3.8985999999999999e-3\n\t[34\]\t8.3906102180480957e-1\t8.4691369533538818e-1\t7.8526735305786133e-3\t9.2721059699818163e-3\t3.8985999999999999e-3\n\t...and 31037 more errors.\n\tMax AbsError of 9.8276454210281372e-1 at index of 39267.\n\t[39267\]\t2.5962776047338700e-21\t-9.8276454210281372e-1\t9.8276454210281372e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\tMax RelError of 3.3137802965303198e+0 at index of 1253.\n\t[1253\]\t-4.3022233992815018e-2\t-9.9732093513011932e-3\t3.3049024641513824e-2\t3.3137802965303198e+0\t3.8985999999999999e-3\n]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t9.4836157560348511e-1\t9.5236867666244507e-1\t4.0071010589599609e-3\t4.2075103446311962e-3\t3.8985999999999999e-3\n\t[31\]\t9.2646563053131104e-1\t9.3139332532882690e-1\t4.9276947975158691e-3\t5.2906700783754857e-3\t3.8985999999999999e-3\n\t[32\]\t9.0087991952896118e-1\t9.0675884485244751e-1\t5.8789253234863281e-3\t6.4834496590358351e-3\t3.8985999999999999e-3\n\t[33\]\t8.7170630693435669e-1\t8.7856203317642212e-1\t6.8557262420654297e-3\t7.8033490899654511e-3\t3.8985999999999999e-3\n\t[34\]\t8.3906102180480957e-1\t8.4691369533538818e-1\t7.8526735305786133e-3\t9.2721059699818163e-3\t3.8985999999999999e-3\n\t...and 31037 more errors.\n\tMax AbsError of 1.0236728132501504e+16 at index of 20238.\n\t[20238\]\t-1.0236728132501504e+16\t-4.7574958205223083e-1\t1.0236728132501504e+16\t2.1517051235953900e+16\t3.8985999999999999e-3\n\tMax RelError of 2.1517051235953900e+16 at index of 20238.\n\t[20238\]\t-1.0236728132501504e+16\t-4.7574958205223083e-1\t1.0236728132501504e+16\t2.1517051235953900e+16\t3.8985999999999999e-3\n]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[X SNR (-276.77847420751567 dB) is not greater than or equal to 65.737. Got -276.77847420751567.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[events_input_source_recreation.https.html]
|
||||||
|
[Input sources are re-created when handedness or target ray mode changes]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[events_input_sources_change.https.html]
|
||||||
|
[Transient input sources fire events in the right order]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[events_session_select.https.html]
|
||||||
|
[XRInputSources primary input presses properly fires off the right events]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[events_session_select_subframe.https.html]
|
||||||
|
[Ensures that an XRInputSources primary input being pressed and released in the space of a single frame properly fires off the right events]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[getInputPose_handedness.https.html]
|
||||||
|
[XRInputSources properly communicate their handedness]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[getInputPose_pointer.https.html]
|
||||||
|
[XRInputSources with a target ray mode of 'tracked-pointer' properly communicate their poses]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[xrInputSource_add_remove.https.html]
|
||||||
|
[XRInputSources can be properly added and removed from the session]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[xrInputSource_gamepad_disconnect.https.html]
|
||||||
|
[WebXR InputSource's gamepad gets disconnected when the input source is removed]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[xrInputSource_gamepad_input_registered.https.html]
|
||||||
|
[WebXR InputSource's gamepad properly registers input]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[xrReferenceSpace_originOffset.https.html]
|
||||||
|
[Updating XRReferenceSpace origin offset updates view and input matrices.]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[xrReferenceSpace_originOffsetBounded.https.html]
|
||||||
|
[Updating XRBoundedReferenceSpace origin offset updates view, input matrices, and bounds geometry.]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[xrSession_input_events_end.https.html]
|
||||||
|
[Calling end during an input callback stops processing at the right time]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Box Alignment Level 3: parsing place-content with invalid values</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-place-content">
|
||||||
|
<meta name="assert" content="place-content supports only the grammar '<align-content> <justify-content>?'.">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/parsing-testcommon.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
test_invalid_value("place-content", "auto");
|
||||||
|
|
||||||
|
test_invalid_value("place-content", "self-end unsafe");
|
||||||
|
test_invalid_value("place-content", "self-start");
|
||||||
|
|
||||||
|
test_invalid_value("place-content", "left");
|
||||||
|
test_invalid_value("place-content", "unsafe right");
|
||||||
|
test_invalid_value("place-content", "left normal");
|
||||||
|
test_invalid_value("place-content", "unsafe right stretch");
|
||||||
|
|
||||||
|
test_invalid_value("place-content", "normal flex-start baseline");
|
||||||
|
test_invalid_value("place-content", "first baseline first baseline");
|
||||||
|
|
||||||
|
test_invalid_value("place-content", "baseline safe");
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,46 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Box Alignment Level 3: parsing place-content with valid values</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-place-content">
|
||||||
|
<meta name="assert" content="place-content supports the full grammar '<align-content> <justify-content>?'.">
|
||||||
|
<meta name="assert" content="<baseline-position> and <baseline-position> start are equivalent.">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/parsing-testcommon.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
test_valid_value("place-content", "normal normal", "normal");
|
||||||
|
|
||||||
|
test_valid_value("place-content", "first baseline", "baseline start");
|
||||||
|
test_valid_value("place-content", "baseline", "baseline start");
|
||||||
|
test_valid_value("place-content", "first baseline start", "baseline start");
|
||||||
|
test_valid_value("place-content", "last baseline", "last baseline start");
|
||||||
|
test_valid_value("place-content", "first baseline stretch", "baseline stretch");
|
||||||
|
test_valid_value("place-content", "last baseline flex-start");
|
||||||
|
|
||||||
|
test_valid_value("place-content", "baseline stretch");
|
||||||
|
|
||||||
|
test_valid_value("place-content", "space-between");
|
||||||
|
test_valid_value("place-content", "space-around");
|
||||||
|
test_valid_value("place-content", "space-evenly");
|
||||||
|
test_valid_value("place-content", "stretch");
|
||||||
|
|
||||||
|
test_valid_value("place-content", "center");
|
||||||
|
test_valid_value("place-content", "end");
|
||||||
|
test_valid_value("place-content", "flex-start flex-start", "flex-start");
|
||||||
|
test_valid_value("place-content", "unsafe end unsafe end", "unsafe end");
|
||||||
|
test_valid_value("place-content", "safe flex-start");
|
||||||
|
|
||||||
|
test_valid_value("place-content", "normal stretch");
|
||||||
|
test_valid_value("place-content", "baseline space-around");
|
||||||
|
test_valid_value("place-content", "space-evenly unsafe end");
|
||||||
|
test_valid_value("place-content", "center normal");
|
||||||
|
|
||||||
|
test_valid_value("place-content", "normal right");
|
||||||
|
test_valid_value("place-content", "baseline unsafe left");
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,36 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Box Alignment Level 3: parsing place-items with invalid values</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-place-items">
|
||||||
|
<meta name="assert" content="place-items supports only the grammar '<align-items> <justify-items>?'.">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/parsing-testcommon.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
test_invalid_value("place-items", "auto");
|
||||||
|
|
||||||
|
test_invalid_value("place-items", "space-around");
|
||||||
|
test_invalid_value("place-items", "space-between");
|
||||||
|
test_invalid_value("place-items", "space-evenly");
|
||||||
|
|
||||||
|
test_invalid_value("place-items", "left");
|
||||||
|
test_invalid_value("place-items", "unsafe right");
|
||||||
|
test_invalid_value("place-items", "left baseline");
|
||||||
|
test_invalid_value("place-items", "unsafe right flex-end");
|
||||||
|
|
||||||
|
test_invalid_value("place-items", "legacy center");
|
||||||
|
test_invalid_value("place-items", "legacy left");
|
||||||
|
test_invalid_value("place-items", "legacy");
|
||||||
|
test_invalid_value("place-items", "legacy right flex-start");
|
||||||
|
test_invalid_value("place-items", "legacy normal");
|
||||||
|
|
||||||
|
test_invalid_value("place-items", "normal flex-start baseline");
|
||||||
|
|
||||||
|
test_invalid_value("place-items", "baseline safe");
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Box Alignment Level 3: parsing place-items with valid values</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-place-items">
|
||||||
|
<meta name="assert" content="place-items supports the full grammar '<align-items> <justify-items>?'.">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/parsing-testcommon.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
test_valid_value("place-items", "normal");
|
||||||
|
test_valid_value("place-items", "stretch stretch", "stretch");
|
||||||
|
|
||||||
|
test_valid_value("place-items", "first baseline", "baseline");
|
||||||
|
test_valid_value("place-items", "last baseline last baseline", "last baseline");
|
||||||
|
|
||||||
|
test_valid_value("place-items", "center");
|
||||||
|
test_valid_value("place-items", "end end", "end");
|
||||||
|
test_valid_value("place-items", "self-start");
|
||||||
|
test_valid_value("place-items", "flex-end");
|
||||||
|
test_valid_value("place-items", "unsafe center unsafe center", "unsafe center");
|
||||||
|
test_valid_value("place-items", "safe self-end");
|
||||||
|
|
||||||
|
test_valid_value("place-items", "stretch baseline");
|
||||||
|
test_valid_value("place-items", "last baseline center");
|
||||||
|
test_valid_value("place-items", "safe self-end normal");
|
||||||
|
|
||||||
|
test_valid_value("place-items", "normal right");
|
||||||
|
test_valid_value("place-items", "baseline unsafe left");
|
||||||
|
|
||||||
|
test_valid_value("place-items", "flex-end legacy");
|
||||||
|
test_valid_value("place-items", "stretch legacy left");
|
||||||
|
test_valid_value("place-items", "first baseline right legacy", "baseline legacy right");
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,28 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Box Alignment Level 3: parsing place-self with invalid values</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-place-self">
|
||||||
|
<meta name="assert" content="place-self supports only the grammar '<align-self> <justify-self>?'.">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/parsing-testcommon.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
test_invalid_value("place-self", "space-around");
|
||||||
|
test_invalid_value("place-self", "space-between");
|
||||||
|
test_invalid_value("place-self", "space-evenly");
|
||||||
|
|
||||||
|
test_invalid_value("place-self", "right");
|
||||||
|
test_invalid_value("place-self", "unsafe left");
|
||||||
|
test_invalid_value("place-self", "right start");
|
||||||
|
test_invalid_value("place-self", "unsafe left stretch");
|
||||||
|
|
||||||
|
test_invalid_value("place-self", "normal flex-start baseline");
|
||||||
|
|
||||||
|
test_invalid_value("place-self", "baseline safe");
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,36 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Box Alignment Level 3: parsing place-self with valid values</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-place-self">
|
||||||
|
<meta name="assert" content="place-self supports the full grammar '<align-self> <justify-self>?'.">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/parsing-testcommon.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
test_valid_value("place-self", "auto auto", "auto");
|
||||||
|
test_valid_value("place-self", "normal");
|
||||||
|
test_valid_value("place-self", "stretch");
|
||||||
|
|
||||||
|
test_valid_value("place-self", "first baseline", "baseline");
|
||||||
|
test_valid_value("place-self", "last baseline last baseline", "last baseline");
|
||||||
|
|
||||||
|
test_valid_value("place-self", "center center", "center");
|
||||||
|
test_valid_value("place-self", "start");
|
||||||
|
test_valid_value("place-self", "self-start");
|
||||||
|
test_valid_value("place-self", "flex-end");
|
||||||
|
test_valid_value("place-self", "unsafe center");
|
||||||
|
test_valid_value("place-self", "safe self-end safe self-end", "safe self-end");
|
||||||
|
|
||||||
|
test_valid_value("place-self", "auto last baseline");
|
||||||
|
test_valid_value("place-self", "baseline flex-end");
|
||||||
|
test_valid_value("place-self", "unsafe center stretch");
|
||||||
|
|
||||||
|
test_valid_value("place-self", "normal right");
|
||||||
|
test_valid_value("place-self", "baseline unsafe left");
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -1,6 +1,6 @@
|
||||||
<!DOCTYPE HTML>
|
<!DOCTYPE HTML>
|
||||||
<meta charset=utf-8>
|
<meta charset=utf-8>
|
||||||
<title>Element Timing: observe cross-origin images but without startTime</title>
|
<title>Element Timing: observe cross-origin images but without renderTime</title>
|
||||||
<body>
|
<body>
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
|
@ -23,8 +23,8 @@ body {
|
||||||
assert_equals(entryList.getEntries().length, 1);
|
assert_equals(entryList.getEntries().length, 1);
|
||||||
const entry = entryList.getEntries()[0];
|
const entry = entryList.getEntries()[0];
|
||||||
checkElement(entry, pathname, 'my_image', 'the_id', 0, img);
|
checkElement(entry, pathname, 'my_image', 'the_id', 0, img);
|
||||||
assert_equals(entry.startTime, 0,
|
assert_equals(entry.renderTime, 0,
|
||||||
'The startTime of a cross-origin image should be 0.');
|
'The renderTime of a cross-origin image should be 0.');
|
||||||
checkRect(entry, [0, 100, 0, 100]);
|
checkRect(entry, [0, 100, 0, 100]);
|
||||||
checkNaturalSize(entry, 100, 100);
|
checkNaturalSize(entry, 100, 100);
|
||||||
})
|
})
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
if (valid_tao.includes(tao)) {
|
if (valid_tao.includes(tao)) {
|
||||||
checkElement(entry, remote_img + tao, tao, 'id_' + tao, beforeRender, img);
|
checkElement(entry, remote_img + tao, tao, 'id_' + tao, beforeRender, img);
|
||||||
} else if (invalid_tao.includes(tao)) {
|
} else if (invalid_tao.includes(tao)) {
|
||||||
assert_equals(entry.startTime, 0, 'Entry with tao=' + tao + ' must have a startTime of 0');
|
assert_equals(entry.renderTime, 0, 'Entry with tao=' + tao + ' must have a renderTime of 0');
|
||||||
checkElement(entry, remote_img + tao, tao, 'id_' + tao, 0, img);
|
checkElement(entry, remote_img + tao, tao, 'id_' + tao, 0, img);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -51,6 +51,6 @@
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
).observe({type: 'element', buffered: true});
|
).observe({type: 'element', buffered: true});
|
||||||
}, 'Cross-origin elements with valid TAO have correct startTime, with invalid TAO have startTime set to 0.');
|
}, 'Cross-origin elements with valid TAO have correct renderTime, with invalid TAO have renderTime set to 0.');
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<meta charset=utf-8>
|
||||||
|
<title>Element Timing: src change triggers new entry</title>
|
||||||
|
<body>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="resources/element-timing-helpers.js"></script>
|
||||||
|
<img src='resources/square100.png' elementtiming='my_image' id='my_id'/>
|
||||||
|
<script>
|
||||||
|
async_test(function (t) {
|
||||||
|
if (!window.PerformanceElementTiming) {
|
||||||
|
assert_unreached("PerformanceElementTiming is not implemented");
|
||||||
|
}
|
||||||
|
let beforeRender = performance.now();
|
||||||
|
const img = document.getElementById('my_id');
|
||||||
|
let firstCallback = true;
|
||||||
|
const observer = new PerformanceObserver(
|
||||||
|
t.step_func(entryList => {
|
||||||
|
assert_equals(entryList.getEntries().length, 1);
|
||||||
|
const entry = entryList.getEntries()[0];
|
||||||
|
if (firstCallback) {
|
||||||
|
const pathname = window.location.origin + '/element-timing/resources/square100.png';
|
||||||
|
checkElement(entry, pathname, 'my_image', 'my_id', beforeRender, img);
|
||||||
|
checkRect(entry, [0, 100, 0, 100]);
|
||||||
|
checkNaturalSize(entry, 100, 100);
|
||||||
|
|
||||||
|
// Set the src to trigger another entry.
|
||||||
|
img.src = '/images/black-rectangle.png';
|
||||||
|
beforeRender = performance.now();
|
||||||
|
firstCallback = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const pathname = window.location.origin + '/images/black-rectangle.png';
|
||||||
|
checkElement(entry, pathname, 'my_image', 'my_id', beforeRender, img);
|
||||||
|
checkRect(entry, [0, 100, 0, 50]);
|
||||||
|
checkNaturalSize(entry, 100, 50);
|
||||||
|
t.done();
|
||||||
|
}));
|
||||||
|
observer.observe({type: 'element', buffered: true});
|
||||||
|
}, 'Element Timing: changing src causes a new entry to be dispatched.');
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
|
@ -4,16 +4,17 @@ function checkElementInternal(entry, expectedUrl, expectedIdentifier, expectedID
|
||||||
assert_equals(entry.entryType, 'element');
|
assert_equals(entry.entryType, 'element');
|
||||||
assert_equals(entry.url, expectedUrl);
|
assert_equals(entry.url, expectedUrl);
|
||||||
assert_equals(entry.identifier, expectedIdentifier);
|
assert_equals(entry.identifier, expectedIdentifier);
|
||||||
|
assert_equals(entry.startTime, 0);
|
||||||
assert_equals(entry.duration, 0);
|
assert_equals(entry.duration, 0);
|
||||||
assert_equals(entry.id, expectedID);
|
assert_equals(entry.id, expectedID);
|
||||||
assert_greater_than_equal(entry.startTime, beforeRender);
|
assert_greater_than_equal(entry.renderTime, beforeRender);
|
||||||
assert_greater_than_equal(performance.now(), entry.startTime);
|
assert_greater_than_equal(performance.now(), entry.renderTime);
|
||||||
if (expectedElement !== null)
|
if (expectedElement !== null)
|
||||||
assert_equals(entry.element, expectedElement);
|
assert_equals(entry.element, expectedElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Checks that this is an ElementTiming entry with url |expectedUrl|. It also
|
// Checks that this is an ElementTiming entry with url |expectedUrl|. It also
|
||||||
// does a very basic check on |startTime|: after |beforeRender| and before now().
|
// does a very basic check on |renderTime|: after |beforeRender| and before now().
|
||||||
function checkElement(entry, expectedUrl, expectedIdentifier, expectedID, beforeRender,
|
function checkElement(entry, expectedUrl, expectedIdentifier, expectedID, beforeRender,
|
||||||
expectedElement) {
|
expectedElement) {
|
||||||
checkElementInternal(entry, expectedUrl, expectedIdentifier, expectedID, beforeRender,
|
checkElementInternal(entry, expectedUrl, expectedIdentifier, expectedID, beforeRender,
|
||||||
|
|
45
tests/wpt/web-platform-tests/event-timing/buffered-flag.html
Normal file
45
tests/wpt/web-platform-tests/event-timing/buffered-flag.html
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<meta charset=utf-8 />
|
||||||
|
<title>Event Timing: PerformanceObserver sees entries with buffered flag</title>
|
||||||
|
<button id='button'>Generate a 'click' event</button>
|
||||||
|
<script src=/resources/testharness.js></script>
|
||||||
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
<script src=/resources/testdriver.js></script>
|
||||||
|
<script src=/resources/testdriver-vendor.js></script>
|
||||||
|
<script src=resources/event-timing-test-utils.js></script>
|
||||||
|
<script>
|
||||||
|
let firstInputSeen = false;
|
||||||
|
let eventSeen = false;
|
||||||
|
async_test(t => {
|
||||||
|
const validateEntry = t.step_func(entry => {
|
||||||
|
if (entry.entryType === 'first-input')
|
||||||
|
firstInputSeen = true;
|
||||||
|
else if (entry.entryType === 'event')
|
||||||
|
eventSeen = true;
|
||||||
|
else
|
||||||
|
assert_unreached('Should only observe Event Timing entries!');
|
||||||
|
});
|
||||||
|
// First observer creates second in callback to ensure the entry has been dispatched by the time
|
||||||
|
// the second observer begins observing.
|
||||||
|
new PerformanceObserver((list, obs) => {
|
||||||
|
list.getEntries().forEach(validateEntry);
|
||||||
|
if (!firstInputSeen || !eventSeen)
|
||||||
|
return;
|
||||||
|
|
||||||
|
obs.disconnect();
|
||||||
|
firstInputSeen = false;
|
||||||
|
eventSeen = false;
|
||||||
|
// Second observer requires 'buffered: true' to see entries.
|
||||||
|
const bufferedObserver = new PerformanceObserver(entryList => {
|
||||||
|
entryList.getEntries().forEach(validateEntry);
|
||||||
|
if (firstInputSeen && eventSeen)
|
||||||
|
t.done();
|
||||||
|
});
|
||||||
|
bufferedObserver.observe({type: "event", buffered: true});
|
||||||
|
bufferedObserver.observe({type: 'first-input', buffered: true});
|
||||||
|
}).observe({entryTypes: ['event', 'first-input']});
|
||||||
|
clickAndBlockMain('button');
|
||||||
|
}, "PerformanceObserver with buffered flag sees previous Event Timing entries");
|
||||||
|
</script>
|
||||||
|
</html>
|
|
@ -0,0 +1,37 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<script src=/resources/testharness.js></script>
|
||||||
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
<script src=/fetch/sec-metadata/resources/helper.js></script>
|
||||||
|
<script>
|
||||||
|
// http -> https should see `Sec-Fetch-Site: cross-site`.
|
||||||
|
// This is a regression test for
|
||||||
|
// https://github.com/w3c/webappsec-fetch-metadata/issues/34
|
||||||
|
promise_test(t => {
|
||||||
|
assert_equals(location.protocol, "http:");
|
||||||
|
return fetch("https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/echo-as-json.py")
|
||||||
|
.then(r => r.json())
|
||||||
|
.then(j => {
|
||||||
|
assert_header_equals(j, {
|
||||||
|
"dest": "empty",
|
||||||
|
"site": "cross-site",
|
||||||
|
"user": "",
|
||||||
|
"mode": "cors",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, "http->https fetch (cross-scheme => cross-site)");
|
||||||
|
|
||||||
|
// http -> http should see no `Sec-Fetch-Site`.
|
||||||
|
promise_test(t => {
|
||||||
|
assert_equals(location.protocol, "http:");
|
||||||
|
return fetch("resources/echo-as-json.py")
|
||||||
|
.then(r => r.json())
|
||||||
|
.then(j => {
|
||||||
|
assert_header_equals(j, {
|
||||||
|
"dest": "",
|
||||||
|
"site": "",
|
||||||
|
"user": "",
|
||||||
|
"mode": "",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, "http->http fetch (non-trustworthy destination => no sec-metadata)");
|
||||||
|
</script>
|
|
@ -60,4 +60,23 @@
|
||||||
|
|
||||||
document.body.appendChild(i);
|
document.body.appendChild(i);
|
||||||
}, "Non-secure cross-site iframe => No headers.");
|
}, "Non-secure cross-site iframe => No headers.");
|
||||||
|
|
||||||
|
async_test(t => {
|
||||||
|
let i = document.createElement('iframe');
|
||||||
|
i.src = "https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/post-to-owner.py";
|
||||||
|
window.addEventListener('message', t.step_func(e => {
|
||||||
|
if (e.source != i.contentWindow)
|
||||||
|
return;
|
||||||
|
|
||||||
|
assert_header_equals(e.data, {
|
||||||
|
"dest": "nested-document",
|
||||||
|
"site": "cross-site",
|
||||||
|
"user": "",
|
||||||
|
"mode": "nested-navigate",
|
||||||
|
});
|
||||||
|
t.done();
|
||||||
|
}));
|
||||||
|
|
||||||
|
document.body.appendChild(i);
|
||||||
|
}, "Secure, cross-site (cross-scheme, same-host) iframe");
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<div id="fontTest">Downgraded then upgraded font</div>
|
<div id="fontTest">Downgraded then upgraded font</div>
|
||||||
<script>
|
<script>
|
||||||
let nonce = token();
|
let nonce = token();
|
||||||
let expected = { "dest": "", "site": "same-site", "user": "", "mode": "" };
|
let expected = { "dest": "", "site": "cross-site", "user": "", "mode": "" };
|
||||||
|
|
||||||
// Validate various scenarios handle a request that redirects from https => http
|
// Validate various scenarios handle a request that redirects from https => http
|
||||||
// correctly and avoids disclosure of any Sec- headers.
|
// correctly and avoids disclosure of any Sec- headers.
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
// Note that we're using `undefined` here, as opposed to "" elsewhere because of the way
|
// Note that we're using `undefined` here, as opposed to "" elsewhere because of the way
|
||||||
// that `image.py` encodes data.
|
// that `image.py` encodes data.
|
||||||
"dest": undefined,
|
"dest": undefined,
|
||||||
"site": "same-site",
|
"site": "cross-site",
|
||||||
"user": undefined,
|
"user": undefined,
|
||||||
"mode": undefined,
|
"mode": undefined,
|
||||||
});
|
});
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<div id="fontTest">Upgraded font</div>
|
<div id="fontTest">Upgraded font</div>
|
||||||
<script>
|
<script>
|
||||||
let nonce = token();
|
let nonce = token();
|
||||||
let expected = { "dest": "", "site": "same-site", "user": "", "mode": "" };
|
let expected = { "dest": "", "site": "cross-site", "user": "", "mode": "" };
|
||||||
|
|
||||||
// Validate various scenarios handle a request that redirects from http => https correctly and add the proper Sec- headers.
|
// Validate various scenarios handle a request that redirects from http => https correctly and add the proper Sec- headers.
|
||||||
RunCommonRedirectTests("Http upgrade", upgradeRedirectTo, expected);
|
RunCommonRedirectTests("Http upgrade", upgradeRedirectTo, expected);
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
// Note that we're using `undefined` here, as opposed to "" elsewhere because of the way
|
// Note that we're using `undefined` here, as opposed to "" elsewhere because of the way
|
||||||
// that `image.py` encodes data.
|
// that `image.py` encodes data.
|
||||||
"dest": undefined,
|
"dest": undefined,
|
||||||
"site": "same-site",
|
"site": "cross-site",
|
||||||
"user": undefined,
|
"user": undefined,
|
||||||
"mode": undefined,
|
"mode": undefined,
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Clicking on an <a> element with a download attribute and href that redirects to 'javascript:' should not navigate or execute</title>
|
||||||
|
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-a-element:activation-behaviour">
|
||||||
|
<link rel="help" href="https://html.spec.whatwg.org/multipage/links.html#attr-hyperlink-download">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
"use strict";
|
||||||
|
async_test(t => {
|
||||||
|
const errorFrame = document.createElement("iframe");
|
||||||
|
|
||||||
|
errorFrame.addEventListener("load", t.step_func(function () {
|
||||||
|
assert_false(errorFrame.contentWindow.executed);
|
||||||
|
errorFrame.contentWindow.addEventListener(
|
||||||
|
"beforeunload", t.unreached_func("Page should not navigate."));
|
||||||
|
|
||||||
|
errorFrame.contentDocument.querySelector("#error-url").click();
|
||||||
|
t.step_timeout(_ => {
|
||||||
|
assert_false(errorFrame.contentWindow.executed, "Redirecting to javascript: was suppressed.");
|
||||||
|
t.done();
|
||||||
|
}, 1000);
|
||||||
|
}));
|
||||||
|
errorFrame.src = "resources/a-download-redirect-to-javascript.html";
|
||||||
|
document.body.appendChild(errorFrame);
|
||||||
|
}, "Do not navigate or execute JS when redirecting a download to 'javascript:..'");
|
||||||
|
</script>
|
||||||
|
</body>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<!doctype html>
|
||||||
|
<script>
|
||||||
|
window.executed = false;
|
||||||
|
</script>
|
||||||
|
<a id="error-url" href="/common/redirect.py?location=javascript:window.executed=true" download="html.html">Click me</a>
|
|
@ -11,7 +11,6 @@ interface SpeechRecognition : EventTarget {
|
||||||
attribute boolean continuous;
|
attribute boolean continuous;
|
||||||
attribute boolean interimResults;
|
attribute boolean interimResults;
|
||||||
attribute unsigned long maxAlternatives;
|
attribute unsigned long maxAlternatives;
|
||||||
attribute DOMString serviceURI;
|
|
||||||
|
|
||||||
// methods to drive the speech interaction
|
// methods to drive the speech interaction
|
||||||
void start();
|
void start();
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>KV Storage: should not work in non-secure contexts when included via a script element</title>
|
|
||||||
|
|
||||||
<script src="/resources/testharness.js"></script>
|
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
"use strict";
|
|
||||||
setup({ allow_uncaught_exception: true });
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
assert_false(self.isSecureContext, "This test must run in a non-secure context");
|
|
||||||
}, "Prerequisite check");
|
|
||||||
|
|
||||||
async_test(t => {
|
|
||||||
self.addEventListener("error", t.step_func_done(errorEvent => {
|
|
||||||
assert_equals(errorEvent.error.constructor, DOMException, "Must trigger a DOMException");
|
|
||||||
assert_equals(errorEvent.error.name, "SecurityError",
|
|
||||||
"The DOMException must be a \"SecurityError\"");
|
|
||||||
}, { once: true }));
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script type="module" src="std:kv-storage"></script>
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
# KV Storage `[SecureContext]` tests
|
||||||
|
|
||||||
|
These tests ensure that KV Storage follows the rules for `[SecureContext]` modules. (As of the time of this writing, they are only proposed rules, in [heycam/webidl#675](https://github.com/heycam/webidl/pull/675).)
|
||||||
|
|
||||||
|
Eventually these should probably be generalized and tested as part of `idlharness.js`.
|
|
@ -13,6 +13,6 @@ test(() => {
|
||||||
}, "Prerequisite check");
|
}, "Prerequisite check");
|
||||||
|
|
||||||
promise_test(t => {
|
promise_test(t => {
|
||||||
return promise_rejects(t, "SecurityError", import("std:kv-storage"));
|
return promise_rejects(t, new TypeError(), import("std:kv-storage"));
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
|
@ -0,0 +1,31 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>KV Storage: in non-secure contexts, import map mappings should fall back</title>
|
||||||
|
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
"use strict";
|
||||||
|
test(() => {
|
||||||
|
assert_false(self.isSecureContext, "This test must run in a non-secure context");
|
||||||
|
}, "Prerequisite check");
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="importmap">
|
||||||
|
{
|
||||||
|
"imports": {
|
||||||
|
"std:kv-storage": [
|
||||||
|
"std:kv-storage",
|
||||||
|
"./resources/dummy-module.js"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="module">
|
||||||
|
promise_test(async () => {
|
||||||
|
const result = await import("std:kv-storage");
|
||||||
|
assert_equals(namespaceObj.myExport, "not the real KV storage");
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -15,9 +15,7 @@ test(() => {
|
||||||
|
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
window.addEventListener("error", t.step_func_done(errorEvent => {
|
window.addEventListener("error", t.step_func_done(errorEvent => {
|
||||||
assert_equals(errorEvent.error.constructor, DOMException, "Must trigger a DOMException");
|
assert_equals(errorEvent.error.constructor, TypeError, "Must trigger a TypeError");
|
||||||
assert_equals(errorEvent.error.name, "SecurityError",
|
|
||||||
"The DOMException must be a \"SecurityError\"");
|
|
||||||
}, { once: true }));
|
}, { once: true }));
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
|
@ -0,0 +1 @@
|
||||||
|
export const myExport = "not the real KV storage";
|
|
@ -0,0 +1 @@
|
||||||
|
window.sideEffectsHappened = true;
|
|
@ -0,0 +1,21 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>KV Storage: should not work in non-secure contexts when included via a script element</title>
|
||||||
|
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
"use strict";
|
||||||
|
test(() => {
|
||||||
|
assert_false(self.isSecureContext, "This test must run in a non-secure context");
|
||||||
|
}, "Prerequisite check");
|
||||||
|
|
||||||
|
window.t = async_test("Check the events");
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="module"
|
||||||
|
src="std:kv-storage"
|
||||||
|
onload="t.step(() => { assert_unreached('load event fired'); })"
|
||||||
|
onerror="t.done()">
|
||||||
|
</script>
|
|
@ -0,0 +1,28 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>KV Storage: should fail in non-secure contexts in the fetching phase, not evaluation phase</title>
|
||||||
|
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
"use strict";
|
||||||
|
setup({ allow_uncaught_exception: true });
|
||||||
|
|
||||||
|
window.sideEffectsHappened = false;
|
||||||
|
|
||||||
|
test(() => {
|
||||||
|
assert_false(self.isSecureContext, "This test must run in a non-secure context");
|
||||||
|
}, "Prerequisite check");
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="module">
|
||||||
|
import "./resources/test-side-effects.js";
|
||||||
|
import "std:kv-storage";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="module">
|
||||||
|
test(() => {
|
||||||
|
assert_false(window.sideEffectsHappened, "The side effects module didn't evaluate either");
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -1,6 +1,6 @@
|
||||||
<!DOCTYPE HTML>
|
<!DOCTYPE HTML>
|
||||||
<meta charset=utf-8>
|
<meta charset=utf-8>
|
||||||
<title>Largest Contentful Paint: observe cross-origin images but without startTime.</title>
|
<title>Largest Contentful Paint: observe cross-origin images but without renderTime.</title>
|
||||||
<body>
|
<body>
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
@ -14,7 +14,8 @@
|
||||||
assert_equals(entryList.getEntries().length, 1);
|
assert_equals(entryList.getEntries().length, 1);
|
||||||
const entry = entryList.getEntries()[0];
|
const entry = entryList.getEntries()[0];
|
||||||
assert_equals(entry.entryType, 'largest-contentful-paint');
|
assert_equals(entry.entryType, 'largest-contentful-paint');
|
||||||
assert_equals(entry.startTime, 0, 'The startTime value should be 0 for a cross origin image.');
|
assert_equals(entry.renderTime, 0, 'The renderTime value should be 0 for a cross origin image.');
|
||||||
|
assert_equals(entry.startTime, 0);
|
||||||
assert_equals(entry.duration, 0);
|
assert_equals(entry.duration, 0);
|
||||||
// blue.png is 133 x 106.
|
// blue.png is 133 x 106.
|
||||||
assert_equals(entry.size, 14098);
|
assert_equals(entry.size, 14098);
|
||||||
|
@ -27,7 +28,7 @@
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
observer.observe({type: 'largest-contentful-paint', buffered: true});
|
observer.observe({type: 'largest-contentful-paint', buffered: true});
|
||||||
}, 'Cross-origin image is observable, with startTime equal to 0.');
|
}, 'Cross-origin image is observable, with renderTime equal to 0.');
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<img src='http://{{domains[www]}}:{{ports[http][1]}}/images/blue.png' id='image_id'/>
|
<img src='http://{{domains[www]}}:{{ports[http][1]}}/images/blue.png' id='image_id'/>
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<meta charset=utf-8>
|
||||||
|
<title>Largest Contentful Paint: src change triggers new entry.</title>
|
||||||
|
<body>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<img src='/images/blue.png' id='image_id'/>
|
||||||
|
<script>
|
||||||
|
async_test(function (t) {
|
||||||
|
if (!window.LargestContentfulPaint) {
|
||||||
|
assert_unreached("LargestContentfulPaint is not implemented");
|
||||||
|
}
|
||||||
|
let beforeRender = performance.now();
|
||||||
|
let firstCallback = true;
|
||||||
|
const observer = new PerformanceObserver(
|
||||||
|
t.step_func_done(function(entryList) {
|
||||||
|
assert_equals(entryList.getEntries().length, 1);
|
||||||
|
const entry = entryList.getEntries()[0];
|
||||||
|
assert_equals(entry.entryType, 'largest-contentful-paint');
|
||||||
|
assert_greater_than_equal(entry.renderTime, beforeRender,
|
||||||
|
'The rendering timestamp should occur after script starts running.');
|
||||||
|
assert_greater_than_equal(performance.now(), entry.renderTime,
|
||||||
|
'The rendering timestamp should occur before the entry is dispatched to the observer.');
|
||||||
|
assert_equals(entry.startTime, 0);
|
||||||
|
assert_equals(entry.duration, 0);
|
||||||
|
if (firstCallback) {
|
||||||
|
// blue.png is 133 x 106.
|
||||||
|
assert_equals(entry.size, 14098);
|
||||||
|
assert_equals(entry.id, 'image_id');
|
||||||
|
const pathname = window.location.origin + '/images/blue.png';
|
||||||
|
assert_equals(entry.url, pathname);
|
||||||
|
|
||||||
|
// Set the src to trigger another entry.
|
||||||
|
const img = document.getElementById('image_id');
|
||||||
|
img.src = '/images/black-rectangle.png';
|
||||||
|
beforeRender = performance.now();
|
||||||
|
firstCallback =false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// black-rectangle.png is 100 x 50.
|
||||||
|
assert_equals(entry.size, 5000);
|
||||||
|
assert_equals(entry.id, 'image_id');
|
||||||
|
const pathname = window.location.origin + '/images/black-rectangle.png';
|
||||||
|
assert_equals(entry.url, pathname);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
observer.observe({type: 'largest-contentful-paint', buffered: true});
|
||||||
|
}, 'Largest Contentful Paint: changing src causes a new entry to be dispatched.');
|
||||||
|
</script>
|
||||||
|
</body>
|
|
@ -15,10 +15,11 @@
|
||||||
assert_equals(entryList.getEntries().length, 1);
|
assert_equals(entryList.getEntries().length, 1);
|
||||||
const entry = entryList.getEntries()[0];
|
const entry = entryList.getEntries()[0];
|
||||||
assert_equals(entry.entryType, 'largest-contentful-paint');
|
assert_equals(entry.entryType, 'largest-contentful-paint');
|
||||||
assert_greater_than_equal(entry.startTime, beforeRender,
|
assert_greater_than_equal(entry.renderTime, beforeRender,
|
||||||
'The rendering timestamp should occur after script starts running.');
|
'The rendering timestamp should occur after script starts running.');
|
||||||
assert_greater_than_equal(performance.now(), entry.startTime,
|
assert_greater_than_equal(performance.now(), entry.renderTime,
|
||||||
'The rendering timestamp should occur before the entry is dispatched to the observer.');
|
'The rendering timestamp should occur before the entry is dispatched to the observer.');
|
||||||
|
assert_equals(entry.startTime, 0);
|
||||||
assert_equals(entry.duration, 0);
|
assert_equals(entry.duration, 0);
|
||||||
// blue.png is 133 x 106.
|
// blue.png is 133 x 106.
|
||||||
assert_equals(entry.size, 14098);
|
assert_equals(entry.size, 14098);
|
||||||
|
|
|
@ -20,8 +20,9 @@ p {
|
||||||
assert_equals(entryList.getEntries().length, 1);
|
assert_equals(entryList.getEntries().length, 1);
|
||||||
const entry = entryList.getEntries()[0];
|
const entry = entryList.getEntries()[0];
|
||||||
assert_equals(entry.entryType, 'largest-contentful-paint');
|
assert_equals(entry.entryType, 'largest-contentful-paint');
|
||||||
assert_greater_than_equal(entry.startTime, beforeRender);
|
assert_greater_than_equal(entry.renderTime, beforeRender);
|
||||||
assert_greater_than_equal(performance.now(), entry.startTime);
|
assert_greater_than_equal(performance.now(), entry.renderTime);
|
||||||
|
assert_equals(entry.startTime, 0);
|
||||||
assert_equals(entry.duration, 0);
|
assert_equals(entry.duration, 0);
|
||||||
// Some lower bound: height of at least 12 px.
|
// Some lower bound: height of at least 12 px.
|
||||||
// Width of at least 100 px.
|
// Width of at least 100 px.
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<meta charset=utf-8>
|
||||||
|
<title>Layout Instability: PerformanceObserver sees entries with buffered flag</title>
|
||||||
|
<body>
|
||||||
|
<style>
|
||||||
|
#myDiv { position: relative; width: 300px; height: 100px; }
|
||||||
|
</style>
|
||||||
|
<div id='myDiv'></div>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script>
|
||||||
|
async_test(t => {
|
||||||
|
const startTime = performance.now();
|
||||||
|
// First observer creates second in callback to ensure the entry has been dispatched by the time
|
||||||
|
// the second observer begins observing.
|
||||||
|
new PerformanceObserver(() => {
|
||||||
|
const endTime = performance.now();
|
||||||
|
// Second observer requires 'buffered: true' to see entries.
|
||||||
|
new PerformanceObserver(t.step_func_done(list => {
|
||||||
|
assert_equals(list.getEntries().length, 1);
|
||||||
|
const entry = list.getEntries()[0];
|
||||||
|
assert_equals(entry.entryType, "layout-shift");
|
||||||
|
assert_greater_than_equal(entry.startTime, startTime)
|
||||||
|
assert_less_than_equal(entry.startTime, endTime)
|
||||||
|
assert_equals(entry.duration, 0.0);
|
||||||
|
})).observe({'type': 'layout-shift', buffered: true});
|
||||||
|
}).observe({type: 'layout-shift'});
|
||||||
|
// Modify the position of the div to cause a layout-shift entry.
|
||||||
|
document.getElementById('myDiv').style = "top: 60px";
|
||||||
|
}, 'PerformanceObserver with buffered flag sees previous layout-shift entry.');
|
||||||
|
</script>
|
||||||
|
</body>
|
|
@ -0,0 +1,89 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!-- Copyright © 2019 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Exercise implicit changeType for supported test types, using mime types WITH and WITHOUT codecs for addSourceBuffer.</title>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="mediasource-util.js"></script>
|
||||||
|
<script src="mediasource-changetype-util.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
// Helper that generates implicit codec switching tests for a pair of media
|
||||||
|
// types, with full codecs in the original addSourceBuffer calls, and
|
||||||
|
// separately without full codecs parameters in the original addSourceBuffer
|
||||||
|
// calls.
|
||||||
|
function generateTestsForMediaPair(type1, type2) {
|
||||||
|
// Implicit changeType across bytestream formats is not expected to be
|
||||||
|
// supported, so skip those tests' generation.
|
||||||
|
if (type1.mime_subtype != type2.mime_subtype)
|
||||||
|
return;
|
||||||
|
|
||||||
|
assert_equals(type1.is_video, type2.is_video,
|
||||||
|
"Types must both be audio or both be video");
|
||||||
|
test_description_prefix = "Test " + (type1.is_video ? "video" : "audio") +
|
||||||
|
"-only implicit changeType for " + type1.type + " <-> " + type2.type;
|
||||||
|
|
||||||
|
mediaSourceChangeTypeTest(
|
||||||
|
type1, type2,
|
||||||
|
test_description_prefix,
|
||||||
|
{ implicit_changetype: true } );
|
||||||
|
|
||||||
|
// Skip test generation if the relaxed types are already fully specified and
|
||||||
|
// tested, above.
|
||||||
|
if (type1.type == type1.relaxed_type &&
|
||||||
|
type2.type == type2.relaxed_type) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mediaSourceChangeTypeTest(
|
||||||
|
type1, type2,
|
||||||
|
test_description_prefix +
|
||||||
|
" (using types without codecs parameters for addSourceBuffer)",
|
||||||
|
{ use_relaxed_mime_types: true, implicit_changetype: true } );
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateImplicitChangeTypeTests(audio_types, video_types) {
|
||||||
|
async_test((test) => {
|
||||||
|
// Require at least 1 pair of different audio-only or video-only test media
|
||||||
|
// files sharing same bytestream format.
|
||||||
|
assert_true(audio_types.length > 1 || video_types.length > 1,
|
||||||
|
"Browser doesn't support enough test media");
|
||||||
|
|
||||||
|
// Count the number of unique bytestream formats used in each of audio_types
|
||||||
|
// and video_types.
|
||||||
|
let audio_formats = new Set(Array.from(audio_types, t => t.mime_subtype));
|
||||||
|
let video_formats = new Set(Array.from(video_types, t => t.mime_subtype));
|
||||||
|
assert_true(audio_types.length > audio_formats.size ||
|
||||||
|
video_types.length > video_formats.size,
|
||||||
|
"Browser doesn't support at least 2 audio-only or 2 video-only test " +
|
||||||
|
"media with same bytestream format");
|
||||||
|
|
||||||
|
test.done();
|
||||||
|
}, "Check if browser supports enough test media types and pairs of " +
|
||||||
|
"audio-only or video-only media with same bytestream format");
|
||||||
|
|
||||||
|
// Generate audio-only tests
|
||||||
|
for (let audio1 of audio_types) {
|
||||||
|
for (let audio2 of audio_types) {
|
||||||
|
generateTestsForMediaPair(audio1, audio2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate video-only tests
|
||||||
|
for (let video1 of video_types) {
|
||||||
|
for (let video2 of video_types) {
|
||||||
|
generateTestsForMediaPair(video1, video2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
findSupportedChangeTypeTestTypes(generateImplicitChangeTypeTests);
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,122 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!-- Copyright © 2019 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Exercise scenarios expected to fail for changeType for supported test types, using mime types WITH and WITHOUT codecs.</title>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="mediasource-util.js"></script>
|
||||||
|
<script src="mediasource-changetype-util.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
function generateNegativeChangeTypeTests(audio_types, video_types) {
|
||||||
|
async_test((test) => {
|
||||||
|
assert_true(audio_types.length > 0 && video_types.length > 0,
|
||||||
|
"Browser doesn't support at least one audio and one video test media for audio<->video changeType negative tests");
|
||||||
|
|
||||||
|
let audio_formats = new Set(Array.from(audio_types, t => t.mime_subtype));
|
||||||
|
let video_formats = new Set(Array.from(video_types, t => t.mime_subtype));
|
||||||
|
|
||||||
|
let has_intersected_av_format = false;
|
||||||
|
for (let elem of audio_formats) {
|
||||||
|
if (video_formats.has(elem))
|
||||||
|
has_intersected_av_format = true;
|
||||||
|
}
|
||||||
|
assert_true(has_intersected_av_format,
|
||||||
|
"Browser doesn't support at least 1 audio-only and 1 video-only test media with same bytestream formats");
|
||||||
|
|
||||||
|
test.done();
|
||||||
|
}, "Check if browser supports enough test media types across audio and video for changeType negative tests");
|
||||||
|
|
||||||
|
// Generate audio<->video changeType tests that should not succeed in
|
||||||
|
// reaching successful end of playback because the class of media (audio or
|
||||||
|
// video) must remain the same across either an implicit or explicit
|
||||||
|
// changeType.
|
||||||
|
for (let audio_type of audio_types) {
|
||||||
|
for (let video_type of video_types) {
|
||||||
|
// For implicit changeType negative tests, only pairs of test media files
|
||||||
|
// using the same bytestream format are used, because it is not
|
||||||
|
// guaranteed that all implementations can be expected to reliably detect
|
||||||
|
// an implicit switch of bytestream format (for example, MP3 parsers
|
||||||
|
// might skip invalid input bytes without issuing error.)
|
||||||
|
let do_implicit_changetype = (audio_type.mime_subtype ==
|
||||||
|
video_type.mime_subtype);
|
||||||
|
|
||||||
|
mediaSourceChangeTypeTest(
|
||||||
|
audio_type, video_type,
|
||||||
|
"Negative test audio<->video changeType for " +
|
||||||
|
audio_type.type + " <-> " + video_type.type,
|
||||||
|
{ negative_test: true } );
|
||||||
|
mediaSourceChangeTypeTest(
|
||||||
|
video_type, audio_type,
|
||||||
|
"Negative test video<->audio changeType for " +
|
||||||
|
video_type.type + " <-> " + audio_type.type,
|
||||||
|
{ negative_test: true } );
|
||||||
|
|
||||||
|
if (do_implicit_changetype) {
|
||||||
|
mediaSourceChangeTypeTest(
|
||||||
|
audio_type, video_type,
|
||||||
|
"Negative test audio<->video implicit changeType for " +
|
||||||
|
audio_type.type + " <-> " + video_type.type,
|
||||||
|
{ implicit_changetype: true, negative_test: true } );
|
||||||
|
mediaSourceChangeTypeTest(
|
||||||
|
video_type, audio_type,
|
||||||
|
"Negative test video<->audio implicit changeType for " +
|
||||||
|
video_type.type + " <-> " + audio_type.type,
|
||||||
|
{ implicit_changetype: true, negative_test: true } );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Skip tests where the relaxed type is already fully specified and
|
||||||
|
// tested, above.
|
||||||
|
if (audio_type.type == audio_type.relaxed_type &&
|
||||||
|
video_type.type == video_type.relaxed_type) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
mediaSourceChangeTypeTest(
|
||||||
|
audio_type, video_type,
|
||||||
|
"Negative test audio<->video changeType for " +
|
||||||
|
audio_type.type + " <-> " + video_type.type +
|
||||||
|
" (using types without codecs parameters)",
|
||||||
|
{ use_relaxed_mime_types: true, negative_test: true } );
|
||||||
|
mediaSourceChangeTypeTest(
|
||||||
|
video_type, audio_type,
|
||||||
|
"Negative test video<->audio changeType for " +
|
||||||
|
video_type.type + " <-> " + audio_type.type +
|
||||||
|
" (using types without codecs parameters)",
|
||||||
|
{ use_relaxed_mime_types: true, negative_test: true } );
|
||||||
|
|
||||||
|
if (do_implicit_changetype) {
|
||||||
|
mediaSourceChangeTypeTest(
|
||||||
|
audio_type, video_type,
|
||||||
|
"Negative test audio<->video implicit changeType for " +
|
||||||
|
audio_type.type + " <-> " + video_type.type +
|
||||||
|
" (without codecs parameters for addSourceBuffer)",
|
||||||
|
{ use_relaxed_mime_types: true,
|
||||||
|
implicit_changetype: true,
|
||||||
|
negative_test: true
|
||||||
|
} );
|
||||||
|
|
||||||
|
mediaSourceChangeTypeTest(
|
||||||
|
video_type, audio_type,
|
||||||
|
"Negative test video<->audio implicit changeType for " +
|
||||||
|
video_type.type + " <-> " + audio_type.type +
|
||||||
|
" (without codecs parameters for addSourceBuffer)",
|
||||||
|
{ use_relaxed_mime_types: true,
|
||||||
|
implicit_changetype: true,
|
||||||
|
negative_test: true
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
findSupportedChangeTypeTestTypes(generateNegativeChangeTypeTests);
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,52 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!-- Copyright © 2019 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Exercise changeType for supported test types, using mime types WITHOUT codecs for addSourceBuffer and changeType.</title>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="mediasource-util.js"></script>
|
||||||
|
<script src="mediasource-changetype-util.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="log"></div>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
function generateChangeTypeTests(audio_types, video_types) {
|
||||||
|
async_test((test) => {
|
||||||
|
assert_true(audio_types.length > 1, "Browser doesn't support at least 2 types of audio test media");
|
||||||
|
assert_true(video_types.length > 1, "Browser doesn't support at least 2 types of video test media");
|
||||||
|
test.done();
|
||||||
|
}, "Check if browser supports enough test media types");
|
||||||
|
|
||||||
|
// Generate audio-only changeType tests
|
||||||
|
for (let audio1 of audio_types) {
|
||||||
|
for (let audio2 of audio_types) {
|
||||||
|
mediaSourceChangeTypeTest(
|
||||||
|
audio1, audio2,
|
||||||
|
"Test audio-only changeType for " +
|
||||||
|
audio1.type + " <-> " + audio2.type +
|
||||||
|
" (using types without codecs parameters)",
|
||||||
|
{ use_relaxed_mime_types: true } );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate video-only changeType tests
|
||||||
|
for (let video1 of video_types) {
|
||||||
|
for (let video2 of video_types) {
|
||||||
|
mediaSourceChangeTypeTest(
|
||||||
|
video1, video2,
|
||||||
|
"Test video-only changeType for " +
|
||||||
|
video1.type + " <-> " + video2.type +
|
||||||
|
" (using types without codecs parameters)",
|
||||||
|
{ use_relaxed_mime_types: true });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
findSupportedChangeTypeTestTypes(generateChangeTypeTests);
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -2,7 +2,7 @@
|
||||||
<!-- Copyright © 2018 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
|
<!-- Copyright © 2018 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>Exercise changeType for supported test types.</title>
|
<title>Exercise changeType for supported test types, using mime types WITH codecs (if applicable) for addSourceBuffer and changeType.</title>
|
||||||
<meta name="timeout" content="long">
|
<meta name="timeout" content="long">
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
@ -23,14 +23,20 @@ function generateChangeTypeTests(audio_types, video_types) {
|
||||||
// Generate audio-only changeType tests
|
// Generate audio-only changeType tests
|
||||||
for (let audio1 of audio_types) {
|
for (let audio1 of audio_types) {
|
||||||
for (let audio2 of audio_types) {
|
for (let audio2 of audio_types) {
|
||||||
mediaSourceChangeTypeTest(audio1, audio2, "Test audio-only changeType for " + audio1.type + " <-> " + audio2.type);
|
mediaSourceChangeTypeTest(
|
||||||
|
audio1, audio2,
|
||||||
|
"Test audio-only changeType for " +
|
||||||
|
audio1.type + " <-> " + audio2.type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate video-only changeType tests
|
// Generate video-only changeType tests
|
||||||
for (let video1 of video_types) {
|
for (let video1 of video_types) {
|
||||||
for (let video2 of video_types) {
|
for (let video2 of video_types) {
|
||||||
mediaSourceChangeTypeTest(video1, video2, "Test video-only changeType for " + video1.type + " <-> " + video2.type);
|
mediaSourceChangeTypeTest(
|
||||||
|
video1, video2,
|
||||||
|
"Test video-only changeType for " +
|
||||||
|
video1.type + " <-> " + video2.type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,38 @@
|
||||||
// Copyright © 2018 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang).
|
// Copyright © 2018 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang).
|
||||||
|
|
||||||
function findSupportedChangeTypeTestTypes(cb) {
|
function findSupportedChangeTypeTestTypes(cb) {
|
||||||
|
// Changetype test media metadata.
|
||||||
|
// type: fully specified mime type (and codecs substring if the bytestream
|
||||||
|
// format does not forbid codecs parameter). This is required for use with
|
||||||
|
// isTypeSupported, and if supported, should work with both addSourceBuffer
|
||||||
|
// and changeType (unless implementation has restrictions).
|
||||||
|
//
|
||||||
|
// relaxed_type: possibly ambiguous mime type/subtype without any codecs
|
||||||
|
// substring. This is the same as type minus any codecs substring.
|
||||||
|
//
|
||||||
|
// mime_subtype: the subtype of the mime type in type and relaxed_type. Across
|
||||||
|
// types registered in the bytestream format registry
|
||||||
|
// (https://www.w3.org/TR/mse-byte-stream-format-registry/), this is
|
||||||
|
// currently sufficient to describe uniquely which test media share the same
|
||||||
|
// bytestream format for use in implicit changeType testing.
|
||||||
|
//
|
||||||
|
// is_video: All test media currently is single track. This describes whether
|
||||||
|
// or not the track is video.
|
||||||
|
//
|
||||||
|
// url: Relative location of the test media file.
|
||||||
|
//
|
||||||
|
// The next two items enable more reliable test media splicing test logic that
|
||||||
|
// prevents buffered range gaps at the splice points.
|
||||||
|
// start_time: Some test media begins at a time later than 0.0 seconds. This
|
||||||
|
// is the start time of the media.
|
||||||
|
// keyframe_interval: Some test media contains out-of-order PTS versus DTS
|
||||||
|
// coded frames. In those cases, a constant keyframe_interval is needed to
|
||||||
|
// prevent severely truncating out-of-order GOPs at splice points.
|
||||||
let CHANGE_TYPE_MEDIA_LIST = [
|
let CHANGE_TYPE_MEDIA_LIST = [
|
||||||
{
|
{
|
||||||
type: 'video/webm; codecs="vp8"',
|
type: 'video/webm; codecs="vp8"',
|
||||||
|
relaxed_type: 'video/webm',
|
||||||
|
mime_subtype: 'webm',
|
||||||
is_video: true,
|
is_video: true,
|
||||||
url: 'webm/test-v-128k-320x240-24fps-8kfr.webm',
|
url: 'webm/test-v-128k-320x240-24fps-8kfr.webm',
|
||||||
start_time: 0.0
|
start_time: 0.0
|
||||||
|
@ -12,6 +41,8 @@ function findSupportedChangeTypeTestTypes(cb) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'video/webm; codecs="vp9"',
|
type: 'video/webm; codecs="vp9"',
|
||||||
|
relaxed_type: 'video/webm',
|
||||||
|
mime_subtype: 'webm',
|
||||||
is_video: true,
|
is_video: true,
|
||||||
url: 'webm/test-vp9.webm',
|
url: 'webm/test-vp9.webm',
|
||||||
start_time: 0.0
|
start_time: 0.0
|
||||||
|
@ -20,6 +51,8 @@ function findSupportedChangeTypeTestTypes(cb) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'video/mp4; codecs="avc1.4D4001"',
|
type: 'video/mp4; codecs="avc1.4D4001"',
|
||||||
|
relaxed_type: 'video/mp4',
|
||||||
|
mime_subtype: 'mp4',
|
||||||
is_video: true,
|
is_video: true,
|
||||||
url: 'mp4/test-v-128k-320x240-24fps-8kfr.mp4',
|
url: 'mp4/test-v-128k-320x240-24fps-8kfr.mp4',
|
||||||
start_time: 0.083333,
|
start_time: 0.083333,
|
||||||
|
@ -27,6 +60,8 @@ function findSupportedChangeTypeTestTypes(cb) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'audio/webm; codecs="vorbis"',
|
type: 'audio/webm; codecs="vorbis"',
|
||||||
|
relaxed_type: 'audio/webm',
|
||||||
|
mime_subtype: 'webm',
|
||||||
is_video: false,
|
is_video: false,
|
||||||
url: 'webm/test-a-128k-44100Hz-1ch.webm',
|
url: 'webm/test-a-128k-44100Hz-1ch.webm',
|
||||||
start_time: 0.0
|
start_time: 0.0
|
||||||
|
@ -36,6 +71,8 @@ function findSupportedChangeTypeTestTypes(cb) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'audio/mp4; codecs="mp4a.40.2"',
|
type: 'audio/mp4; codecs="mp4a.40.2"',
|
||||||
|
relaxed_type: 'audio/mp4',
|
||||||
|
mime_subtype: 'mp4',
|
||||||
is_video: false,
|
is_video: false,
|
||||||
url: 'mp4/test-a-128k-44100Hz-1ch.mp4',
|
url: 'mp4/test-a-128k-44100Hz-1ch.mp4',
|
||||||
start_time: 0.0
|
start_time: 0.0
|
||||||
|
@ -45,6 +82,8 @@ function findSupportedChangeTypeTestTypes(cb) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'audio/mpeg',
|
type: 'audio/mpeg',
|
||||||
|
relaxed_type: 'audio/mpeg',
|
||||||
|
mime_subtype: 'mpeg',
|
||||||
is_video: false,
|
is_video: false,
|
||||||
url: 'mp3/sound_5.mp3',
|
url: 'mp3/sound_5.mp3',
|
||||||
start_time: 0.0
|
start_time: 0.0
|
||||||
|
@ -77,21 +116,26 @@ function appendBuffer(test, sourceBuffer, data) {
|
||||||
sourceBuffer.appendBuffer(data);
|
sourceBuffer.appendBuffer(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
function trimBuffered(test, mediaElement, sourceBuffer, minimumPreviousDuration, newDuration) {
|
function trimBuffered(test, mediaElement, sourceBuffer, minimumPreviousDuration, newDuration, skip_duration_prechecks) {
|
||||||
assert_less_than(newDuration, minimumPreviousDuration);
|
if (!skip_duration_prechecks) {
|
||||||
assert_less_than(minimumPreviousDuration, mediaElement.duration);
|
assert_less_than(newDuration, minimumPreviousDuration);
|
||||||
|
assert_less_than(minimumPreviousDuration, mediaElement.duration);
|
||||||
|
}
|
||||||
test.expectEvent(sourceBuffer, "update");
|
test.expectEvent(sourceBuffer, "update");
|
||||||
test.expectEvent(sourceBuffer, "updateend");
|
test.expectEvent(sourceBuffer, "updateend");
|
||||||
sourceBuffer.remove(newDuration, Infinity);
|
sourceBuffer.remove(newDuration, Infinity);
|
||||||
}
|
}
|
||||||
|
|
||||||
function trimDuration(test, mediaElement, mediaSource, newDuration) {
|
function trimDuration(test, mediaElement, mediaSource, newDuration, skip_duration_prechecks) {
|
||||||
assert_less_than(newDuration, mediaElement.duration);
|
if (!skip_duration_prechecks) {
|
||||||
|
assert_less_than(newDuration, mediaElement.duration);
|
||||||
|
}
|
||||||
test.expectEvent(mediaElement, "durationchange");
|
test.expectEvent(mediaElement, "durationchange");
|
||||||
mediaSource.duration = newDuration;
|
mediaSource.duration = newDuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
function runChangeTypeTest(test, mediaElement, mediaSource, metadataA, dataA, metadataB, dataB) {
|
function runChangeTypeTest(test, mediaElement, mediaSource, metadataA, typeA, dataA, metadataB, typeB, dataB,
|
||||||
|
implicit_changetype, negative_test) {
|
||||||
// Some streams, like the MP4 video stream, contain presentation times for
|
// Some streams, like the MP4 video stream, contain presentation times for
|
||||||
// frames out of order versus their decode times. If we overlap-append the
|
// frames out of order versus their decode times. If we overlap-append the
|
||||||
// latter part of such a stream's GOP presentation interval, a significant
|
// latter part of such a stream's GOP presentation interval, a significant
|
||||||
|
@ -104,6 +148,14 @@ function runChangeTypeTest(test, mediaElement, mediaSource, metadataA, dataA, me
|
||||||
// splice-overlapping such GOP sequences that aren't SAP-Type-1.
|
// splice-overlapping such GOP sequences that aren't SAP-Type-1.
|
||||||
// TODO(wolenetz): https://github.com/w3c/media-source/issues/160 could
|
// TODO(wolenetz): https://github.com/w3c/media-source/issues/160 could
|
||||||
// greatly simplify this problem by allowing us play through these small gaps.
|
// greatly simplify this problem by allowing us play through these small gaps.
|
||||||
|
//
|
||||||
|
// typeA and typeB may be underspecified for use with isTypeSupported, but
|
||||||
|
// this helper does not use isTypeSupported. typeA and typeB must work (even
|
||||||
|
// if missing codec specific substrings) with addSourceBuffer (just typeA) and
|
||||||
|
// changeType (both typeA and typeB).
|
||||||
|
//
|
||||||
|
// See also mediaSourceChangeTypeTest's options argument for the meanings of
|
||||||
|
// implicit_changetype and negative_test.
|
||||||
|
|
||||||
function findSafeOffset(targetTime, overlappedMediaMetadata, overlappedStartTime, overlappingMediaMetadata) {
|
function findSafeOffset(targetTime, overlappedMediaMetadata, overlappedStartTime, overlappingMediaMetadata) {
|
||||||
assert_greater_than_equal(targetTime, overlappedStartTime);
|
assert_greater_than_equal(targetTime, overlappedStartTime);
|
||||||
|
@ -130,8 +182,18 @@ function runChangeTypeTest(test, mediaElement, mediaSource, metadataA, dataA, me
|
||||||
return { "offset": offset, "adjustedTime": adjustedTime };
|
return { "offset": offset, "adjustedTime": adjustedTime };
|
||||||
}
|
}
|
||||||
|
|
||||||
let sourceBuffer = mediaSource.addSourceBuffer(metadataA.type);
|
// Note, none of the current negative changeType tests should fail the initial addSourceBuffer.
|
||||||
|
let sourceBuffer = mediaSource.addSourceBuffer(typeA);
|
||||||
|
|
||||||
|
// Add error event listeners to sourceBuffer. The caller of this helper may
|
||||||
|
// also have installed error event listeners on mediaElement.
|
||||||
|
if (negative_test) {
|
||||||
|
sourceBuffer.addEventListener("error", test.step_func_done());
|
||||||
|
} else {
|
||||||
|
sourceBuffer.addEventListener("error", test.unreached_func("Unexpected event 'error'"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// In either negative test or not, the first appendBuffer should succeed.
|
||||||
appendBuffer(test, sourceBuffer, dataA);
|
appendBuffer(test, sourceBuffer, dataA);
|
||||||
let lastStart = metadataA["start_time"];
|
let lastStart = metadataA["start_time"];
|
||||||
if (lastStart == null) {
|
if (lastStart == null) {
|
||||||
|
@ -144,7 +206,14 @@ function runChangeTypeTest(test, mediaElement, mediaSource, metadataA, dataA, me
|
||||||
test.waitForExpectedEvents(() => {
|
test.waitForExpectedEvents(() => {
|
||||||
let safeOffset = findSafeOffset(0.5, metadataA, lastStart, metadataB);
|
let safeOffset = findSafeOffset(0.5, metadataA, lastStart, metadataB);
|
||||||
lastStart = safeOffset["adjustedTime"];
|
lastStart = safeOffset["adjustedTime"];
|
||||||
sourceBuffer.changeType(metadataB.type);
|
if (!implicit_changetype) {
|
||||||
|
try { sourceBuffer.changeType(typeB); } catch(err) {
|
||||||
|
if (negative_test)
|
||||||
|
test.done();
|
||||||
|
else
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
sourceBuffer.timestampOffset = safeOffset["offset"];
|
sourceBuffer.timestampOffset = safeOffset["offset"];
|
||||||
appendBuffer(test, sourceBuffer, dataB);
|
appendBuffer(test, sourceBuffer, dataB);
|
||||||
});
|
});
|
||||||
|
@ -155,7 +224,14 @@ function runChangeTypeTest(test, mediaElement, mediaSource, metadataA, dataA, me
|
||||||
assert_less_than(lastStart, 1.0);
|
assert_less_than(lastStart, 1.0);
|
||||||
let safeOffset = findSafeOffset(1.0, metadataB, lastStart, metadataB);
|
let safeOffset = findSafeOffset(1.0, metadataB, lastStart, metadataB);
|
||||||
lastStart = safeOffset["adjustedTime"];
|
lastStart = safeOffset["adjustedTime"];
|
||||||
sourceBuffer.changeType(metadataB.type);
|
if (!implicit_changetype) {
|
||||||
|
try { sourceBuffer.changeType(typeB); } catch(err) {
|
||||||
|
if (negative_test)
|
||||||
|
test.done();
|
||||||
|
else
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
sourceBuffer.timestampOffset = safeOffset["offset"];
|
sourceBuffer.timestampOffset = safeOffset["offset"];
|
||||||
appendBuffer(test, sourceBuffer, dataB);
|
appendBuffer(test, sourceBuffer, dataB);
|
||||||
});
|
});
|
||||||
|
@ -167,7 +243,14 @@ function runChangeTypeTest(test, mediaElement, mediaSource, metadataA, dataA, me
|
||||||
let safeOffset = findSafeOffset(1.5, metadataB, lastStart, metadataA);
|
let safeOffset = findSafeOffset(1.5, metadataB, lastStart, metadataA);
|
||||||
// Retain the previous lastStart because the next block will append data
|
// Retain the previous lastStart because the next block will append data
|
||||||
// which begins between that start time and this block's start time.
|
// which begins between that start time and this block's start time.
|
||||||
sourceBuffer.changeType(metadataA.type);
|
if (!implicit_changetype) {
|
||||||
|
try { sourceBuffer.changeType(typeA); } catch(err) {
|
||||||
|
if (negative_test)
|
||||||
|
test.done();
|
||||||
|
else
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
sourceBuffer.timestampOffset = safeOffset["offset"];
|
sourceBuffer.timestampOffset = safeOffset["offset"];
|
||||||
appendBuffer(test, sourceBuffer, dataA);
|
appendBuffer(test, sourceBuffer, dataA);
|
||||||
});
|
});
|
||||||
|
@ -179,18 +262,27 @@ function runChangeTypeTest(test, mediaElement, mediaSource, metadataA, dataA, me
|
||||||
// Our next append will begin by overlapping some of metadataB, then some of
|
// Our next append will begin by overlapping some of metadataB, then some of
|
||||||
// metadataA.
|
// metadataA.
|
||||||
let safeOffset = findSafeOffset(1.3, metadataB, lastStart, metadataA);
|
let safeOffset = findSafeOffset(1.3, metadataB, lastStart, metadataA);
|
||||||
sourceBuffer.changeType(metadataA.type);
|
if (!implicit_changetype) {
|
||||||
|
try { sourceBuffer.changeType(typeA); } catch(err) {
|
||||||
|
if (negative_test)
|
||||||
|
test.done();
|
||||||
|
else
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
sourceBuffer.timestampOffset = safeOffset["offset"];
|
sourceBuffer.timestampOffset = safeOffset["offset"];
|
||||||
appendBuffer(test, sourceBuffer, dataA);
|
appendBuffer(test, sourceBuffer, dataA);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Trim duration to 2 seconds, then play through to end.
|
// Trim duration to 2 seconds, then play through to end.
|
||||||
test.waitForExpectedEvents(() => {
|
test.waitForExpectedEvents(() => {
|
||||||
trimBuffered(test, mediaElement, sourceBuffer, 2.1, 2);
|
// If negative testing, then skip fragile assertions.
|
||||||
|
trimBuffered(test, mediaElement, sourceBuffer, 2.1, 2, negative_test);
|
||||||
});
|
});
|
||||||
|
|
||||||
test.waitForExpectedEvents(() => {
|
test.waitForExpectedEvents(() => {
|
||||||
trimDuration(test, mediaElement, mediaSource, 2);
|
// If negative testing, then skip fragile assertions.
|
||||||
|
trimDuration(test, mediaElement, mediaSource, 2, negative_test);
|
||||||
});
|
});
|
||||||
|
|
||||||
test.waitForExpectedEvents(() => {
|
test.waitForExpectedEvents(() => {
|
||||||
|
@ -203,17 +295,56 @@ function runChangeTypeTest(test, mediaElement, mediaSource, metadataA, dataA, me
|
||||||
});
|
});
|
||||||
|
|
||||||
test.waitForExpectedEvents(() => {
|
test.waitForExpectedEvents(() => {
|
||||||
test.done();
|
if (negative_test)
|
||||||
|
assert_unreached("Received 'ended' while negative testing.");
|
||||||
|
else
|
||||||
|
test.done();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function mediaSourceChangeTypeTest(metadataA, metadataB, description) {
|
// options.use_relaxed_mime_types : boolean (defaults to false).
|
||||||
|
// If true, the initial addSourceBuffer and any changeType calls will use the
|
||||||
|
// relaxed_type in metadataA and metadataB instead of the full type in the
|
||||||
|
// metadata.
|
||||||
|
// options.implicit_changetype : boolean (defaults to false).
|
||||||
|
// If true, no changeType calls will be used. Instead, the test media files
|
||||||
|
// are expected to begin with an initialization segment and end at a segment
|
||||||
|
// boundary (no abort() call is issued by this test to reset the
|
||||||
|
// SourceBuffer's parser).
|
||||||
|
// options.negative_test : boolean (defaults to false).
|
||||||
|
// If true, the test is expected to hit error amongst one of the following
|
||||||
|
// areas: addSourceBuffer, appendBuffer (synchronous or asynchronous error),
|
||||||
|
// changeType, playback to end of buffered media. If 'ended' is received
|
||||||
|
// without error otherwise already occurring, then fail the test. Otherwise,
|
||||||
|
// pass the test on receipt of error. Continue to consider timeouts as test
|
||||||
|
// failures.
|
||||||
|
function mediaSourceChangeTypeTest(metadataA, metadataB, description, options = {}) {
|
||||||
mediasource_test((test, mediaElement, mediaSource) => {
|
mediasource_test((test, mediaElement, mediaSource) => {
|
||||||
|
let typeA = metadataA.type;
|
||||||
|
let typeB = metadataB.type;
|
||||||
|
if (options.hasOwnProperty("use_relaxed_mime_types") &&
|
||||||
|
options.use_relaxed_mime_types === true) {
|
||||||
|
typeA = metadataA.relaxed_type;
|
||||||
|
typeB = metadataB.relaxed_type;
|
||||||
|
}
|
||||||
|
let implicit_changetype = options.hasOwnProperty("implicit_changetype") &&
|
||||||
|
options.implicit_changetype === true;
|
||||||
|
let negative_test = options.hasOwnProperty("negative_test") &&
|
||||||
|
options.negative_test === true;
|
||||||
|
|
||||||
mediaElement.pause();
|
mediaElement.pause();
|
||||||
mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
|
if (negative_test) {
|
||||||
|
mediaElement.addEventListener("error", test.step_func_done());
|
||||||
|
} else {
|
||||||
|
mediaElement.addEventListener("error",
|
||||||
|
test.unreached_func("Unexpected event 'error'"));
|
||||||
|
}
|
||||||
MediaSourceUtil.loadBinaryData(test, metadataA.url, (dataA) => {
|
MediaSourceUtil.loadBinaryData(test, metadataA.url, (dataA) => {
|
||||||
MediaSourceUtil.loadBinaryData(test, metadataB.url, (dataB) => {
|
MediaSourceUtil.loadBinaryData(test, metadataB.url, (dataB) => {
|
||||||
runChangeTypeTest(test, mediaElement, mediaSource, metadataA, dataA, metadataB, dataB);
|
runChangeTypeTest(
|
||||||
|
test, mediaElement, mediaSource,
|
||||||
|
metadataA, typeA, dataA, metadataB, typeB, dataB,
|
||||||
|
implicit_changetype, negative_test);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}, description);
|
}, description);
|
||||||
|
|
|
@ -323,7 +323,9 @@
|
||||||
test.done = function()
|
test.done = function()
|
||||||
{
|
{
|
||||||
if (test.status == test.PASS) {
|
if (test.status == test.PASS) {
|
||||||
assert_false(test.eventExpectations_.expectingEvents(), "No pending event expectations.");
|
test.step(function() {
|
||||||
|
assert_false(test.eventExpectations_.expectingEvents(), "No pending event expectations.");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
oldTestDone();
|
oldTestDone();
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
<!doctype html>
|
||||||
|
<script>
|
||||||
|
window.addEventListener("message", e => {
|
||||||
|
window.top.postMessage(e.data, "*");
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<iframe src="secure-connection-test.html">
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
Connection: Keep-Alive
|
||||||
|
Content-Length: 170
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<!doctype html>
|
||||||
|
<script>
|
||||||
|
const entries = performance.getEntriesByType("navigation");
|
||||||
|
if (!entries) {
|
||||||
|
window.top.postMessage("FAIL - not supported", "*");
|
||||||
|
}
|
||||||
|
const entry = entries[0];
|
||||||
|
if (entry.secureConnectionStart != entry.fetchStart) {
|
||||||
|
window.top.postMessage("FAIL - unexpected secureConnectionStart value of " +
|
||||||
|
entry.secureConnectionStart + " does not equal " + entry.fetchStart, "*");
|
||||||
|
}
|
||||||
|
window.top.postMessage("PASS", "*");
|
||||||
|
</script>
|
|
@ -0,0 +1,15 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>Navigation Timing secureconnectionstart reuse</title>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script>
|
||||||
|
const t = async_test("Test that secureConnectionStart value is as expected when reused");
|
||||||
|
window.addEventListener("message", t.step_func_done(e => {
|
||||||
|
assert_equals(e.data, "PASS");
|
||||||
|
}));
|
||||||
|
</script>
|
||||||
|
<iframe src="resources/secure-connection-interim.html">
|
||||||
|
|
|
@ -580,7 +580,9 @@ class MockXRInputSource {
|
||||||
this.setGripOrigin(fakeInputSourceInit.gripOrigin);
|
this.setGripOrigin(fakeInputSourceInit.gripOrigin);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.gamepad_ = null;
|
// This properly handles if supportedButtons were not specified.
|
||||||
|
this.setSupportedButtons(fakeInputSourceInit.supportedButtons);
|
||||||
|
|
||||||
this.emulated_position_ = false;
|
this.emulated_position_ = false;
|
||||||
this.desc_dirty_ = true;
|
this.desc_dirty_ = true;
|
||||||
}
|
}
|
||||||
|
@ -633,6 +635,10 @@ class MockXRInputSource {
|
||||||
|
|
||||||
startSelection() {
|
startSelection() {
|
||||||
this.primary_input_pressed_ = true;
|
this.primary_input_pressed_ = true;
|
||||||
|
if (this.gamepad_) {
|
||||||
|
this.gamepad_.buttons[0].pressed = true;
|
||||||
|
this.gamepad_.buttons[0].touched = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
endSelection() {
|
endSelection() {
|
||||||
|
@ -642,12 +648,89 @@ class MockXRInputSource {
|
||||||
|
|
||||||
this.primary_input_pressed_ = false;
|
this.primary_input_pressed_ = false;
|
||||||
this.primary_input_clicked_ = true;
|
this.primary_input_clicked_ = true;
|
||||||
|
|
||||||
|
if (this.gamepad_) {
|
||||||
|
this.gamepad_.buttons[0].pressed = false;
|
||||||
|
this.gamepad_.buttons[0].touched = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
simulateSelect() {
|
simulateSelect() {
|
||||||
this.primary_input_clicked_ = true;
|
this.primary_input_clicked_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setSupportedButtons(supportedButtons) {
|
||||||
|
this.gamepad_ = null;
|
||||||
|
this.supported_buttons_ = [];
|
||||||
|
|
||||||
|
// If there are no supported buttons, we can stop now.
|
||||||
|
if (supportedButtons == null || supportedButtons.length < 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let supported_button_map = {};
|
||||||
|
this.gamepad_ = this.getEmptyGamepad();
|
||||||
|
for (let i = 0; i < supportedButtons.length; i++) {
|
||||||
|
let buttonType = supportedButtons[i].buttonType;
|
||||||
|
this.supported_buttons_.push(buttonType);
|
||||||
|
supported_button_map[buttonType] = supportedButtons[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Let's start by building the button state in order of priority:
|
||||||
|
// Primary button is index 0.
|
||||||
|
this.gamepad_.buttons.push({
|
||||||
|
pressed: this.primary_input_pressed_,
|
||||||
|
touched: this.primary_input_pressed_,
|
||||||
|
value: this.primary_input_pressed_ ? 1.0 : 0.0
|
||||||
|
});
|
||||||
|
|
||||||
|
// Now add the rest of our buttons
|
||||||
|
this.addGamepadButton(supported_button_map['grip']);
|
||||||
|
this.addGamepadButton(supported_button_map['touchpad']);
|
||||||
|
this.addGamepadButton(supported_button_map['thumbstick']);
|
||||||
|
this.addGamepadButton(supported_button_map['optional-button']);
|
||||||
|
this.addGamepadButton(supported_button_map['optional-thumbstick']);
|
||||||
|
|
||||||
|
// Finally, back-fill placeholder buttons/axes
|
||||||
|
for (let i = 0; i < this.gamepad_.buttons.length; i++) {
|
||||||
|
if (this.gamepad_.buttons[i] == null) {
|
||||||
|
this.gamepad_.buttons[i] = {
|
||||||
|
pressed: false,
|
||||||
|
touched: false,
|
||||||
|
value: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i=0; i < this.gamepad_.axes.length; i++) {
|
||||||
|
if (this.gamepad_.axes[i] == null) {
|
||||||
|
this.gamepad_.axes[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateButtonState(buttonState) {
|
||||||
|
if (this.supported_buttons_.indexOf(buttonState.buttonType) == -1) {
|
||||||
|
throw new Error("Tried to update state on an unsupported button");
|
||||||
|
}
|
||||||
|
|
||||||
|
let buttonIndex = this.getButtonIndex(buttonState.buttonType);
|
||||||
|
let axesStartIndex = this.getAxesStartIndex(buttonState.buttonType);
|
||||||
|
|
||||||
|
if (buttonIndex == -1) {
|
||||||
|
throw new Error("Unknown Button Type!");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.gamepad_.buttons[buttonIndex].pressed = buttonState.pressed;
|
||||||
|
this.gamepad_.buttons[buttonIndex].touched = buttonState.touched;
|
||||||
|
this.gamepad_.buttons[buttonIndex].value = buttonState.pressedValue;
|
||||||
|
|
||||||
|
if (axesStartIndex != -1) {
|
||||||
|
this.gamepad_.axes[axesStartIndex] = buttonState.xValue == null ? 0.0 : buttonState.xValue;
|
||||||
|
this.gamepad_.axes[axesStartIndex + 1] = buttonState.yValue == null ? 0.0 : buttonState.yValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Helpers for Mojom
|
// Helpers for Mojom
|
||||||
getInputSourceState() {
|
getInputSourceState() {
|
||||||
let input_state = new device.mojom.XRInputSourceState();
|
let input_state = new device.mojom.XRInputSourceState();
|
||||||
|
@ -696,6 +779,89 @@ class MockXRInputSource {
|
||||||
|
|
||||||
return input_state;
|
return input_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getEmptyGamepad() {
|
||||||
|
// Mojo complains if some of the properties on Gamepad are null, so set
|
||||||
|
// everything to reasonable defaults that tests can override.
|
||||||
|
let gamepad = new device.mojom.Gamepad();
|
||||||
|
gamepad.connected = true;
|
||||||
|
gamepad.id = "";
|
||||||
|
gamepad.timestamp = 0;
|
||||||
|
gamepad.axes = [];
|
||||||
|
gamepad.buttons = [];
|
||||||
|
gamepad.mapping = "xr-standard";
|
||||||
|
gamepad.display_id = 0;
|
||||||
|
|
||||||
|
switch (this.handedness_) {
|
||||||
|
case 'left':
|
||||||
|
gamepad.hand = device.mojom.GamepadHand.GamepadHandLeft;
|
||||||
|
break;
|
||||||
|
case 'right':
|
||||||
|
gamepad.hand = device.mojom.GamepadHand.GamepadHandRight;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
gamepad.hand = device.mojom.GamepadHand.GamepadHandNone;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return gamepad;
|
||||||
|
}
|
||||||
|
|
||||||
|
addGamepadButton(buttonState) {
|
||||||
|
if (buttonState == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let buttonIndex = this.getButtonIndex(buttonState.buttonType);
|
||||||
|
let axesStartIndex = this.getAxesStartIndex(buttonState.buttonType);
|
||||||
|
|
||||||
|
if (buttonIndex == -1) {
|
||||||
|
throw new Error("Unknown Button Type!");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.gamepad_.buttons[buttonIndex] = {
|
||||||
|
pressed: buttonState.pressed,
|
||||||
|
touched: buttonState.touched,
|
||||||
|
value: buttonState.pressedValue
|
||||||
|
};
|
||||||
|
|
||||||
|
// Add x/y value if supported.
|
||||||
|
if (axesStartIndex != -1) {
|
||||||
|
this.gamepad_.axes[axesStartIndex] = (buttonState.xValue == null ? 0.0 : buttonSate.xValue);
|
||||||
|
this.gamepad_.axes[axesStartIndex + 1] = (buttonState.yValue == null ? 0.0 : buttonSate.yValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// General Helper methods
|
||||||
|
getButtonIndex(buttonType) {
|
||||||
|
switch (buttonType) {
|
||||||
|
case 'grip':
|
||||||
|
return 1;
|
||||||
|
case 'touchpad':
|
||||||
|
return 2;
|
||||||
|
case 'thumbstick':
|
||||||
|
return 3;
|
||||||
|
case 'optional-button':
|
||||||
|
return 4;
|
||||||
|
case 'optional-thumbstick':
|
||||||
|
return 5;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getAxesStartIndex(buttonType) {
|
||||||
|
switch (buttonType) {
|
||||||
|
case 'touchpad':
|
||||||
|
return 0;
|
||||||
|
case 'thumbstick':
|
||||||
|
return 2;
|
||||||
|
case 'optional-thumbstick':
|
||||||
|
return 4;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mojo helper classes
|
// Mojo helper classes
|
||||||
|
|
|
@ -12,8 +12,31 @@
|
||||||
"webkitSpeechRecognitionError",
|
"webkitSpeechRecognitionError",
|
||||||
"webkitSpeechRecognitionEvent",
|
"webkitSpeechRecognitionEvent",
|
||||||
].forEach(name => {
|
].forEach(name => {
|
||||||
test(function() {
|
test(() => {
|
||||||
assert_false(name in window);
|
assert_false(name in window);
|
||||||
}, name + " interface should not exist");
|
}, `${name} interface should not exist`);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(() => {
|
||||||
|
if (!window.SpeechRecognition) {
|
||||||
|
// TODO(foolip): use `t.skip()` after
|
||||||
|
// https://github.com/web-platform-tests/rfcs/pull/16 is done.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
assert_false("serviceURI" in SpeechRecognition.prototype);
|
||||||
|
}, "SpeechRecognition's serviceURI attribute should not exist");
|
||||||
|
|
||||||
|
[
|
||||||
|
"interpretation",
|
||||||
|
"emma",
|
||||||
|
].forEach(name => {
|
||||||
|
test(() => {
|
||||||
|
if (!window.SpeechRecognitionEvent) {
|
||||||
|
// TODO(foolip): use `t.skip()` after
|
||||||
|
// https://github.com/web-platform-tests/rfcs/pull/16 is done.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
assert_false(name in SpeechRecognitionEvent.prototype);
|
||||||
|
}, `SpeechRecognitionEvent's ${name} attribute should not exist`);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Toast: slotting test reference</title>
|
||||||
|
<script type="module">
|
||||||
|
import 'std:elements/toast';
|
||||||
|
</script>
|
||||||
|
<p>Pass if the toast is displayed with the action button last.</p>
|
||||||
|
<std-toast open>First. Second. <button>Last.</button></std-toast>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Toast: slotting test</title>
|
||||||
|
<link rel="help" href="https://github.com/jackbsteinberg/std-toast">
|
||||||
|
<meta name="assert" content="Toast slots action button behind any text">
|
||||||
|
<link rel="match" href="toast-slotting-expected.html">
|
||||||
|
<script type="module">
|
||||||
|
import 'std:elements/toast';
|
||||||
|
</script>
|
||||||
|
<p>Pass if the toast is displayed with the action button last.</p>
|
||||||
|
<std-toast open>First. <button slot="action">Last.</button> Second. </std-toast>
|
|
@ -2,10 +2,10 @@ import { showToast, StdToastElement } from 'std:elements/toast';
|
||||||
|
|
||||||
// helper functions to keep tests from bleeding into each other
|
// helper functions to keep tests from bleeding into each other
|
||||||
|
|
||||||
const runTest = (testFn, name, toast) => {
|
const runTest = (testFn, name, toast, action) => {
|
||||||
try {
|
try {
|
||||||
test(() => {
|
test(() => {
|
||||||
testFn(toast);
|
testFn(toast, action);
|
||||||
}, name);
|
}, name);
|
||||||
} finally {
|
} finally {
|
||||||
toast.remove();
|
toast.remove();
|
||||||
|
@ -41,6 +41,17 @@ export const testShowToast = (testFn, name) => {
|
||||||
runTest(testFn, name, toast);
|
runTest(testFn, name, toast);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const testActionToast = (testFn, name) => {
|
||||||
|
const toast = new StdToastElement('Message', {});
|
||||||
|
const action = document.createElement('button');
|
||||||
|
action.setAttribute('slot', 'action');
|
||||||
|
action.textContent = 'action';
|
||||||
|
toast.appendChild(action);
|
||||||
|
document.querySelector('main').appendChild(toast);
|
||||||
|
|
||||||
|
runTest(testFn, name, toast, action);
|
||||||
|
};
|
||||||
|
|
||||||
export const assertToastShown = (toast) => {
|
export const assertToastShown = (toast) => {
|
||||||
assert_not_equals(window.getComputedStyle(toast).display, 'none');
|
assert_not_equals(window.getComputedStyle(toast).display, 'none');
|
||||||
assert_true(toast.hasAttribute('open'));
|
assert_true(toast.hasAttribute('open'));
|
||||||
|
@ -59,6 +70,20 @@ export const assertActionButtonOnToast = (action, toast) => {
|
||||||
assert_equals(action, toast.querySelector('button'));
|
assert_equals(action, toast.querySelector('button'));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const assertComputedStyleMapsEqual = (element1, element2) => {
|
||||||
|
assert_greater_than(element1.computedStyleMap().size, 0);
|
||||||
|
for (const [styleProperty, baseStyleValues] of element1.computedStyleMap()) {
|
||||||
|
const refStyleValues = element2.computedStyleMap().getAll(styleProperty);
|
||||||
|
assert_equals(baseStyleValues.length, refStyleValues.length, `${styleProperty} length`);
|
||||||
|
|
||||||
|
for (let i = 0; i < baseStyleValues.length; ++i) {
|
||||||
|
const baseStyleValue = baseStyleValues[i];
|
||||||
|
const refStyleValue = refStyleValues[i];
|
||||||
|
assert_equals(baseStyleValue.toString(), refStyleValue.toString(), `diff at value ${styleProperty}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class EventCollector {
|
export class EventCollector {
|
||||||
events = [];
|
events = [];
|
||||||
|
|
||||||
|
|
64
tests/wpt/web-platform-tests/std-toast/styles.html
Normal file
64
tests/wpt/web-platform-tests/std-toast/styles.html
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Toast: style tests</title>
|
||||||
|
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<script type="module">
|
||||||
|
import { testToastElement, assertComputedStyleMapsEqual } from './resources/helpers.js';
|
||||||
|
|
||||||
|
testToastElement((toast) => {
|
||||||
|
toast.open = true;
|
||||||
|
|
||||||
|
const mockToast = document.createElement('span');
|
||||||
|
mockToast.id = 'mock-toast-open';
|
||||||
|
mockToast.textContent = 'Message';
|
||||||
|
|
||||||
|
const mockStyler = document.createElement('style');
|
||||||
|
mockStyler.textContent = `
|
||||||
|
#mock-toast-open {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 1em;
|
||||||
|
right: 1em;
|
||||||
|
border: solid;
|
||||||
|
padding: 1em;
|
||||||
|
background: white;
|
||||||
|
color: black;
|
||||||
|
z-index: 1;
|
||||||
|
}`;
|
||||||
|
|
||||||
|
document.querySelector('main').appendChild(mockStyler);
|
||||||
|
document.querySelector('main').appendChild(mockToast);
|
||||||
|
|
||||||
|
assertComputedStyleMapsEqual(toast, mockToast);
|
||||||
|
}, 'the computed style map of an open unstyled toast is the same as a span given toast defaults');
|
||||||
|
|
||||||
|
testToastElement((toast) => {
|
||||||
|
const mockToast = document.createElement('span');
|
||||||
|
mockToast.id = 'mock-toast-hidden';
|
||||||
|
mockToast.textContent = 'Message';
|
||||||
|
|
||||||
|
const mockStyler = document.createElement('style');
|
||||||
|
mockStyler.textContent = `
|
||||||
|
#mock-toast-hidden {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 1em;
|
||||||
|
right: 1em;
|
||||||
|
border: solid;
|
||||||
|
padding: 1em;
|
||||||
|
background: white;
|
||||||
|
color: black;
|
||||||
|
z-index: 1;
|
||||||
|
display: none;
|
||||||
|
}`;
|
||||||
|
|
||||||
|
document.querySelector('main').appendChild(mockStyler);
|
||||||
|
document.querySelector('main').appendChild(mockToast);
|
||||||
|
|
||||||
|
assertComputedStyleMapsEqual(toast, mockToast);
|
||||||
|
}, 'the computed style map of a closed unstyled toast is the same as a span given toast defaults');
|
||||||
|
</script>
|
|
@ -100,6 +100,21 @@ promise_test(t => {
|
||||||
});
|
});
|
||||||
}, 'preventAbort should prevent aborting the readable');
|
}, 'preventAbort should prevent aborting the readable');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
const rs = recordingReadableStream(errorOnPull, hwm0);
|
||||||
|
const ws = recordingWritableStream();
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
abortController.abort();
|
||||||
|
return promise_rejects(t, 'AbortError', rs.pipeTo(ws, { signal, preventCancel: true, preventAbort: true }),
|
||||||
|
'pipeTo should reject')
|
||||||
|
.then(() => {
|
||||||
|
assert_equals(rs.events.length, 0, 'cancel should not be called');
|
||||||
|
assert_equals(ws.events.length, 0, 'writable should not have been aborted');
|
||||||
|
return ws.getWriter().ready;
|
||||||
|
});
|
||||||
|
}, 'preventCancel and preventAbort should prevent canceling the readable and aborting the readable');
|
||||||
|
|
||||||
promise_test(t => {
|
promise_test(t => {
|
||||||
const rs = new ReadableStream({
|
const rs = new ReadableStream({
|
||||||
start(controller) {
|
start(controller) {
|
||||||
|
|
|
@ -48,18 +48,18 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
|
||||||
**kwargs)
|
**kwargs)
|
||||||
executor_kwargs["close_after_done"] = True
|
executor_kwargs["close_after_done"] = True
|
||||||
capabilities = dict(DesiredCapabilities.CHROME.items())
|
capabilities = dict(DesiredCapabilities.CHROME.items())
|
||||||
capabilities["chromeOptions"] = {}
|
capabilities["goog:chromeOptions"] = {}
|
||||||
# required to start on mobile
|
# TODO(chrome): browser_channel should be properly supported.
|
||||||
capabilities["chromeOptions"]["androidPackage"] = "com.google.android.apps.chrome"
|
package_name = "com.android.chrome" # stable channel
|
||||||
|
# Required to start on mobile
|
||||||
|
capabilities["goog:chromeOptions"]["androidPackage"] = package_name
|
||||||
|
|
||||||
for (kwarg, capability) in [("binary", "binary"), ("binary_args", "args")]:
|
for (kwarg, capability) in [("binary", "binary"), ("binary_args", "args")]:
|
||||||
if kwargs[kwarg] is not None:
|
if kwargs[kwarg] is not None:
|
||||||
capabilities["chromeOptions"][capability] = kwargs[kwarg]
|
capabilities["goog:chromeOptions"][capability] = kwargs[kwarg]
|
||||||
if test_type == "testharness":
|
if test_type == "testharness":
|
||||||
capabilities["useAutomationExtension"] = False
|
capabilities["useAutomationExtension"] = False
|
||||||
capabilities["excludeSwitches"] = ["enable-automation"]
|
capabilities["excludeSwitches"] = ["enable-automation"]
|
||||||
if test_type == "wdspec":
|
|
||||||
capabilities["chromeOptions"]["w3c"] = True
|
|
||||||
executor_kwargs["capabilities"] = capabilities
|
executor_kwargs["capabilities"] = capabilities
|
||||||
return executor_kwargs
|
return executor_kwargs
|
||||||
|
|
||||||
|
@ -86,15 +86,17 @@ class ChromeAndroidBrowser(Browser):
|
||||||
self.server = ChromeDriverServer(self.logger,
|
self.server = ChromeDriverServer(self.logger,
|
||||||
binary=webdriver_binary,
|
binary=webdriver_binary,
|
||||||
args=webdriver_args)
|
args=webdriver_args)
|
||||||
|
self.setup_adb_reverse()
|
||||||
|
|
||||||
def _adb_run(self, args):
|
def _adb_run(self, args):
|
||||||
self.logger.info('adb ' + ' '.join(args))
|
self.logger.info('adb ' + ' '.join(args))
|
||||||
subprocess.check_call(['adb'] + args)
|
subprocess.check_call(['adb'] + args)
|
||||||
|
|
||||||
def setup(self):
|
def setup_adb_reverse(self):
|
||||||
self._adb_run(['wait-for-device'])
|
self._adb_run(['wait-for-device'])
|
||||||
self._adb_run(['forward', '--remove-all'])
|
self._adb_run(['forward', '--remove-all'])
|
||||||
self._adb_run(['reverse', '--remove-all'])
|
self._adb_run(['reverse', '--remove-all'])
|
||||||
|
# "adb reverse" forwards network connection from device to host.
|
||||||
for port in _wptserve_ports:
|
for port in _wptserve_ports:
|
||||||
self._adb_run(['reverse', 'tcp:%d' % port, 'tcp:%d' % port])
|
self._adb_run(['reverse', 'tcp:%d' % port, 'tcp:%d' % port])
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ promise_test(async t => {
|
||||||
];
|
];
|
||||||
|
|
||||||
for (let signal of invalidSignals) {
|
for (let signal of invalidSignals) {
|
||||||
await promise_rejects(t, new TypeError(), WakeLock.request('screen', { signal: signal }));
|
await promise_rejects(t, new TypeError(), WakeLock.request('system', { signal: signal }));
|
||||||
}
|
}
|
||||||
}, "'TypeError' is thrown when the signal option is not an AbortSignal");
|
}, "'TypeError' is thrown when the signal option is not an AbortSignal");
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ promise_test(t => {
|
||||||
abortController.abort();
|
abortController.abort();
|
||||||
assert_true(abortSignal.aborted);
|
assert_true(abortSignal.aborted);
|
||||||
|
|
||||||
return promise_rejects(t, "AbortError", WakeLock.request('screen', { signal: abortSignal }));
|
return promise_rejects(t, "AbortError", WakeLock.request('system', { signal: abortSignal }));
|
||||||
}, "A WakeLock request with an AbortSignal whose abort flag is set always aborts");
|
}, "A WakeLock request with an AbortSignal whose abort flag is set always aborts");
|
||||||
|
|
||||||
promise_test(async t => {
|
promise_test(async t => {
|
||||||
|
@ -33,8 +33,8 @@ promise_test(async t => {
|
||||||
abortController.abort();
|
abortController.abort();
|
||||||
assert_true(abortSignal.aborted);
|
assert_true(abortSignal.aborted);
|
||||||
|
|
||||||
const lock1 = WakeLock.request('screen', { signal: abortSignal });
|
const lock1 = WakeLock.request('system', { signal: abortSignal });
|
||||||
const lock2 = WakeLock.request('screen', { signal: abortSignal });
|
const lock2 = WakeLock.request('system', { signal: abortSignal });
|
||||||
const lock3 = WakeLock.request('system', { signal: abortSignal });
|
const lock3 = WakeLock.request('system', { signal: abortSignal });
|
||||||
|
|
||||||
await promise_rejects(t, "AbortError", lock1);
|
await promise_rejects(t, "AbortError", lock1);
|
||||||
|
|
|
@ -788,21 +788,31 @@ window.Audit = (function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compare against the expected sequence.
|
// Compare against the expected sequence.
|
||||||
for (let j = 0; j < this._expected.length; j++) {
|
let failMessage =
|
||||||
if (this._expected[j] !== indexedActual[j].value) {
|
'${actual} expected to have the value sequence of ${expected} but ' +
|
||||||
firstErrorIndex = indexedActual[j].index;
|
'got ';
|
||||||
passed = false;
|
if (this._expected.length === indexedActual.length) {
|
||||||
break;
|
for (let j = 0; j < this._expected.length; j++) {
|
||||||
|
if (this._expected[j] !== indexedActual[j].value) {
|
||||||
|
firstErrorIndex = indexedActual[j].index;
|
||||||
|
passed = false;
|
||||||
|
failMessage += this._actual[firstErrorIndex] + ' at index ' +
|
||||||
|
firstErrorIndex + '.';
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
passed = false;
|
||||||
|
let indexedValues = indexedActual.map(x => x.value);
|
||||||
|
failMessage += `${indexedActual.length} values, [${
|
||||||
|
indexedValues}], instead of ${this._expected.length}.`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return this._assert(
|
return this._assert(
|
||||||
passed,
|
passed,
|
||||||
'${actual} contains all the expected values in the correct order: ' +
|
'${actual} contains all the expected values in the correct order: ' +
|
||||||
'${expected}.',
|
'${expected}.',
|
||||||
'${actual} expected to have the value sequence of ${expected} but ' +
|
failMessage);
|
||||||
'got ' + this._actual[firstErrorIndex] + ' at index ' +
|
|
||||||
firstErrorIndex + '.');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -0,0 +1,117 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="resources/webxr_util.js"></script>
|
||||||
|
<script src="resources/webxr_test_constants.js"></script>
|
||||||
|
<canvas id="webgl-canvas"></canvas>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
let testName = "Input sources are re-created when handedness or target ray mode changes";
|
||||||
|
|
||||||
|
let watcherDone = new Event("watcherdone");
|
||||||
|
|
||||||
|
let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
|
||||||
|
|
||||||
|
let testFunction = function(session, fakeDeviceController, t) {
|
||||||
|
let eventWatcher = new EventWatcher(t, session, ["watcherdone"]);
|
||||||
|
let eventPromise = eventWatcher.wait_for(["watcherdone"]);
|
||||||
|
|
||||||
|
let inputChangeEvents = 0;
|
||||||
|
let cached_input_source = null;
|
||||||
|
function onInputSourcesChange(event) {
|
||||||
|
t.step(() => {
|
||||||
|
inputChangeEvents++;
|
||||||
|
assert_equals(event.session, session);
|
||||||
|
|
||||||
|
if (inputChangeEvents == 1) {
|
||||||
|
// The first change event should be adding our controller.
|
||||||
|
validateAdded(event.added, 1);
|
||||||
|
validateRemoved(event.removed, 0);
|
||||||
|
cached_input_source = getInputSources()[0];
|
||||||
|
assert_not_equals(cached_input_source, null);
|
||||||
|
assert_equals(cached_input_source.handedness, "none");
|
||||||
|
assert_equals(cached_input_source.targetRayMode, "gaze");
|
||||||
|
} else if (inputChangeEvents == 2) {
|
||||||
|
// The second event should be replacing the controller with one that has
|
||||||
|
// the updated target ray mode.
|
||||||
|
validateInputSourceChange(event, "none", "tracked-pointer");
|
||||||
|
cached_input_source = getInputSources()[0];
|
||||||
|
} else if (inputChangeEvents == 3) {
|
||||||
|
// The third event should be replacing the controller with one that has
|
||||||
|
// the updated handedness.
|
||||||
|
validateInputSourceChange(event, "left", "tracked-pointer");
|
||||||
|
session.dispatchEvent(watcherDone);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateInputSourceChange(event, expected_hand, expected_mode) {
|
||||||
|
validateAdded(event.added, 1);
|
||||||
|
validateRemoved(event.removed, 1);
|
||||||
|
assert_true(event.removed.includes(cached_input_source));
|
||||||
|
assert_false(event.added.includes(cached_input_source));
|
||||||
|
let source = event.added[0];
|
||||||
|
assert_equals(source.handedness, expected_hand);
|
||||||
|
assert_equals(source.targetRayMode, expected_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateAdded(added, length) {
|
||||||
|
t.step(() => {
|
||||||
|
assert_not_equals(added, null);
|
||||||
|
assert_equals(added.length, length,
|
||||||
|
"Added length matches expectations");
|
||||||
|
|
||||||
|
let currentSources = getInputSources();
|
||||||
|
added.forEach((source) => {
|
||||||
|
assert_true(currentSources.includes(source),
|
||||||
|
"Every element in added should be in the input source list");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateRemoved(removed, length) {
|
||||||
|
t.step(() => {
|
||||||
|
assert_not_equals(removed, null);
|
||||||
|
assert_equals(removed.length, length,
|
||||||
|
"Removed length matches expectations");
|
||||||
|
|
||||||
|
let currentSources = getInputSources();
|
||||||
|
removed.forEach((source) => {
|
||||||
|
assert_false(currentSources.includes(source),
|
||||||
|
"No element in removed should be in the input source list");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getInputSources() {
|
||||||
|
return Array.from(session.inputSources.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
session.addEventListener('inputsourceschange', onInputSourcesChange, false);
|
||||||
|
|
||||||
|
// Create a gaze based input source with no handedness that we can change
|
||||||
|
// to validate SameObject properties.
|
||||||
|
let input_source = fakeDeviceController.simulateInputSourceConnection({
|
||||||
|
handedness: "none",
|
||||||
|
targetRayMode: "gaze",
|
||||||
|
pointerOrigin: VALID_POINTER_TRANSFORM,
|
||||||
|
profiles: []
|
||||||
|
});
|
||||||
|
|
||||||
|
// Make our input source change after one frame, and wait an additional
|
||||||
|
// frame for that change to propogate.
|
||||||
|
// Two changes made in total.
|
||||||
|
session.requestAnimationFrame((time, xrFrame) => {
|
||||||
|
input_source.setTargetRayMode("tracked-pointer");
|
||||||
|
session.requestAnimationFrame((time, xrFrame) => {
|
||||||
|
input_source.setHandedness("left");
|
||||||
|
session.requestAnimationFrame((time, xrFrame) => {});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return eventPromise;
|
||||||
|
};
|
||||||
|
|
||||||
|
xr_session_promise_test(
|
||||||
|
testName, testFunction, fakeDeviceInitParams, 'immersive-vr');
|
||||||
|
</script>
|
|
@ -0,0 +1,96 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="resources/webxr_util.js"></script>
|
||||||
|
<script src="resources/webxr_test_constants.js"></script>
|
||||||
|
<canvas id="webgl-canvas"></canvas>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
let testName = "Transient input sources fire events in the right order";
|
||||||
|
|
||||||
|
let watcherDone = new Event("watcherdone");
|
||||||
|
|
||||||
|
let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
|
||||||
|
|
||||||
|
let testFunction = function(session, fakeDeviceController, t) {
|
||||||
|
let eventWatcher = new EventWatcher(
|
||||||
|
t, session, ["inputsourceschange", "selectstart", "select", "selectend", "watcherdone"]);
|
||||||
|
let eventPromise = eventWatcher.wait_for(
|
||||||
|
["inputsourceschange", "selectstart", "select", "selectend", "inputsourceschange", "watcherdone"]);
|
||||||
|
|
||||||
|
let inputChangeEvents = 0;
|
||||||
|
let cached_input_source = null;
|
||||||
|
function onInputSourcesChange(event) {
|
||||||
|
t.step(() => {
|
||||||
|
inputChangeEvents++;
|
||||||
|
assert_equals(event.session, session);
|
||||||
|
|
||||||
|
// The first change event should be adding our controller.
|
||||||
|
if (inputChangeEvents === 1) {
|
||||||
|
validateAdded(event.added, 1);
|
||||||
|
validateRemoved(event.removed, 0);
|
||||||
|
cached_input_source = session.inputSources[0];
|
||||||
|
assert_not_equals(cached_input_source, null);
|
||||||
|
} else if (inputChangeEvents === 2) {
|
||||||
|
// The second event should be removing our controller.
|
||||||
|
validateAdded(event.added, 0);
|
||||||
|
validateRemoved(event.removed, 1);
|
||||||
|
assert_true(event.removed.includes(cached_input_source));
|
||||||
|
session.dispatchEvent(watcherDone);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateAdded(added, length) {
|
||||||
|
t.step(() => {
|
||||||
|
assert_not_equals(added, null);
|
||||||
|
assert_equals(added.length, length,
|
||||||
|
"Added length matches expectations");
|
||||||
|
|
||||||
|
let currentSources = Array.from(session.inputSources.values());
|
||||||
|
added.forEach((source) => {
|
||||||
|
assert_true(currentSources.includes(source),
|
||||||
|
"Every element in added should be in the input source list");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateRemoved(removed, length) {
|
||||||
|
t.step(() => {
|
||||||
|
assert_not_equals(removed, null);
|
||||||
|
assert_equals(removed.length, length,
|
||||||
|
"Removed length matches expectations");
|
||||||
|
|
||||||
|
let currentSources = Array.from(session.inputSources.values());
|
||||||
|
removed.forEach((source) => {
|
||||||
|
assert_false(currentSources.includes(source),
|
||||||
|
"No element in removed should be in the input source list");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
session.addEventListener('inputsourceschange', onInputSourcesChange, false);
|
||||||
|
|
||||||
|
// Create our input source and immediately toggle the primary input so that
|
||||||
|
// it appears as already needing to send a click event when it appears.
|
||||||
|
let input_source = fakeDeviceController.simulateInputSourceConnection({
|
||||||
|
handedness: "right",
|
||||||
|
targetRayMode: "tracked-pointer",
|
||||||
|
pointerOrigin: VALID_POINTER_TRANSFORM,
|
||||||
|
profiles: [],
|
||||||
|
selectionClicked: true
|
||||||
|
});
|
||||||
|
|
||||||
|
// Make our input source disappear after one frame, and wait an additional
|
||||||
|
// frame for that disappearance to propogate.
|
||||||
|
session.requestAnimationFrame((time, xrFrame) => {
|
||||||
|
input_source.disconnect();
|
||||||
|
session.requestAnimationFrame((time, xrFrame) => {});
|
||||||
|
});
|
||||||
|
|
||||||
|
return eventPromise;
|
||||||
|
};
|
||||||
|
|
||||||
|
xr_session_promise_test(
|
||||||
|
testName, testFunction, fakeDeviceInitParams, 'immersive-vr');
|
||||||
|
</script>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue