Auto merge of #27702 - servo-wpt-sync:wpt_update_13-10-2020, r=servo-wpt-sync

Sync WPT with upstream (13-10-2020)

Automated downstream sync of changes from upstream as of 13-10-2020.
[no-wpt-sync]
r? @servo-wpt-sync
This commit is contained in:
bors-servo 2020-10-13 06:32:52 -04:00 committed by GitHub
commit 605c4b099a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
98 changed files with 1083 additions and 436 deletions

View file

@ -4,7 +4,7 @@
expected: TIMEOUT
[Opening a blob URL in a new window immediately before revoking it works.]
expected: TIMEOUT
expected: FAIL
[Fetching a blob URL immediately before revoking it works in an iframe.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-002.html]
[Hit test float]
expected: FAIL

View file

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

View file

@ -0,0 +1,2 @@
[inline-children-root-linebox-crash-001.html]
expected: ERROR

View file

@ -0,0 +1,2 @@
[inline-negative-margin-minmax-crash-001.html]
expected: ERROR

View file

@ -0,0 +1,2 @@
[abspos-inline-container-in-inline-block.html]
expected: ERROR

View file

@ -0,0 +1,2 @@
[text-decoration-color-selection-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[text-emphasis-unrepresentable-characters.html]
expected: ERROR

View file

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

View file

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

View file

@ -0,0 +1,2 @@
[is-where-not.html]
expected: ERROR

View file

@ -26,3 +26,9 @@
[After part with simple pseudo-class]
expected: FAIL
[Nested inside :not, without combinators]
expected: FAIL
[Nested inside :not, with combinators]
expected: FAIL

View file

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

View file

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

View file

@ -56,3 +56,9 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript error]
expected: FAIL
[separate text/javascript ]
expected: FAIL

View file

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

View file

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

View file

@ -0,0 +1,2 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,4 @@
[module-delayed.html]
[async document.write in a module]
expected: FAIL

View file

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

View file

@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL

View file

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

View file

@ -0,0 +1,16 @@
[xrSession_interactionMode.https.html]
[Tests interactionMode for a INLINE_SCREEN_DEVICE]
expected: FAIL
[Tests interactionMode for an VR_SCREEN_DEVICE]
expected: FAIL
[Tests interactionMode for an AR_SCREEN_DEVICE]
expected: FAIL
[Tests interactionMode for an AR_HMD_DEVICE]
expected: FAIL
[Tests interactionMode for an VR_HMD_DEVICE]
expected: FAIL

View file

@ -1,8 +1,8 @@
[shared-worker-in-data-url-context.window.html]
expected: TIMEOUT
[Create a shared worker in a data url frame]
expected: TIMEOUT
expected: FAIL
[Create a data url shared worker in a data url frame]
expected: NOTRUN
expected: TIMEOUT

View file

@ -7,7 +7,7 @@
expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.]
expected: TIMEOUT
expected: FAIL
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: TIMEOUT

View file

@ -166916,7 +166916,7 @@
]
],
"active-selection-021.html": [
"2061385d6c564c32ff2e36fc096df5b633d7ec2a",
"bfa7eee77706c3a64e5c3247c9aee1c46a457a7b",
[
null,
[
@ -170321,6 +170321,19 @@
]
},
"css-shadow-parts": {
"interaction-with-nested-pseudo-class.html": [
"1061e4b0e3501535d2bebf741e4986a2a6779c1a",
[
null,
[
[
"/css/css-shadow-parts/interaction-with-nested-pseudo-class-ref.html",
"=="
]
],
{}
]
],
"interaction-with-placeholder.html": [
"a064789f06111bf5ce791650207bcee195d346ab",
[
@ -189865,6 +189878,19 @@
{}
]
],
"text-decoration-color-selection-001.html": [
"beababcf4cd228fc40c2165ac3a410bc0aafd0d9",
[
null,
[
[
"/css/css-text-decor/reference/text-decoration-color-selection-001-ref.html",
"=="
]
],
{}
]
],
"text-decoration-color.html": [
"1e1353d9fa67ea6ef0019fc499dfeaafae65fe87",
[
@ -313426,7 +313452,7 @@
[]
],
"active-selection-021-ref.html": [
"7790a3fad8a36f1709fea6a4155ed5af0f3c49d7",
"a5d0e4e32a3545318320c734cb77bcd334078773",
[]
],
"active-selection-025-ref.html": [
@ -313868,6 +313894,10 @@
"6cce42664a64778f548edb53ec86ae61531812f0",
[]
],
"interaction-with-nested-pseudo-class-ref.html": [
"e3b99d43a69e6ff44899e6512237978883df06cf",
[]
],
"interaction-with-placeholder-ref.html": [
"11943c229a0ea76893039b1306bb38402c71f6ad",
[]
@ -318343,6 +318373,10 @@
"3ae7777ef06cf3fa3bebcf385d8462cf8453ae64",
[]
],
"text-decoration-color-selection-001-ref.html": [
"d9811874eef87fe37bf5173c0dccc380907cf439",
[]
],
"text-decoration-line-010-ref.xht": [
"6bcba28f191d03b2106131f27c7a2f88667cc9ca",
[]
@ -348325,7 +348359,7 @@
]
},
"lint.ignore": [
"5bcb811df36051225f60efa903f7f1e4cd7eda29",
"fe2933bb8a31cb7d5a8c39eee06626f1c7b261ac",
[]
],
"loading": {
@ -353417,7 +353451,7 @@
[]
],
"mock-imagecapture.js": [
"ce2b968391343339a9958100f564fa73d5c01509",
"a8f5c896b1f2cc2c90240bd053d218c28dc549dd",
[]
],
"mock-screenenumeration.js": [
@ -353477,7 +353511,7 @@
[]
],
"webxr-test.js": [
"6b6c41de0c4c1082affb2ec54208c326a755b425",
"a31bdc95eb6d5c7bca2a9085e94914f7e69051a4",
[]
],
"webxr-test.js.headers": [
@ -353656,6 +353690,10 @@
"aee3c002c948e01853a627e19698857d97fcc482",
[]
],
"no-title.html": [
"d8caa5f9c08ad2952b3d21f025e94b41f580a3d7",
[]
],
"order.html": [
"ec9978d898082193a11b646bc23e96f029f5ebe6",
[]
@ -353942,7 +353980,7 @@
[]
],
"testharness.js": [
"2c7dcd8df4aa59043cdd14d37ac9cb38f14c8e89",
"cf61b2ae273b0f9d543ad59557383ed11c5ac9a2",
[]
],
"testharness.js.headers": [
@ -358223,11 +358261,11 @@
[]
],
"cacert.key": [
"7b83e8f0e9ebe229c83335b3a2f0632540942ed2",
"3a3e487a83de0f5676e481e7240b68107b7ee34e",
[]
],
"cacert.pem": [
"a8ce54be5579b743001fa0de3c163129965d356c",
"e9b5fda55c380cf8850f4b94524b62055c9ca360",
[]
],
"config.json": [
@ -358235,11 +358273,11 @@
[]
],
"web-platform.test.key": [
"c4f5dc3f2cfba081e4536708c4667e7595e09d74",
"957dfb234f8b90ebb40a1fb48d58623875f2e03d",
[]
],
"web-platform.test.pem": [
"438f504b2b696757ea292e3c53ea0f0baa1fdd23",
"61d7e4d189266500efb379da960eafbb38aca530",
[]
]
},
@ -358920,7 +358958,7 @@
[]
],
"requirements_mypy.txt": [
"fae3597764cc04e1c35772efb7cec648bc6111a3",
"65100d70376cf614b4396dd242181394453efa49",
[]
],
"runner": {
@ -365175,7 +365213,7 @@
[]
],
"chrome_spki_certs.py": [
"289453bd080959445ea5a452362b05a7675735e4",
"c6e583581882dbabe817600b1f1047e48a0d1dcb",
[]
],
"edge.py": [
@ -370701,7 +370739,7 @@
[]
],
"webxr_test_constants.js": [
"139ab775684c427e39bc50719226c96fcbd3a5d5",
"40643d0c6abbd91a51a7940397eed90a9e91fa8f",
[]
],
"webxr_test_constants_fake_world.js": [
@ -422209,8 +422247,15 @@
{}
]
],
"is-where-not.html": [
"f3d27db317cee1316efaba3f89d8812f726f09c7",
[
null,
{}
]
],
"is-where-parsing.html": [
"33cb6ad726b8eef630d03ffbba243c066e004d3e",
"b93cbda6749b12d95bae28e05f27b0098ab6b7a1",
[
null,
{}
@ -475810,6 +475855,15 @@
{}
]
],
"radio-double-activate-pseudo.html": [
"287dc7d58edddacb3bd282eae8450f89f5128345",
[
null,
{
"testdriver": true
}
]
],
"radio-groupname-case.html": [
"3c54aca3e76bafe4c409ed33b7833dc982fea693",
[
@ -489188,14 +489242,14 @@
]
],
"MediaStreamTrack-applyConstraints-fast.html": [
"00c2f1274e8ff5bbed613337f6caed9cadc38439",
"5c5d3e119b77bd68cf90698bc89b943de92639d9",
[
null,
{}
]
],
"MediaStreamTrack-applyConstraints-getSettings.html": [
"2ae3a87af2312a5c9045a378f5bf6d9113c21baa",
"MediaStreamTrack-applyConstraints-getSettings.https.html": [
"db0e1ea09f212591de6b8c5895c402e4ef355983",
[
null,
{
@ -489203,8 +489257,8 @@
}
]
],
"MediaStreamTrack-applyConstraints-reject.html": [
"02ba251fc9f12265f58cd21b93875945700ed0c1",
"MediaStreamTrack-applyConstraints-reject.https.html": [
"395ef17ca8bb264191c1618669f9b6e4606cae26",
[
null,
{
@ -489212,8 +489266,8 @@
}
]
],
"MediaStreamTrack-applyConstraints.html": [
"3c5c05aefa05d878b07f927eea600af75598d497",
"MediaStreamTrack-applyConstraints.https.html": [
"e5466ede04a31abf483bf08b62609bea7f032716",
[
null,
{
@ -489228,8 +489282,8 @@
{}
]
],
"MediaStreamTrack-getCapabilities.html": [
"d0b7c2a3f204f3a108d7dc15696df2904373292c",
"MediaStreamTrack-getCapabilities.https.html": [
"8d22ad20949b4819b11c60e6ba86d01a91a5be67",
[
null,
{
@ -489237,11 +489291,13 @@
}
]
],
"MediaStreamTrack-getConstraints-fast.html": [
"06a09feecdd5bc72ce4a1643b98170e482549a70",
"MediaStreamTrack-getConstraints.https.html": [
"18cb9dba9780089598fcea26c0947f48aadf31ba",
[
null,
{}
{
"testdriver": true
}
]
],
"MediaStreamTrack-getSettings-fast.html": [
@ -489251,8 +489307,8 @@
{}
]
],
"MediaStreamTrack-getSettings.html": [
"747eff8937d923b25c72e2ecd3c18967905f71a1",
"MediaStreamTrack-getSettings.https.html": [
"907991d152240414528ce244f15cd0cd12b780f4",
[
null,
{
@ -533776,7 +533832,7 @@
]
],
"offlineaudiocontext-detached-execution-context.tentative.html": [
"ba44829f122d9ad0064b4b793578326c8190ce50",
"66d62cf6aa4e210b6fa2228b2ddfcd9724241d5b",
[
null,
{}
@ -542250,7 +542306,14 @@
]
],
"xrSession_environmentBlendMode.https.html": [
"da2ddc28d8dc8c4903b985dbe08f9ad034ef0f1b",
"28f31da7827abbb197f5d37fe4b4fbf78158fdcc",
[
null,
{}
]
],
"xrSession_interactionMode.https.html": [
"89cdc80132fb3dd4eb90fa477e280edc132912db",
[
null,
{}
@ -542259,7 +542322,7 @@
},
"dom-overlay": {
"ar_dom_overlay.https.html": [
"78a8ba2080a76f2e2ad0b1023e73e0eaa68fa052",
"250adf9b246b259c4d13804e5e465e35ae98b46f",
[
null,
{}
@ -568824,6 +568887,13 @@
}
},
"css-text-decor": {
"text-decoration-color-selection-002.html": [
"1ee903c08a45decef3206668b24726e064aa3369",
[
null,
{}
]
],
"text-decoration-visibility-001.xht": [
"1451ae9c6b5199bacb758f31b906a6753c1f99e4",
[

View file

@ -0,0 +1,4 @@
[hit-test-floats-002.html]
[Hit test float]
expected: FAIL

View file

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

View file

@ -0,0 +1,2 @@
[inline-children-root-linebox-crash-001.html]
expected: ERROR

View file

@ -0,0 +1,2 @@
[inline-negative-margin-minmax-crash-001.html]
expected: ERROR

View file

@ -0,0 +1,2 @@
[abspos-inline-container-in-inline-block.html]
expected: ERROR

View file

@ -0,0 +1,2 @@
[text-decoration-color-selection-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[text-emphasis-unrepresentable-characters.html]
expected: ERROR

View file

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

View file

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

View file

@ -0,0 +1,2 @@
[is-where-not.html]
expected: ERROR

View file

@ -26,3 +26,9 @@
[After part with simple pseudo-class]
expected: FAIL
[Nested inside :not, without combinators]
expected: FAIL
[Nested inside :not, with combinators]
expected: FAIL

View file

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

View file

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

View file

@ -56,3 +56,9 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript error]
expected: FAIL
[separate text/javascript ]
expected: FAIL

View file

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

View file

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

View file

@ -0,0 +1,2 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -1,4 +1,5 @@
[embedded-opener-remove-frame.html]
expected: CRASH
[opener and "removed" embedded documents]
expected: FAIL

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,4 @@
[module-delayed.html]
[async document.write in a module]
expected: FAIL

View file

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

View file

@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL

View file

@ -1,4 +0,0 @@
[offlineaudiocontext-detached-execution-context.tentative.html]
[Executing "decoding-on-detached-iframe"]
expected: FAIL

View file

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

View file

@ -0,0 +1,16 @@
[xrSession_interactionMode.https.html]
[Tests interactionMode for a INLINE_SCREEN_DEVICE]
expected: FAIL
[Tests interactionMode for an VR_SCREEN_DEVICE]
expected: FAIL
[Tests interactionMode for an AR_SCREEN_DEVICE]
expected: FAIL
[Tests interactionMode for an AR_HMD_DEVICE]
expected: FAIL
[Tests interactionMode for an VR_HMD_DEVICE]
expected: FAIL

View file

@ -1,8 +1,8 @@
[shared-worker-in-data-url-context.window.html]
expected: TIMEOUT
[Create a shared worker in a data url frame]
expected: TIMEOUT
expected: FAIL
[Create a data url shared worker in a data url frame]
expected: NOTRUN
expected: TIMEOUT

View file

@ -7,6 +7,7 @@
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
<link rel="help" href="https://www.w3.org/TR/css-pseudo-4/#highlight-styling">
<link rel="match" href="reference/active-selection-021-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<meta content="" name="flags">
@ -14,7 +15,7 @@
div
{
color: red;
font-size: 300%;
font: 25px/1 Ahem;
text-decoration: underline overline line-through;
}

View file

@ -5,12 +5,13 @@
<title>CSS Reftest Reference</title>
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
div
{
color: green;
font-size: 300%;
font: 25px/1 Ahem;
text-decoration: underline overline line-through;
}
</style>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<button style="color:green">Should be green on focus</button>

View file

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html class="reftest-wait">
<title>CSS Shadow Parts - Nested Pseudo Classes</title>
<link rel="help" href="https://drafts.csswg.org/css-shadow-parts" >
<link rel="help" href="https://drafts.csswg.org/selectors/#matches">
<link href="https://drafts.csswg.org/selectors/#matches" rel="help">
<link rel="match" href="interaction-with-nested-pseudo-class-ref.html">
<script src="/common/reftest-wait.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<style>
:root { color: red; }
::part(test):is(:focus) { color: green; }
</style>
<div id=host></div>
<script>
const root = host.attachShadow({mode: 'closed'});
root.innerHTML = '<button part=test>Should be green on focus</button>';
const button = root.querySelector('button');
button.addEventListener('focus', takeScreenshot);
test_driver.bless('focus button', () => button.focus());
</script>
</html>

View file

@ -0,0 +1,72 @@
<!DOCTYPE html>
<html>
<head>
<title>CSS Test: CSS3 text-decoration-color when |::selection| exists</title>
<style>
#transparent-fill {
-webkit-text-fill-color: transparent;
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: black;
}
.underline {
text-decoration: underline;
color: brown;
text-decoration-color: pink;
}
.overline {
text-decoration: overline;
color: purple;
text-decoration-color: skyblue;
}
.line-through {
text-decoration: line-through;
color: orange;
text-decoration-color: magenta;
}
.line-through::selection {
overflow: auto;
text-decoration-color: inherit;
}
.empty-selection-underline {
text-decoration: underline;
color: red;
text-decoration-color: blue;
}
.margin-bottom {
margin-bottom: 20px;
}
</style>
<script>
function startTest() {
var targetRange = document.createRange();
/* We first create an empty range */
targetRange.selectNodeContents(document.getElementById("wrapper"));
/* Then we set the range boundaries to the children of div#wrapper */
window.getSelection().addRange(targetRange);
/* Finally, we now select such range of content */
}
</script>
</head>
<body onload="startTest();">
<h3>Each line of this test should match its text decoration color description:</h3>
<!-- Test with text-fill-color and text-stroke-color values set -->
<div class="underline margin-bottom" id="transparent-fill" >Transparent fill with black stroke text and pink underline</div>
<!-- Valid values for underline, overline and line-through text decoration lines when selected-->
<div class="underline margin-bottom">Brown text with pink underline</div>
<div class="overline margin-bottom">Purple text with skyblue overline</div>
<div id="wrapper">
<div class="line-through margin-bottom">Orange text with magenta line-through</div>
<!-- When there is a selection but no |::selection| style exists. It should preserve the
style as it is. -->
<div class="empty-selection-underline margin-bottom">Red text with blue underline</div>
</div>
</body>
</html>

View file

@ -0,0 +1,81 @@
<!DOCTYPE html>
<html>
<head>
<title>CSS Test: CSS3 text-decoration-color when |::selection| exists</title>
<link rel="help" href="https://www.w3.org/TR/css-text-decor-3/#text-decoration-color-property">
<link rel="help" href="https://www.w3.org/TR/css-pseudo-4/#highlight-styling">
<link rel="match" href="reference/text-decoration-color-selection-001-ref.html">
<style>
#transparent-fill {
-webkit-text-fill-color: transparent;
-webkit-text-stroke-width: 1px;
-webkit-text-stroke-color: black;
}
.underline {
text-decoration: underline;
color: gray;
text-decoration-color: blue;
}
.overline {
text-decoration: overline;
color: green;
text-decoration-color: black;
}
.line-through {
text-decoration: line-through;
color: violet;
text-decoration-color: gold;
}
.underline::selection {
color: brown;
text-decoration-color: pink;
}
.overline::selection {
color: purple;
text-decoration-color: skyblue;
}
.line-through::selection {
color: orange;
text-decoration-color: magenta;
}
.empty-selection-underline {
text-decoration: underline;
color: red;
text-decoration-color: blue;
}
.margin-bottom {
margin-bottom: 20px;
}
</style>
<script>
function startTest() {
var targetRange = document.createRange();
/* We first create an empty range */
targetRange.selectNodeContents(document.getElementById("wrapper"));
/* Then we set the range boundaries to the children of div#wrapper */
window.getSelection().addRange(targetRange);
/* Finally, we now select such range of content */
}
</script>
</head>
<body onload="startTest();">
<h3>Each line of this test should match its text decoration color description:</h3>
<div id="wrapper">
<!-- Test with text-fill-color and text-stroke-color values set -->
<div class="underline margin-bottom" id="transparent-fill" >Transparent fill with black stroke text and pink underline</div>
<!-- Valid values for underline, overline and line-through text decoration lines when selected-->
<div class="underline margin-bottom">Brown text with pink underline</div>
<div class="overline margin-bottom">Purple text with skyblue overline</div>
<div class="line-through margin-bottom">Orange text with magenta line-through</div>
<!-- When there is a selection but no |::selection| style exists. It should preserve the
style as it is. -->
<div class="empty-selection-underline margin-bottom">Red text with blue underline</div>
</div>
</body>
</html>

View file

@ -0,0 +1,107 @@
<!DOCTYPE html>
<html>
<head>
<title>CSS Test: CSS3 text-decoration-color when |::selection| exists</title>
<link rel="help" href="https://www.w3.org/TR/css-text-decor-3/#text-decoration-color-property">
<link rel="help" href="https://www.w3.org/TR/css-pseudo-4/#highlight-styling">
<style>
.first-underline {
text-decoration: underline;
text-decoration-color: blue;
}
.second-underline {
text-decoration: underline;
text-decoration-color: gold;
}
.third-underline {
text-decoration: underline;
text-decoration-color: green;
}
.first-underline::selection {
text-decoration: underline;
text-decoration-color: pink;
}
.second-underline::selection {
text-decoration: underline;
text-decoration-color: violet;
}
.third-underline::selection {
text-decoration: underline;
text-decoration-color: skyblue;
}
.blue-underline {
text-decoration: underline;
text-decoration-color: blue;
}
.gold-overline {
text-decoration: overline;
text-decoration-color: gold;
}
.green-line-through {
text-decoration: line-through;
text-decoration-color: green;
}
.blue-underline::selection {
text-decoration: underline;
text-decoration-color: pink;
}
.gold-overline::selection {
text-decoration: overline;
text-decoration-color: violet;
}
.green-line-through::selection {
text-decoration: line-through;
text-decoration-color: skyblue;
}
</style>
<script>
function startTest() {
var targetRange = document.createRange();
/* We first create an empty range */
targetRange.selectNodeContents(document.getElementById("wrapper"));
/* Then we set the range boundaries to the children of div#wrapper */
window.getSelection().addRange(targetRange);
/* Finally, we now select such range of content */
}
</script>
</head>
<body onload="startTest();">
<div id="wrapper">
<h3>Each line of this test should match its text decoration color description:</h3>
<!-- Nested same text-decoration-line with different text-decoration-color.
It should be affected by their parent |::selection| -->
<div>
<span class="first-underline">
First pink underline
<span class="second-underline">
Second violet underline
<span class="third-underline">Third skyblue underline</span>
</span>
</span>
</div><br/>
<!-- Mix of underline, overline and line-through with different colors for each.
It should be affected by their parent |::selection| -->
<div>
<span class="blue-underline">
pink underline
<span class="green-line-through">
blue underline, skyblue line-through
<span class="gold-overline">blue underline, green line-through, violet overline</span>
</span>
</span>
</div><br/>
<!-- Test behavior on subscript and superscript text -->
<div>
<span class="green-line-through">
<sub class="gold-overline">subscript text, violet overline, green line-through</sub>
skyblue line-through
<sup class="blue-underline">superscript text, pink underline, green line-through</sup>
</span>
</div><br/>
</div>
</body>
</html>

View file

@ -0,0 +1,45 @@
<!DOCTYPE html>
<title>:is() inside :not()</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="help" href="https://drafts.csswg.org/selectors-4/#matches">
<link rel="help" href="https://drafts.csswg.org/selectors/#negation">
<main id=main>
<div id=a><div id=d></div></div>
<div id=b><div id=e></div></div>
<div id=c><div id=f></div></div>
</main>
<script>
function formatElements(elements) {
return elements.map(e => e.id).sort().join();
}
// Test that |selector| returns the given elements in #main.
function test_selector(selector, expected) {
test(function() {
let actual = Array.from(main.querySelectorAll(selector));
assert_equals(formatElements(actual), formatElements(expected));
}, `${selector} matches expected elements`);
}
test_selector(':not(:is(#a))', [b, c, d, e, f]);
test_selector(':not(:where(#b))', [a, c, d, e, f]);
test_selector(':not(:where(:root #c))', [a, b, d, e, f]);
test_selector(':not(:is(#a, #b))', [c, d, e, f]);
test_selector(':not(:is(#b div))', [a, b, c, d, f]);
test_selector(':not(:is(#a div, div + div))', [a, e, f]);
test_selector(':not(:is(span))', [a, b, c, d, e, f]);
test_selector(':not(:is(div))', []);
test_selector(':not(:is(*|div))', []);
test_selector(':not(:is(*|*))', []);
test_selector(':not(:is(*))', []);
test_selector(':not(:is(svg|div))', [a, b, c, d, e, f]);
test_selector(':not(:is(:not(div)))', [a, b, c, d, e, f]);
test_selector(':not(:is(span, b, i))', [a, b, c, d, e, f]);
test_selector(':not(:is(span, b, i, div))', []);
test_selector(':not(:is(#b ~ div div, * + #c))', [a, b, d, e]);
test_selector(':not(:is(div > :not(#e)))', [a, b, c, e]);
test_selector(':not(:is(div > :not(:where(#e, #f))))', [a, b, c, e, f]);
</script>

View file

@ -42,4 +42,7 @@
assert_valid(true, "{}(div) + bar", "Combinators after");
assert_valid(true, "::part(foo):is(:hover)", "After part with simple pseudo-class");
assert_valid(false, "::part(foo):is([attr='value'])", "After part with invalid selector after");
assert_valid(true, ":not({}(div))", "Nested inside :not, without combinators");
assert_valid(true, ":not({}(div .foo))", "Nested inside :not, with combinators");
</script>

View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<meta charset="utf-8">
<link rel="author" title="Joey Arhar" href="mailto:jarhar@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<!-- This behavior is not explicitly specified. -->
<input type=radio id=radioinput>
<script>
promise_test(async () => {
await test_driver.send_keys(radioinput, ' ');
await test_driver.send_keys(radioinput, ' ');
assert_equals(document.querySelector(':active'), null,
`If the radio doesn't have the :active pseudo selector, nothing else should either.`);
}, `<input type=radio> shouldn't have the :active pseudo element after pressing the spacebar twice.`);
</script>

View file

@ -265,10 +265,10 @@ GENERATE_TESTS: dom/traversal/TreeWalker.html
GENERATE_TESTS: domparsing/createContextualFragment.html
GENERATE_TESTS: domxpath/001.html
GENERATE_TESTS: domxpath/002.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-applyConstraints-reject.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getCapabilities.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getConstraints-fast.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getSettings.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-applyConstraints-reject.https.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getCapabilities.https.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getConstraints.https.html
GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getSettings.https.html
GENERATE_TESTS: mediacapture-image/setOptions-reject.html
GENERATE_TESTS: html/semantics/scripting-1/the-template-element/template-element/template-as-a-descendant.html
GENERATE_TESTS: html/syntax/parsing/Document.getElementsByTagName-foreign-01.html

View file

@ -59,21 +59,4 @@ promise_test(function(t) {
videoTrack.applyConstraints({advanced : [ {torch : true} ]}));
}, 'MediaStreamTrack.applyConstraints() with unsupported constraint');
// This test verifies that applyConstraints() rejects the returned Promise if
// passed mixed ImageCapture and non-ImageCapture constraints.
// TODO(mcasas): remove entirely after https://crbug.com/338503.
promise_test(function(t) {
var canvas = document.getElementById('canvas');
var context = canvas.getContext("2d");
context.fillStyle = "red";
context.fillRect(0, 0, 10, 10);
var stream = canvas.captureStream();
var videoTrack = stream.getVideoTracks()[0];
return promise_rejects_js(
t, OverconstrainedError,
videoTrack.applyConstraints({advanced : [ {width : 640, torch: true} ]}));
}, 'MediaStreamTrack.applyConstraints() with non Image-Capture constraint');
</script>

View file

@ -4,9 +4,6 @@
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script>
// This test verifies that the |constraints| configured in the mock Mojo
@ -16,11 +13,6 @@ image_capture_test(async t => {
await test_driver.set_permission({name: 'camera', panTiltZoom: true},
'granted', false);
let canvas = document.getElementById('canvas');
let context = canvas.getContext('2d');
context.fillStyle = 'red';
context.fillRect(0, 0, 10, 10);
const constraints = { advanced : [{ whiteBalanceMode : 'single-shot',
exposureMode : 'manual',
focusMode : 'single-shot',
@ -47,16 +39,9 @@ image_capture_test(async t => {
torch : true
}]};
let stream = canvas.captureStream();
let stream = await navigator.mediaDevices.getUserMedia({video: true});
let videoTrack = stream.getVideoTracks()[0];
// |videoTrack|'s capabilities gathering, just like the actual capture, is
// a process kicked off right after creation, we introduce a small delay
// to allow for those to be collected, since they are needed to understand
// which constraints are supported in applyConstraints().
// TODO(mcasas): this shouldn't be needed, https://crbug.com/711524.
await new Promise(resolve => step_timeout(resolve, 100));
try {
await videoTrack.applyConstraints(constraints);
} catch (error) {
@ -113,21 +98,9 @@ image_capture_test(async t => {
await test_driver.set_permission({name: 'camera', panTiltZoom: true},
'denied', false);
let canvas = document.getElementById('canvas');
let context = canvas.getContext('2d');
context.fillStyle = 'red';
context.fillRect(0, 0, 10, 10);
let stream = canvas.captureStream();
let stream = await navigator.mediaDevices.getUserMedia({video: true});
let videoTrack = stream.getVideoTracks()[0];
// |videoTrack|'s capabilities gathering, just like the actual capture, is
// a process kicked off right after creation, we introduce a small delay
// to allow for those to be collected, since they are needed to understand
// which constraints are supported in applyConstraints().
// TODO(mcasas): this shouldn't be needed, https://crbug.com/711524.
await new Promise(resolve => step_timeout(resolve, 100));
const constraints = [{ pan: 8 }, { tilt: 9 }];
await Promise.all(constraints.map(async constraint =>
promise_rejects_dom(

View file

@ -4,16 +4,8 @@
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script>
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
context.fillStyle = 'red';
context.fillRect(0, 0, 10, 10);
// This test verifies that MediaStreamTrack.applyConstraints() rejects if any
// passed constraint is unsupported or outside its allowed range.
var makePromiseTest = function(getConstraint) {
@ -23,16 +15,9 @@ var makePromiseTest = function(getConstraint) {
imageCaptureTest.mockImageCapture().state().supportsTorch = false;
let stream = canvas.captureStream();
let stream = await navigator.mediaDevices.getUserMedia({video: true});
let videoTrack = stream.getVideoTracks()[0];
// |videoTrack|'s capabilities gathering, just like the actual capture,
// is a process kicked off right after creation, we introduce a small
// delay to allow for those to be collected, since they are needed to
// understand which constraints are supported in applyConstraints().
// TODO(mcasas): this shouldn't be needed, https://crbug.com/711524.
await new Promise(resolve => step_timeout(resolve, 100));
try {
const constraints = {
advanced : [ getConstraint(imageCaptureTest.mockImageCapture().state()) ]

View file

@ -4,9 +4,6 @@
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script>
const meteringModeNames = ['none', 'manual', 'single-shot', 'continuous'];
@ -18,11 +15,6 @@ image_capture_test(async (t, imageCaptureTest) => {
await test_driver.set_permission({name: 'camera', panTiltZoom: true},
'granted', false);
let canvas = document.getElementById('canvas');
let context = canvas.getContext('2d');
context.fillStyle = 'red';
context.fillRect(0, 0, 10, 10);
const constraints = { advanced : [{ whiteBalanceMode : 'single-shot',
exposureMode : 'manual',
focusMode : 'single-shot',
@ -48,16 +40,9 @@ image_capture_test(async (t, imageCaptureTest) => {
torch : true
}]};
let stream = canvas.captureStream();
let stream = await navigator.mediaDevices.getUserMedia({video: true});
let videoTrack = stream.getVideoTracks()[0];
// |videoTrack|'s capabilities gathering, just like the actual capture, is
// a process kicked off right after creation, we introduce a small delay
// to allow for those to be collected, since they are needed to understand
// which constraints are supported in applyConstraints().
// TODO(mcasas): this shouldn't be needed, https://crbug.com/711524.
await new Promise(resolve => step_timeout(resolve, 100));
try {
await videoTrack.applyConstraints(constraints);
} catch (error) {

View file

@ -4,9 +4,6 @@
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script>
const meteringModeNames = ['none', 'manual', 'single-shot', 'continuous'];
@ -21,28 +18,17 @@ function makeImageCaptureTest(hasPanTiltZoomPermissionGranted) {
await test_driver.set_permission({name: 'camera', panTiltZoom: true},
ptzPermission, false);
let canvas = document.getElementById('canvas');
let context = canvas.getContext('2d');
context.fillStyle = 'red';
context.fillRect(0, 0, 10, 10);
let mockCapabilities = imageCaptureTest.mockImageCapture().state();
// |stream| must be created _after_ |mock| is constructed to give the
// latter time to override the bindings.
let stream = canvas.captureStream();
let stream = await navigator.mediaDevices.getUserMedia({video: true});
assert_equals(stream.getAudioTracks().length, 0);
assert_equals(stream.getVideoTracks().length, 1);
let videoTrack = stream.getVideoTracks()[0];
assert_equals(typeof videoTrack.getCapabilities, 'function');
// |videoTrack|'s capabilities gathering, just like the actual capture, is
// a process kicked off right after creation, we introduce a small delay
// to allow for those to be collected.
// TODO(mcasas): this shouldn't be needed, https://crbug.com/711524.
await new Promise(resolve => step_timeout(resolve, 100));
let capabilities = videoTrack.getCapabilities();
assert_equals(typeof capabilities, 'object');

View file

@ -1,77 +0,0 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script>
const constraints = { whiteBalanceMode : "manual",
exposureMode : "manual",
focusMode : "single-shot",
exposureCompensation : 133.77,
exposureTime : 10000, // in nano-seconds.
colorTemperature : 6000,
iso : 120.0,
brightness : 3,
contrast : 4,
saturation : 5,
sharpness : 6,
focusDistance : 7,
pan : 8,
tilt : 9,
zoom : 3.141592
// TODO: torch https://crbug.com/700607.
};
var canvas = document.getElementById('canvas');
var context = canvas.getContext("2d");
context.fillStyle = "red";
context.fillRect(0, 0, 10, 10);
// These tests verify that MediaStreamTrack.getConstraints() exists and that,
// returns the constraints passed beforehand with applyConstraints.
var makeAsyncTest = function(c) {
async_test(function(t) {
var stream = canvas.captureStream();
var videoTrack = stream.getVideoTracks()[0];
const constraintsIn = { advanced : [ c ]};
// Method applyConstraints() will fail since there is no Image Capture
// service in this Layout Test, but |constraintsIn| should be cached.
videoTrack.applyConstraints(constraintsIn)
.then(() => { /* ignore */ })
.catch((e) => { /* ignore */ })
.then(t.step_func(() => {
const constraintsOut = videoTrack.getConstraints();
assert_object_equals(constraintsOut, constraintsIn, "constraints");
// Clear constraints by sending an empty constraint set.
return videoTrack.applyConstraints({})
}))
.then(t.step_func(() => {
const constraintsOut = videoTrack.getConstraints();
assert_object_equals(constraintsOut, {}, "constraints");
t.done();
}));
});
};
// Send each line of |constraints| in turn and then the whole dictionary.
for (key in constraints) {
var one_constraint = {};
one_constraint[key] = constraints[key];
generate_tests(
makeAsyncTest,
[[ 'MediaStreamTrack.getConstraints(), key: ' + key, one_constraint ]]);
}
generate_tests(makeAsyncTest, [[
'MediaStreamTrack.getConstraints(), complete ', constraints
]]);
</script>

View file

@ -0,0 +1,63 @@
<!DOCTYPE html>
<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="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<script>
const constraints = { whiteBalanceMode : "single-shot",
exposureMode : "manual",
focusMode : "single-shot",
exposureCompensation : 133.77,
exposureTime : 10000, // in nano-seconds.
colorTemperature : 6000,
iso : 120.0,
brightness : 3,
contrast : 4,
saturation : 5,
sharpness : 6,
focusDistance : 7,
pan : 8,
tilt : 9,
zoom : 3.141592
// TODO: torch https://crbug.com/700607.
};
// These tests verify that MediaStreamTrack.getConstraints() exists and that,
// returns the constraints passed beforehand with applyConstraints.
function makePromiseTest(constraint) {
image_capture_test(async function(t) {
await test_driver.set_permission({name: 'camera', panTiltZoom: true},
'granted', false);
let stream = await navigator.mediaDevices.getUserMedia({video: true});
let videoTrack = stream.getVideoTracks()[0];
let constraintsIn = {advanced : [ constraint ]};
await videoTrack.applyConstraints(constraintsIn);
assert_object_equals(videoTrack.getConstraints(), constraintsIn, "constraints");
// Clear constraints by sending an empty constraint set.
await videoTrack.applyConstraints({});
assert_object_equals(videoTrack.getConstraints(), {}, "constraints");
});
};
// Send each line of |constraints| in turn and then the whole dictionary.
for (key in constraints) {
let one_constraint = {};
one_constraint[key] = constraints[key];
generate_tests(
makePromiseTest,
[[ 'MediaStreamTrack.getConstraints(), key: ' + key, one_constraint ]]);
}
generate_tests(makePromiseTest, [
["MediaStreamTrack.getConstraints(), complete ", constraints],
]);
</script>

View file

@ -4,9 +4,6 @@
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
<body>
<canvas id='canvas' width=10 height=10/>
</body>
<script>
const meteringModeNames = ['none', 'manual', 'single-shot', 'continuous'];
@ -22,16 +19,11 @@ function makeImageCaptureTest(hasPanTiltZoomPermissionGranted) {
await test_driver.set_permission({name: 'camera', panTiltZoom: true},
ptzPermission, false);
let canvas = document.getElementById('canvas');
let context = canvas.getContext('2d');
context.fillStyle = 'red';
context.fillRect(0, 0, 10, 10);
let mockSettings = imageCaptureTest.mockImageCapture().state();
// |stream| must be created _after_ |mock| is constructed to give the
// latter time to override the bindings.
let stream = canvas.captureStream();
let stream = await navigator.mediaDevices.getUserMedia({video: true});
let videoTrack = stream.getVideoTracks()[0];
// |videoTrack|s settings retrieval, just like the actual capture, is a

View file

@ -133,6 +133,7 @@ var ImageCaptureTest = (() => {
],
}
};
this.panTiltZoomPermissionStatus_ = null;
this.settings_ = null;
this.bindingSet_ = new mojo.BindingSet(media.mojom.ImageCapture);
}
@ -142,11 +143,24 @@ var ImageCaptureTest = (() => {
this.interceptor_.stop();
}
getPhotoState(source_id) {
return Promise.resolve(this.state_);
async getPhotoState(source_id) {
const shouldKeepPanTiltZoom = await this.isPanTiltZoomPermissionGranted();
if (shouldKeepPanTiltZoom)
return Promise.resolve(this.state_);
const newState = {...this.state_};
newState.state.pan = {};
newState.state.tilt = {};
newState.state.zoom = {};
return Promise.resolve(newState);
}
setOptions(source_id, settings) {
async setOptions(source_id, settings) {
const isAllowedToControlPanTiltZoom = await this.isPanTiltZoomPermissionGranted();
if (!isAllowedToControlPanTiltZoom &&
(settings.hasPan || settings.hasTilt || settings.hasZoom)) {
return Promise.resolve({ success: false });
}
this.settings_ = settings;
if (settings.hasIso)
this.state_.state.iso.current = settings.iso;
@ -219,6 +233,16 @@ var ImageCaptureTest = (() => {
});
}
async isPanTiltZoomPermissionGranted() {
if (!this.panTiltZoomPermissionStatus_) {
this.panTiltZoomPermissionStatus_ = await navigator.permissions.query({
name: "camera",
panTiltZoom: true
});
}
return this.panTiltZoomPermissionStatus_.state == "granted";
}
state() {
return this.state_.state;
}

View file

@ -341,6 +341,17 @@ class MockRuntime {
"immersive-ar": device.mojom.XRSessionMode.kImmersiveAr,
};
static environmentBlendModeToMojoMap = {
"opaque": device.mojom.XREnvironmentBlendMode.kOpaque,
"alpha-blend": device.mojom.XREnvironmentBlendMode.kAlphaBlend,
"additive": device.mojom.XREnvironmentBlendMode.kAdditive,
};
static interactionModeToMojoMap = {
"screen-space": device.mojom.XRInteractionMode.kScreenSpace,
"world-space": device.mojom.XRInteractionMode.kWorldSpace,
};
constructor(fakeDeviceInit, service) {
this.sessionClient_ = new device.mojom.XRSessionClientPtr();
this.presentation_provider_ = new MockXRPresentationProvider();
@ -419,6 +430,8 @@ class MockRuntime {
}
this.defaultFramebufferScale_ = default_framebuffer_scale;
this.enviromentBlendMode_ = this._convertBlendModeToEnum(fakeDeviceInit.environmentBlendMode);
this.interactionMode_ = this._convertInteractionModeToEnum(fakeDeviceInit.interactionMode);
// This appropriately handles if the coordinates are null
this.setBoundsGeometry(fakeDeviceInit.boundsCoordinates);
@ -441,6 +454,26 @@ class MockRuntime {
return sessionModes.map(mode => this._convertModeToEnum(mode));
}
_convertBlendModeToEnum(blendMode) {
if (blendMode in MockRuntime.environmentBlendModeToMojoMap) {
return MockRuntime.environmentBlendModeToMojoMap[blendMode];
} else {
if (this.supportedModes_.includes(device.mojom.XRSessionMode.kImmersiveAr)) {
return device.mojom.XREnvironmentBlendMode.kAdditive;
} else if (this.supportedModes_.includes(device.mojom.XRSessionMode.kImmersiveVr)) {
return device.mojom.XREnvironmentBlendMode.kOpaque;
}
}
}
_convertInteractionModeToEnum(interactionMode) {
if (interactionMode in MockRuntime.interactionModeToMojoMap) {
return MockRuntime.interactionModeToMojoMap[interactionMode];
} else {
return device.mojom.XRInteractionMode.kWorldSpace;
}
}
// Test API methods.
disconnect() {
this.service_.removeRuntime(this);
@ -1016,8 +1049,12 @@ class MockRuntime {
clientReceiver: clientReceiver,
displayInfo: this.displayInfo_,
enabledFeatures: enabled_features,
defaultFramebufferScale: this.defaultFramebufferScale_,
supportsViewportScaling: true
deviceConfig: {
defaultFramebufferScale: this.defaultFramebufferScale_,
supportsViewportScaling: true
},
enviromentBlendMode: this.enviromentBlendMode_,
interactionMode: this.interactionMode_
}
});
} else {

View file

@ -0,0 +1,79 @@
<!DOCTYPE HTML>
<html>
<head>
<meta name="variant" content="">
<meta name="variant" content="?keep-promise">
<title>Tests with no title</title>
<script src="../../variants.js"></script>
</head>
<script src="/resources/testharness.js"></script>
<body>
<h1>Tests with no title</h1>
<div id="log"></div>
<script>
test(function(){assert_true(true, '1')});
test(()=>assert_true(true, '2'));
test(() => assert_true(true, '3'));
test(() => {
assert_true(true, '4');
});
test(() => { assert_true(true, '5') });
test(() => { assert_true(true, '6') } );
test(() => { assert_true(true, '7'); });
</script>
<script type="text/json" id="expected">
{
"summarized_status": {
"status_string": "OK",
"message": null
},
"summarized_tests": [
{
"status_string": "PASS",
"name": "Tests with no title",
"properties": {},
"message": null
},
{
"status_string": "PASS",
"name": "assert_true(true, '2')",
"properties": {},
"message": null
},
{
"status_string": "PASS",
"name": "assert_true(true, '3')",
"properties": {},
"message": null
},
{
"status_string": "PASS",
"name": "Tests with no title 1",
"properties": {},
"message": null
},
{
"status_string": "PASS",
"name": "assert_true(true, '5')",
"properties": {},
"message": null
},
{
"status_string": "PASS",
"name": "assert_true(true, '6')",
"properties": {},
"message": null
},
{
"status_string": "PASS",
"name": "assert_true(true, '7')",
"properties": {},
"message": null
}
],
"type": "complete"
}
</script>
</body>
</html>

View file

@ -520,6 +520,30 @@ policies and contribution forms [3].
Object.prototype.toString.call(worker) == '[object ServiceWorker]';
}
function get_test_name(func, name)
{
if (name) {
return name;
}
if (func) {
var func_code = func.toString();
// Try and match with brackets, but fallback to matching without
var arrow = func_code.match(/^\(\)\s*=>\s*(?:{(.*)}\s*|(.*))$/);
// Check for JS line separators
if (arrow !== null && !/[\u000A\u000D\u2028\u2029]/.test(func_code)) {
var trimmed = (arrow[1] || arrow[2]).trim();
// drop a trailing ; if it's the only one
if (/^[^;]*;$/.test(trimmed)) trimmed = trimmed.substring(0, trimmed.length - 1);
return trimmed;
}
}
return test_environment.next_default_test_name();
}
/*
* API functions
*/
@ -530,7 +554,7 @@ policies and contribution forms [3].
tests.status.message = '`test` invoked after `promise_setup`';
tests.complete();
}
var test_name = name ? name : test_environment.next_default_test_name();
var test_name = get_test_name(func, name);
var test_obj = new Test(test_name, properties);
var value = test_obj.step(func, test_obj, test_obj);
@ -566,7 +590,7 @@ policies and contribution forms [3].
name = func;
func = null;
}
var test_name = name ? name : test_environment.next_default_test_name();
var test_name = get_test_name(func, name);
var test_obj = new Test(test_name, properties);
if (func) {
var value = test_obj.step(func, test_obj, test_obj);
@ -603,7 +627,7 @@ policies and contribution forms [3].
name = func;
func = null;
}
var test_name = name ? name : test_environment.next_default_test_name();
var test_name = get_test_name(func, name);
var test = new Test(test_name, properties);
test._is_promise_test = true;
@ -3797,7 +3821,7 @@ policies and contribution forms [3].
function get_title()
{
if ('document' in global_scope) {
//Don't use document.title to work around an Opera bug in XHTML documents
//Don't use document.title to work around an Opera/Presto bug in XHTML documents
var title = document.getElementsByTagName("title")[0];
if (title && title.firstChild && title.firstChild.data) {
return title.firstChild.data;

View file

@ -1,30 +1,30 @@
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIkaenDsgd4ocCAggA
MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECJAqFIqfz3yoBIIEyJzn9rsqRfFD
I75CcWTCXZM+f0oTgtBAmx2ZUVn46M9hOq1DGZo1QNcIV53MP+m3QPTwo2AZRsx+
Q0YobCtHqQRtl3WjLmpWZTA8W/f15A/+N0IQDZy+hxfrYgbhcgT9EhaRMs8NH5Iu
GaMCmZDNm0RborKLdAtR3EtlFI3WZPejVv5r9HRl6TDHBjpfM+nB3Its11OfUoKO
QZQyqiAzZpGmwkxPvPVDVk9kKwR6k5ypvANRNS73txQojfDUdLh/Zz2B136Qk8iZ
f42gI/jbZQD81BT+9t+kfI5BDPYocsGQHSZ/l55NcBPnE3TtfPBWMXJ2T2IrA6LN
x7C6J5GGwBZ2RYQnim/1tOc6lrx2iGRfBlJa360JfO7jNLyssnChLMeQ1t3KmEN8
ALxV9jMqN1w58px4qzbj4wVGHIEKb5o1/VhymhwuXBBYY4ztKKv9EKOu+ZMJfPtu
XILgXUuwnv1jetUXT+SbwVcGj4DoE+LSV7pB65jdmwQePH0icjkFmUXMVW/Pml/J
KBPuM4Ju4Wxt1+mLXp9maKICK3jJ8Gok2gi5x4axEHx3l8JOAIl+qA5gJ1N24yPl
1pkJcoEByU1pL32jtDMEn1Isf+pBl9vj5MdKs6EDh+ZrJhovc5puSDfENY1bv/Q6
IqzLu45TQX6MTqkmGoE8wMJ9MP6otLYEY836+gk5F1cdf9Yw/FiIS3oha8mzj9F3
BUKZj6ot5/q6Fcr9AQU94hwuJpl7iKAeR3DkDl26lVhbtxtZy0v18bXcqL+iFtMX
vlc8jAX2Aj8W5OgiAFq069W63Q9pa8HmkAQBoi62yRivJlcXpEoE0hn7en/Hmje1
58OoiSGHM7c+FyYqBzXJg7j+hU5gn2hKm+PQD+Vyic/TC9mOJozuuOSMd8F94/4q
2FX9wAyCsyfq6JtJZVjcLu/Xu1h8LfFEyFGDehL6wj1/T3+lkFjc06QY+m7giWmn
J7ksUZOvZcpV8Z2LGMPZf2h+oOgfQ2df2qKCGz/2e4w5cu3wlZqd3+CxJU9cephZ
KJl8NRd3LI8SCbVGS21/tRRj65d3jbHgkbN15zbyinWeoggCpKbK/04Pue3aHs77
NlmPVQyI6Pevl8eJM1YdXrbQCO0zXSg6FdUMm6ACknjRYXgD8rb8HLDj69M5mj5q
sCayfF0dsh20758w6E6BCtNo1RQyrvIc54SFWBXFwuxfpJmGgbp1jxQSx4ixRZ7i
zj3JHhlq8ldczaKqiRHhrr3utwVvH5+X9Yw8Bh9wzUrSOFu4TTMPfA7Dl+RjXxg2
ymX81nv8uSnLc9cnHptug/pIpJh6xBLMcl0rmT7h3hH0u3ahrnu+oAp+M3zNHrsa
kUxOYe8bn9X2fVqN5rKCQe8OEpczXgtjS5C2DErciIWJhqaUTg3lAfN9xuaz4/KC
4APc+d7aVMef1tsd3T9JaTdh2KxjgOzE3Af/d+VwOxFMv71+hUXF5zgK/bkg6LPk
VGiRcShSbM7VbcAaCBMqY/7gz1m134FglMWCVmv9GCDR4AdAlD9KlQ9q0cfGaNJS
jj86YIu3Z4kzd4pPsjy4bX9k9OOPZ/eO6oSDB2+LqFGn0vHj/zAxfEcWJDm30KhN
Nkbwd5VFFkXdiQmePxAiGA==
MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIRu7scI+V5ZQCAggA
MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECNDpjncoMek0BIIEyNdSEzeGgFTc
2mdljspg2028EFpD6wAK7XbcoA8WHN81qkJA4a4XQQFgp4RID7DQc95ELs4awMLu
SkY19F4VETrS0RvjPYIQkcOQMuPicVGrmH9cDptXv+IM24BuBXfj692B1ZNhE8Gd
tHlRpSiSga7ja1635mJ4lcZsNJHiDVpEI/aIy+Xy/G5hHFcg+S22w797tuKxG2MZ
PG9mnI1S/PF1KZbbJJZeZE2u60GxGQYiv3sOUOd4tNZqMLt2Nzo0JrjQJCwxFgFK
7EzRrN41G2IuSuSMSrn9CEADbvB1hgDWEgc8tW4jE28d9NhoiI+Lwzq33WBN6tyG
oJly36w8J0VNBqhqQSLzwAQ+ChT2/a59GJ4R5LvFCP2AxDGkag1iN5FdQ96aIoCA
zAevHtDNmGvj44qpkAiRlACiFjYXK7vR9ZiB+CIhe0dxm9kYCce9S2Du3541a//P
2YtfjScV3mma21e+xUMPzgNR+p8O9OY2DSMi3m56cXFfR5eoKAFvBUalOBjJu9Wp
k9dpLZlbE8qBd8plEjnq3ie3+DSkWOaq8KI4OeBa0ZyE6kRnC+2qYQ2aafGq/y5d
o8V/P9xpvZJfH/QsFpaQM9TP3biI8wdN1w+uU5ZX/g9zpgkVSBR4jVWbjmSdpcN8
IdVNIohLZDtSSGDA+yzG+T/3tloS7uB3dIQgjqINcJqp3l6W8chbjZoe2WDAJH6u
F+VthCo82dTgDpn+yPWsKNTyJc9B4bbCgHkZCjX0ENksJt22Oi9Bq2+uCU9RdKZ8
KxL37OlqAwLvDg8XgV/ox3lzcMmSR/Y1xY5XdUS4crsXcSZMtakEHlYt9U2s8SsH
WqdiUrdTC7YJHReJ/FhooEo9Tk4bfxJtSeOJMvzHkE14jRW/ovy1tYCpyJI7Q+Dy
9z++hi/DuNusWoHjw3KLOtPST2o/YduBPGBK88sPEVUIZXdJ/JLe1CQGb+1IuKxw
XADhNMIGW31i5uoaM7eVgRM5oZ6FUhK356vBgJVu39qStBuc8dq19lu0iOfgtVWY
WEQd7PuwJnZrcpz6YiPHTrtCDApPT53RnuYJgPlDGkW/yUkjZk8Qzcg4yes4zZaT
Zkts/BiGtQ4bgTkOZtwE8xCI+NZTnhWyIyMk+us2fSvJJGEsnBtJ8PO5XwoZvHxQ
DMP4MoaZt1/TV5TXMYel/shvpCWIbKFVG9npk3bomC2ApUJbNlrvOKrxS5vaVd1i
bZXigYZcynDYSsY4RI8jK3nSp2uR8C4YCaBU1ws0uj0ZAvY+SxuYSQTEs1eQd0ra
QMOlhmUAydHkP+kT2zUTYa4uFn2F/KMhQ/r2nAtpgG/wT6gYeOz5bi8bGl6+dfvU
9HT6JWFNOKaFVTVvlu32VGpe4nbUszVQlgXLu+1tHL4K0yRgLL6nGpLH31U4M9YV
T+aJGjCBEsH56ipMMy0Ke/NfJyfwG+HEkg9EXK+re+1zsm4vWI5Aru4eApN3Im+N
TnIE7y5OZCQEYgolZotzvPoXDAesofRpt2RoAMNIL/pRZZGKG+6bojq0AIrKi6rp
6y2nF3NjSjGBM8K2FIsj2ORchbGzw3zu4QOBsMfLO32/SheMhaytqPVt3Pkss5xb
ivBI1FNVMcGJYA9S+4ZF3Q==
-----END ENCRYPTED PRIVATE KEY-----

View file

@ -1,16 +1,16 @@
-----BEGIN CERTIFICATE-----
MIJAhzCCP2+gAwIBAgIDBsfzMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl
Yi1wbGF0Zm9ybS10ZXN0czAeFw0yMDA5MTIwMDI1MzBaFw0yMTA5MTIwMDI1MzBa
MIJAhzCCP2+gAwIBAgIDDeufMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl
Yi1wbGF0Zm9ybS10ZXN0czAeFw0yMDEwMTIwMDMwNDdaFw0yMTEwMTIwMDMwNDda
MB0xGzAZBgNVBAMMEndlYi1wbGF0Zm9ybS10ZXN0czCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBAJ4nWe+DDK0SJZPqgT0i9Cfx7Wg4v1vN+q4yh/sPNmQ+
wcNbSu7/UwzhBj4SsP/Wpu4DYpnsn19IW3sAsIpkeLvTNGJThV9uc63UHKuT12wx
LrXAVQogX7Ieou/WRKUUW+S6AMEP9Daa92UA0WPjlplW+l4HgDNStbXJEFF5zCZC
ZvVO7hI4CzZxbx/o0komKTEklKcSoigsSMs/n9DUWqd+rd6lVQRIqKbowPzs65C2
6BxT6YqVwD4QxGnRCv+T4EFxfT2GOmn9e5I3O6oN9pgOinzo8QG9ae9izhFHOnaG
+rgRWl430Djg9wQtv8BBSgxgT2swe6PYr9drE1w7Zi0CAwEAAaOCPc4wgj3KMAwG
A1UdEwQFMAMBAf8wHQYDVR0OBBYEFBItKeGCg0NYb1P7c2KraTOzvBwVMEcGA1Ud
IwRAMD6AFBItKeGCg0NYb1P7c2KraTOzvBwVoSGkHzAdMRswGQYDVQQDDBJ3ZWIt
cGxhdGZvcm0tdGVzdHOCAwbH8zALBgNVHQ8EBAMCAgQwgh+bBgNVHR4Egh+SMIIf
BQADggEPADCCAQoCggEBAOGkP/wDuZaB5F+dyDND3yegR0+uA/PsPzKcpALwjr6G
AkEWSqOp1H5pLtV0L+VuFJM7k9OhihrX9gQF3NG2oViUo8FY0u90NQUOFOpKaiol
pQEtC0nW7RJME9i6OqHp8oEVEUmTN3sgXnmLznO/EVpbjs7gEV8bdvIUeg224I9D
Ly7QcF90GHWHjp9SI7EbODhbE7oB07l55/ddTsjCQE32KAdzLMLrowIvfMHtGIG7
DKtEzM4muXaHJImDJdiXLdv64ZlbpwjwqhEzNBdfGhPnEqCqDK0/Gqn5VfS+UzcD
/uQrMWsoL/oUrwTztk2uI+zcKYCXooKlEvzAQmNlXmcCAwEAAaOCPc4wgj3KMAwG
A1UdEwQFMAMBAf8wHQYDVR0OBBYEFIFuwBVBQHcPDDoei++ltCM0KtQPMEcGA1Ud
IwRAMD6AFIFuwBVBQHcPDDoei++ltCM0KtQPoSGkHzAdMRswGQYDVQQDDBJ3ZWIt
cGxhdGZvcm0tdGVzdHOCAw3rnzALBgNVHQ8EBAMCAgQwgh+bBgNVHR4Egh+SMIIf
jqCCH4owE4IRd2ViLXBsYXRmb3JtLnRlc3QwF4IVb3A4LndlYi1wbGF0Zm9ybS50
ZXN0MBeCFW9wNy53ZWItcGxhdGZvcm0udGVzdDAXghVvcDkud2ViLXBsYXRmb3Jt
LnRlc3QwF4IVb3A0LndlYi1wbGF0Zm9ybS50ZXN0MBeCFW5vdC13ZWItcGxhdGZv
@ -337,11 +337,11 @@ d2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3dr
cnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCQXhuLS1uOGo2ZHM1M2x3d2ty
cWh2MjhhLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0
gkV4bi0tbjhqNmRzNTNsd3drcnFodjI4YS54bi0tbjhqNmRzNTNsd3drcnFodjI4
YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJKoZIhvcNAQELBQADggEBABJT/1Fz
fcRod/d4XOiprc0e64D9Ohd91E6grSPdIt/xEt5NEUY+E2F4RSuEYcznruGmnYjG
SqRaCk6GKRQRNopYH869EqvfvAuLwpL4ZhJZYlEkq2TVY9FHHyDIuSAZ0LbpNvcQ
68W1hIs9jEJX/WGnaJtOFqrEBY5Ep22+Elm1I+mJmsEbyiKvyw9ovZGGG0HnHODs
PwkQdfsNEgXnH2OcHZpDqt8xc9VWH2gNnJg2XfxfesUHcGhFY4joki+QiMdQRoHs
gc8D0R7QauBhc4NLWwat8EIRjKavmZvr+6QN2kGM4w/LYdX/JW121JWP5PbdwS29
aRxZsfc6+YK+O+k=
YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJKoZIhvcNAQELBQADggEBABV0Fdd4
mBYcpepIDsw0Rg9kVA1xrusuCBvJBmHEAiBT0BjPuPqKmVnSHeKKN9yPb+MoZpVV
p9sYK1dsvg7k7Ps9n/kUR5DaYXFS0L6C13ai9b8KSXbfcIpORj7khtw3q2c7mXBT
WJG773rl9d4JKgzUHxMxOssqWgFyVDI6iVIIKtwTcPgkwjIkzmSDXmzKG3U3y+G1
uusX8OITz2YbmE/gPUNEwUUb8wG2YvSxlql5oTltAmO0B7OLKxTJ6xb80/3NWt14
A1pe742p7fz2ECPBx/wHjvbFf2jkMgtRzWK1+A9aXAJnZnZhKBfW/MNP5J4AiRnY
ssVE+rp8r8RdHXg=
-----END CERTIFICATE-----

View file

@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDuGifF9hdWxBC2
YF7bXIO7xXEREIQw97SL8LEuc7gHfG+0PCya8YNsDssxVdf0xb9Z0XbP4ApKn+Vg
6aTiTHFYXrQdlyU/o5sVbC3dDInFA3BKBhDOIltHAqIcq1HlFJrq+5wheh+Wv22F
i2Ceix8cVImA6aJdWLVds/bSLQgLPR0Ez1EP2FHaXZCZvtgFXk2oym6oei1OopZB
l/AF9sOybD/U2cao6xIX6EIkwgLXrC+Bh7lJLKvX6I8nGKUF3KFwO5RsU50j7d5S
3U+38QsB8n46QNGgCMAWwe0GoVRnH3SVgR9zGVsS02NLUi3ciGzHnahjYP3Tj8wM
AR5KH+UbAgMBAAECggEBAIPNKrMklKrNActS8W9QeQOaOgqOL/7DP8gvRoVGPVq3
gUYuASsMAgnw7n2y3UZ7qH7ZuoE7rba9aEYLT+CNHDkkw2OV5WKi+BgVuBWi+Sh7
zM7NKMRStGBMjtx74WuDynXFLhpB9faGpOPF0Ygxztjp2uvnaJ9vmYXzNvAFSWye
KHfj72vFTvLsyrwhEMz0+t6pviiXTZdqTBkZbkbEUN73YQFEsiCNxzoL8SAn4klh
wFPJdC2AWGXd+FQYUkiYeoocGN01cSlVPCJgv7hwjPCM8ZPXwZWhUxg2RgQHgn8q
mbPzk8m3gCgrHh5pMmm/V0Zwm3Y4SAEqcmXn9zDtl2ECgYEA+Pw5vKogtT0OC2aK
SH4MRq9BU+LoC4XkoFilxvZ4n54hEwovau2f4l+fOhL37kWkzgMPHp15tfw3dhb4
9KUVI7Lu4eNqcjxa0FWnmLxaJMKVo4/fuD3283Fy3feT4p8m8gowUT4fT9PaAQY1
qwO6W2Y8KyAzb1EMDnjc0KYu5QkCgYEA9M9v3B901kPyi3IYZe/NYM7aUgluWodF
ge5+6oX7uRsjBeQZgRvXz+8/gswpYkh4anHwqm2uiyy6NrNIRqY5oYpjf1131e/7
rgkzKNqlscflHdbIw9Gg1PnPKb6qt/nBJtUebE7zOmaRIJq6ItPwB/8jsCm7zWqa
hbnohqbNBgMCgYEAxjt6dH03AVUU43rGSiUg/P33kyQq/1GgzxEFG72MF/k79/65
9fYuv3rGOOR1RN1p8yN4XDWge4XNWlW77Huqsvt5OZtoWn83BnvLrcz4MCBEJy8b
PYMIJJaEj7jXoyx3Q2ldQrGlGFdhUENzYy7apn5lFSjUCqKKaNNNa0mEOJECgYAU
Y1o7iNsgJRSEDIJ/qtL95vxDrMll/LILOiOTwIjQR7RI/1AocnsstA4kBIDF0KdG
piqW5v+MU7NGbvPr/lf6Xh4fM1eRl6TsP5PlKSB3h+BK9eJOfJzaX9ui7GAnZkNx
ynn4JzMWgAhCIOCzmdb5s4PzXeZoGyK3VF5LKIUWpQKBgFem49WIPYZwuJKO+Gjt
9CdlY5bUyb1z//lxpSxX99YWn4Azo5cNjKI5wo+k/0b7DT1grUqiviv50UxE7XoW
+0DZvgDXvWrr/7c92ARazNGr/gTe2D7TWyIKhyQ9Zrv1dH1NIEjouvXzkLsfB0tY
eiC3cV07lWvFpXUGIzkzIqpQ
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCru8v0H5Ka2NPG
WVV5Y0h9ER/9ynCLLSmy/jHjcvYtwNpAfSgHum1CbWze9yE7bNaQ9FXbA33V3cnh
0gzUyOK81yxcU5VkKpyNJcYFB/pjOMB66rS2QDR2PErJTduh1y3sX6JbK1aAQ8ac
SnFXMz2L28swmXgmFYmCxWHB8xVsPR5xqIav5cnjQyVfi7BlcZCUajExvugkEtjt
ckSZzBKmyLYWIjVcEIwUaapEyts1mEJL2qQHRoEHVskow12VuPOanIhpBcmrDIRl
pnThZuHZO/aOeKWG9sKFVfCORAUru+3/udXRbBLQLmpBZiWO8F1EuLNqUhsWx/bF
sn9630EPAgMBAAECggEAQad/NqpnYvmoJPl8Ovcg/GdyopUlZ5/xhDO4IOuPgDht
eCAhEKtOIAoziB5UvyJB+ZLfy+ZO0leDWejy7NqMDIP6uqVdxLihtziMttmw+QP2
WkempNJw/A7azJEOeZYJQYfiSxaLcGf440F2iU7WpcR2rvLNQ0oSk0Mgt4RWWVV4
FU4A9cgJ4++KhAtlCyskDG+ZoFEj4O93WXqaO/oF8Y/+mjD7xoLwm5o8U1E00FZQ
OQkJ26obLfOQRcbs3ZtLcqsbZl46DzmmG8Ddpdst2Y8hkeMPfI83i4xu2b5uj+wO
SZqwcHo4oRGEQEUj4WGnN9ZjVa9AWcDNAY63/FvT0QKBgQDWOwfYzsdG3/R3TQ0X
7Vq7tgYLDoWVFRs2O1vbE+/+f6zRyCo84IvKd4KFG/mlcZr6Odo6H2HSnQiRX4/w
LGjG+prAql90IODZljgYXEKuQeseHz6hHAL/k9gKHSOSmGmw5MmOw4TUuII0+oc+
5eArXjuu9SX2AC935ir3vYEQlwKBgQDNN5jxHORGdtJ92Yr/rkVUSRir5/7OhBjz
s2K60/hSHbWfejmWgGpqEEp9qHBYuXGPuORWR/A37qp61w3Hi3/Wp7nJcjn7sUQK
9phZ8BmmW2FIvC22J8ui33fjX/Vbbd4ihdBonf6G9fvpZ1kkU/n8co3dRdQkGNzI
IQ6kJMVqSQKBgQC8hjw0jluNwn33EsZn/Qdw0xFkX4YsmONWiUwfcd8sPp0OC7En
248JQLyKeQDrmBsDAzBJH97NIkYs8ETR3bLjEBxpWkUgA+L7eBerUF2Zzgajfml2
DBmTYj6nP9dTJW81LVE2olbdf/WNu76TGmZ4o7ewEqoyXx1mzRWY6JqQxwKBgQDC
0J/hbSML/asPi+BXnxHz1LyWHVQYqvChEU+NusLG+as8rSRUSq466CI/LhMRN2Km
JMinW/2gq3Kt0NAk+bovheRqZ4TB+mN04Op6nuNKuP8etH3Uqey4PtqqQKNE24UA
UvYpCqvhZU1zIwhN42azD/C6+ZpNdkjJuBAVJU8/+QKBgAgr39s68Zw8esPv3AmP
7Qx+D9hleD07xm3iHD0EU/WK3IW2TqUN2VpL3lpkucH3M0v1dm49+T3NQw524NJK
nfytgCa+RERmo8t/epJG6dWZgesUniiSvAckGriZjcsgOExYyHe7vu1dHOLeU2S/
NDKR7frgEU7EiGtNQEa8ucLD
-----END PRIVATE KEY-----

File diff suppressed because one or more lines are too long

View file

@ -1,3 +1,3 @@
mypy==0.782
mypy==0.790
mypy-extensions==0.4.3
typed-ast==1.4.1

View file

@ -2,7 +2,7 @@
# DO NOT EDIT MANUALLY.
# tools/certs/web-platform.test.pem
WPT_FINGERPRINT = 'Jjw17d8tPl/0TWUbC9g897DgEswu02sENyt5VUgT0wI='
WPT_FINGERPRINT = 'HaGjcmfWjcURDEnkUEWZ28YAkYo5tM12hxAMQ2Z3750='
# signed-exchange/resources/127.0.0.1.sxg.pem
SXG_WPT_FINGERPRINT = '0Rt4mT6SJXojEMHTnKnlJ/hBKMBcI4kteBlhR1eTTdk='

View file

@ -19,7 +19,7 @@
// Use the lowest value possible for the faster test.
let context =
new iframe.contentWindow.OfflineAudioContext(1, 1, 3000);
new iframe.contentWindow.OfflineAudioContext(1, 1, 8000);
document.body.removeChild(iframe);

View file

@ -21,4 +21,4 @@
assert_in_array(session.environmentBlendMode, ["opaque", "additive"]);
}, TRACKED_IMMERSIVE_DEVICE, 'immersive-vr', {});
</script>
</body>
</body>

View file

@ -0,0 +1,84 @@
<!DOCTYPE html>
<body>
<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></canvas>
<script>
const VR_HMD_DEVICE = {
supportsImmersive: true,
supportedModes: [ "immersive-vr"],
views: VALID_VIEWS,
viewerOrigin: IDENTITY_TRANSFORM,
supportedFeatures: ALL_FEATURES,
environmentBlendMode: "opaque",
interactionMode: "world-space"
};
xr_session_promise_test(
"Tests interactionMode for an VR_HMD_DEVICE",
(session) => {
assert_equals(session.interactionMode, "world-space");
}, VR_HMD_DEVICE, 'immersive-vr', {});
const VR_SCREEN_DEVICE = {
supportsImmersive: true,
supportedModes: [ "immersive-vr"],
views: VALID_VIEWS,
viewerOrigin: IDENTITY_TRANSFORM,
supportedFeatures: ALL_FEATURES,
environmentBlendMode: "opaque",
interactionMode: "screen-space"
};
xr_session_promise_test(
"Tests interactionMode for an VR_SCREEN_DEVICE",
(session) => {
assert_equals(session.interactionMode, "screen-space");
}, VR_SCREEN_DEVICE, 'immersive-vr', {});
const AR_HMD_DEVICE = {
supportsImmersive: true,
supportedModes: [ "immersive-ar"],
views: VALID_VIEWS,
viewerOrigin: IDENTITY_TRANSFORM,
supportedFeatures: ALL_FEATURES,
environmentBlendMode: "additive",
interactionMode: "world-space"
};
xr_session_promise_test(
"Tests interactionMode for an AR_HMD_DEVICE",
(session) => {
assert_equals(session.interactionMode, "world-space");
}, AR_HMD_DEVICE, 'immersive-ar', {});
const AR_SCREEN_DEVICE = {
supportsImmersive: true,
supportedModes: [ "immersive-ar"],
views: VALID_VIEWS,
viewerOrigin: IDENTITY_TRANSFORM,
supportedFeatures: ALL_FEATURES,
environmentBlendMode: "opaque",
interactionMode: "screen-space"
};
xr_session_promise_test(
"Tests interactionMode for an AR_SCREEN_DEVICE",
(session) => {
assert_equals(session.interactionMode, "screen-space");
}, AR_SCREEN_DEVICE, 'immersive-ar', {});
const INLINE_SCREEN_DEVICE = {
supportsImmersive: true,
supportedModes: [ "inline"],
views: VALID_VIEWS,
viewerOrigin: IDENTITY_TRANSFORM,
supportedFeatures: ALL_FEATURES,
environmentBlendMode: "opaque",
interactionMode: "screen-space"
};
xr_session_promise_test(
"Tests interactionMode for a INLINE_SCREEN_DEVICE",
(session) => {
assert_equals(session.interactionMode, "screen-space");
}, INLINE_SCREEN_DEVICE, 'inline', {});
</script>
</body>

View file

@ -39,6 +39,8 @@ const fakeDeviceInitParams = {
views: VALID_VIEWS,
viewerOrigin: IDENTITY_TRANSFORM,
supportedFeatures: ALL_FEATURES,
environmentBlendMode: "alpha-blend",
interactionMode: "screen-space"
};
let testBasicProperties = function(overlayElement, session, fakeDeviceController, t) {

View file

@ -132,7 +132,9 @@ const TRACKED_IMMERSIVE_DEVICE = {
supportedModes: [ "inline", "immersive-vr"],
views: VALID_VIEWS,
viewerOrigin: IDENTITY_TRANSFORM,
supportedFeatures: ALL_FEATURES
supportedFeatures: ALL_FEATURES,
environmentBlendMode: "opaque",
interactionMode: "world-space"
};
const IMMERSIVE_AR_DEVICE = {
@ -140,7 +142,9 @@ const IMMERSIVE_AR_DEVICE = {
supportedModes: [ "inline", "immersive-ar"],
views: VALID_VIEWS,
viewerOrigin: IDENTITY_TRANSFORM,
supportedFeatures: ALL_FEATURES
supportedFeatures: ALL_FEATURES,
environmentBlendMode: "additive",
interactionMode: "screen-space"
};
const VALID_NON_IMMERSIVE_DEVICE = {
@ -148,7 +152,9 @@ const VALID_NON_IMMERSIVE_DEVICE = {
supportedModes: ["inline"],
views: NON_IMMERSIVE_VIEWS,
viewerOrigin: IDENTITY_TRANSFORM,
supportedFeatures: ALL_FEATURES
supportedFeatures: ALL_FEATURES,
environmentBlendMode: "opaque",
interactionMode: "screen-space"
};
const VALID_CONTROLLER = {