mirror of
https://github.com/servo/servo.git
synced 2025-06-24 17:14:33 +01:00
Update web-platform-tests to revision a719147427a6934d24fe013c1251f7294e4afced
This commit is contained in:
parent
7bfa917931
commit
07ffb174a3
87 changed files with 979 additions and 194 deletions
|
@ -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
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-005.html]
|
||||
[Miss clipped float]
|
||||
expected: FAIL
|
||||
|
|
@ -2,3 +2,6 @@
|
|||
[Hit test intersecting scaled box]
|
||||
expected: FAIL
|
||||
|
||||
[Hit test within unscaled box]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[elementsFromPoint-invalid-cases.html]
|
||||
[The root element is the last element returned for otherwise empty queries within the viewport]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[offsetTopLeft-border-box.html]
|
||||
[container: 1]
|
||||
expected: FAIL
|
||||
|
||||
[container: 0]
|
||||
expected: FAIL
|
||||
|
|
@ -2,3 +2,9 @@
|
|||
[Tests support for EventController to cancel event listeners in addEventListener.]
|
||||
expected: FAIL
|
||||
|
||||
[Tests support for EventController to cancel capture event listeners in addEventListener.]
|
||||
expected: FAIL
|
||||
|
||||
[Passing an AbortSignal to addEventListener options should allow removing a listener]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,8 +2,130 @@
|
|||
expected: ERROR
|
||||
|
||||
[request-bad-port.any.html]
|
||||
expected: TIMEOUT
|
||||
[Request on bad port 6697 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 3659 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 554 should throw TypeError.]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Request on bad port 587 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 563 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 995 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 4045 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 1720 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6665 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6000 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 1723 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 993 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6666 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6667 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 556 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 601 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6668 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6669 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 2049 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 636 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
|
||||
[request-bad-port.any.worker.html]
|
||||
expected: TIMEOUT
|
||||
[Request on bad port 6697 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 3659 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 554 should throw TypeError.]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Request on bad port 587 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 563 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 995 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 4045 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 1720 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6665 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6000 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 1723 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 993 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6666 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6667 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 556 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 601 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6668 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6669 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 2049 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 636 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
|
||||
[request-bad-port.any.sharedworker.html]
|
||||
expected: ERROR
|
||||
|
|
|
@ -315,21 +315,18 @@
|
|||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
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>: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -53,3 +53,6 @@
|
|||
[combined text/javascript ]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_3.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_4.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
[supported-elements.html]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -10,7 +9,7 @@
|
|||
expected: FAIL
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: FAIL
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[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: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[form-double-submit-3.html]
|
||||
[<button> should have the same double-submit protection as <input type=submit>]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[module-delayed.html]
|
||||
[async document.write in a module]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[module-static-import-delayed.html]
|
||||
[document.write in an imported module]
|
||||
expected: FAIL
|
||||
|
|
@ -3,6 +3,3 @@
|
|||
[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
|
||||
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
[promise-job-entry-different-function-realm.html]
|
||||
expected: TIMEOUT
|
||||
[Fulfillment handler on fulfilled promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Rejection handler on pending-then-rejected promise]
|
||||
expected: FAIL
|
||||
|
||||
[Thenable resolution]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Rejection handler on rejected promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Fulfillment handler on pending-then-fulfilled promise]
|
||||
expected: FAIL
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[body-fills-html-quirk-vertical.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[body-fills-html-quirk.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[html-fills-viewport-quirk-vertical.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[html-fills-viewport-quirk.html]
|
||||
expected: FAIL
|
|
@ -281,3 +281,6 @@
|
|||
[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[28696\]\t1.9543942710671582e-15\t9.3139332532882690e-1\t9.3139332532882491e-1\t9.9999999999999789e-1\t3.8985999999999999e-3\n\t[28697\]\t7.0477002859115601e-1\t9.0675884485244751e-1\t2.0198881626129150e-1\t2.2275913536212616e-1\t3.8985999999999999e-3\n\tMax AbsError of 9.3139332532882491e-1 at index of 28696.\n\tMax RelError of 9.9999999999999789e-1 at index of 28696.\n]
|
||||
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[28696\]\t1.7767626257415612e-27\t9.3139332532882690e-1\t9.3139332532882690e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\t[28697\]\t7.0477002859115601e-1\t9.0675884485244751e-1\t2.0198881626129150e-1\t2.2275913536212616e-1\t3.8985999999999999e-3\n\tMax AbsError of 9.3139332532882690e-1 at index of 28696.\n\tMax RelError of 1.0000000000000000e+0 at index of 28696.\n]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[Worker-constructor.html]
|
||||
expected: ERROR
|
|
@ -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
|
||||
|
|
|
@ -128082,6 +128082,32 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"line-pushed-by-float-000.html": [
|
||||
"1df1c06cc144881a68760ed9031d65f9d9e48009",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"line-pushed-by-float-001.html": [
|
||||
"49b185349ee1c15b18d75349f1345149683c5548",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"margin-after-overflowed-block.html": [
|
||||
"26a2eb22aa69b134847dcb8cc3305625bd47100b",
|
||||
[
|
||||
|
@ -148927,6 +148953,45 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"replaced-alignment-with-aspect-ratio-001.tentative.html": [
|
||||
"d7ab97b9ec0091b7869b1fbb69e7317ced70cc20",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"replaced-alignment-with-aspect-ratio-002.tentative.html": [
|
||||
"1a4e344dd045806ed512d9e3562d9f3b96d1fbd8",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"replaced-alignment-with-aspect-ratio-003.tentative.html": [
|
||||
"2c27480d5a7a903e0d8301b8215190331022185f",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"self-baseline": {
|
||||
"grid-self-baseline-001.html": [
|
||||
"2473bb5d4fc8adc351af441bf39cffcacc076273",
|
||||
|
@ -169448,7 +169513,7 @@
|
|||
]
|
||||
],
|
||||
"selection-contenteditable-011.html": [
|
||||
"4f5670111b49594ae639c4706e4ebfb7864d17ee",
|
||||
"bc01d103ea9bfd41ab40f3ad6a429266cd29bef8",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -249849,7 +249914,7 @@
|
|||
},
|
||||
"quirks": {
|
||||
"body-fills-html-quirk-float.html": [
|
||||
"19438bc1bf35b2c4fe674ccaabb7ef32331c50a1",
|
||||
"c1fdd16ac0bb1303a9b89de045f99d43946db8d5",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -249862,7 +249927,7 @@
|
|||
]
|
||||
],
|
||||
"body-fills-html-quirk-inline.html": [
|
||||
"4f15bb97c94219e566ad3c992ad37894f9d40e62",
|
||||
"82dc7a6171941b0c1149e7b14e9dcd5f2ccbca23",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -249875,7 +249940,7 @@
|
|||
]
|
||||
],
|
||||
"body-fills-html-quirk-positioned.html": [
|
||||
"3ce416dd95cbc288318079c70890f5febc59a174",
|
||||
"f46caddc7800fd924c90f1fd969125e14e53b6ac",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -249887,6 +249952,32 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"body-fills-html-quirk-vertical.html": [
|
||||
"485c14d35e04fa4b3945f27f4a2741d477c208ab",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/quirks/body-fills-html-quirk-ref2.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"body-fills-html-quirk.html": [
|
||||
"83ccea7dca326911c48bf20d2b32c66e0e50a714",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/quirks/body-fills-html-quirk-ref2.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"dd-dl-firefox-001.html": [
|
||||
"96fc76f08f45b800f5e210aee135bf880f8f2d32",
|
||||
[
|
||||
|
@ -249928,6 +250019,32 @@
|
|||
]
|
||||
]
|
||||
},
|
||||
"html-fills-viewport-quirk-vertical.html": [
|
||||
"a7c79b9b79315e8edf3d2d8fa86e0c63de526cae",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/quirks/html-fills-viewport-quirk-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"html-fills-viewport-quirk.html": [
|
||||
"892fe489a2b2eda2edefa958a0b8634867fff4b6",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/quirks/html-fills-viewport-quirk-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"line-height-in-list-item.tentative.html": [
|
||||
"be655e51fc8f84d2d34930414de5428412f98b5b",
|
||||
[
|
||||
|
@ -315576,7 +315693,7 @@
|
|||
[]
|
||||
],
|
||||
"selection-contenteditable-011-ref.html": [
|
||||
"0677a4b6b39f26aa4b3acc7480240b9d061e4929",
|
||||
"c13bf4d84c524541f4112cd6ff07f92f641b8901",
|
||||
[]
|
||||
],
|
||||
"selection-input-011-ref.html": [
|
||||
|
@ -350036,7 +350153,7 @@
|
|||
[]
|
||||
],
|
||||
"mediacapture-streams.idl": [
|
||||
"5532cf64671295ca52eb9904450c683ba8b14dd5",
|
||||
"7cf6b5807a73c579470187bb6a142121d47935bb",
|
||||
[]
|
||||
],
|
||||
"mediasession.idl": [
|
||||
|
@ -354216,7 +354333,11 @@
|
|||
[]
|
||||
],
|
||||
"body-fills-html-quirk-ref.html": [
|
||||
"180afbb84f8444aa4d83342e5679dfda26754acb",
|
||||
"d4da87bd9ff5eb753ea92aed5c68509b5efa39b8",
|
||||
[]
|
||||
],
|
||||
"body-fills-html-quirk-ref2.html": [
|
||||
"68ceb2b8b16c73c419299ea36eed0bd0ca41113c",
|
||||
[]
|
||||
],
|
||||
"dd-dl-firefox-001-ref.html": [
|
||||
|
@ -354243,6 +354364,10 @@
|
|||
]
|
||||
}
|
||||
},
|
||||
"html-fills-viewport-quirk-ref.html": [
|
||||
"2d93fff41721d5a6d2fa43ad9b819cd86ebf3c95",
|
||||
[]
|
||||
],
|
||||
"line-height-trailing-collapsable-whitespace-ref.html": [
|
||||
"92c3b3c3ca0cd3eb019f72942eb8218b8dc9b4da",
|
||||
[]
|
||||
|
@ -368614,7 +368739,7 @@
|
|||
[]
|
||||
],
|
||||
"utils.py": [
|
||||
"f9ed3eaebd67f3fe3bab1961ff93f4053dfc58e4",
|
||||
"347acbd15cd0de5de8d8d73f3720fc8c13ac443a",
|
||||
[]
|
||||
],
|
||||
"wptserve.py": [
|
||||
|
@ -402422,7 +402547,7 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"content-visibility-077.tentative.html": [
|
||||
"content-visibility-077.html": [
|
||||
"7cc9a335035678f9cf9f0514eaf700198553f889",
|
||||
[
|
||||
null,
|
||||
|
@ -426696,7 +426821,7 @@
|
|||
"dom": {
|
||||
"abort": {
|
||||
"addEventListenerAbortController.tentative.html": [
|
||||
"36373507c192c2f642165772facae1e308ac289d",
|
||||
"d208d4b0d6c5765d73ae61432f5a440811a5e623",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -448220,7 +448345,7 @@
|
|||
]
|
||||
},
|
||||
"request-bad-port.any.js": [
|
||||
"8614192f84ea2c2d1fd995809c040c73f3eada81",
|
||||
"b1a9e93d13cdf39e26eb777781ea690aba708bed",
|
||||
[
|
||||
"fetch/api/request/request-bad-port.any.html",
|
||||
{
|
||||
|
@ -494258,6 +494383,15 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"textEditCommands.html": [
|
||||
"0bc533ecb035288d3094832b5641a538cd97c983",
|
||||
[
|
||||
null,
|
||||
{
|
||||
"testdriver": true
|
||||
}
|
||||
]
|
||||
],
|
||||
"touchPointerEventProperties.html": [
|
||||
"b636dfde7970fa33a1392c62e0bfed36006f79f4",
|
||||
[
|
||||
|
@ -498818,14 +498952,14 @@
|
|||
]
|
||||
],
|
||||
"GUM-deny.https.html": [
|
||||
"be1caf54d61d5b00253b5ffac8f520431f4e0c8b",
|
||||
"1f864e3cd14bfc7ca5b0a78f7fc2dde36b3485da",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"GUM-empty-option-param.https.html": [
|
||||
"9f79a6dca6d04aa7e293129ade88573dd32eab7c",
|
||||
"f9778b723a98c605dbed31032039910f98a9291b",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -498874,7 +499008,7 @@
|
|||
]
|
||||
],
|
||||
"GUM-unknownkey-option-param.https.html": [
|
||||
"965145a2b1905dc3f21740913be460c4970ce5a8",
|
||||
"4a8eaada16f8b646f2cf556794a1f910271f2825",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -499079,7 +499213,7 @@
|
|||
]
|
||||
],
|
||||
"idlharness.https.window.js": [
|
||||
"b10e8dbb046d656e4b06c3572fb4ee069c9e0897",
|
||||
"41d4e1db8b639d2569b5c0f2f4142da71d62f84d",
|
||||
[
|
||||
"mediacapture-streams/idlharness.https.window.html",
|
||||
{
|
||||
|
@ -520259,7 +520393,7 @@
|
|||
]
|
||||
],
|
||||
"getdisplaymedia.https.html": [
|
||||
"aae81d2f823944d5a718b6419e5267119f66fefc",
|
||||
"530deb234a1f743a0ffd122671e8575a660dbe13",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -545731,7 +545865,7 @@
|
|||
]
|
||||
],
|
||||
"RTCPeerConnection-getStats.https.html": [
|
||||
"ede0ab1efc10799d12473437e53f2ec555aa625f",
|
||||
"1fc4a2520adac4c5682bf70228dbbd434965eb85",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -547095,7 +547229,7 @@
|
|||
]
|
||||
],
|
||||
"Create-blocked-port.any.js": [
|
||||
"0ac5b62017087ed53a86f7905de0932c8c934072",
|
||||
"84728c0e5675900bb6a0457196d5aee3629a8699",
|
||||
[
|
||||
"websockets/Create-blocked-port.any.html",
|
||||
{
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-005.html]
|
||||
[Miss clipped float]
|
||||
expected: FAIL
|
||||
|
|
@ -2,3 +2,6 @@
|
|||
[Hit test intersecting scaled box]
|
||||
expected: FAIL
|
||||
|
||||
[Hit test within unscaled box]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[elementsFromPoint-invalid-cases.html]
|
||||
[The root element is the last element returned for otherwise empty queries within the viewport]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[offsetTopLeft-border-box.html]
|
||||
[container: 1]
|
||||
expected: FAIL
|
||||
|
||||
[container: 0]
|
||||
expected: FAIL
|
||||
|
|
@ -2,3 +2,9 @@
|
|||
[Tests support for EventController to cancel event listeners in addEventListener.]
|
||||
expected: FAIL
|
||||
|
||||
[Tests support for EventController to cancel capture event listeners in addEventListener.]
|
||||
expected: FAIL
|
||||
|
||||
[Passing an AbortSignal to addEventListener options should allow removing a listener]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,8 +2,130 @@
|
|||
expected: ERROR
|
||||
|
||||
[request-bad-port.any.html]
|
||||
expected: TIMEOUT
|
||||
[Request on bad port 6697 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 3659 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 554 should throw TypeError.]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Request on bad port 587 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 563 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 995 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 4045 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 1720 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6665 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6000 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 1723 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 993 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6666 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6667 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 556 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 601 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6668 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6669 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 2049 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 636 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
|
||||
[request-bad-port.any.worker.html]
|
||||
expected: TIMEOUT
|
||||
[Request on bad port 6697 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 3659 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 554 should throw TypeError.]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Request on bad port 587 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 563 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 995 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 4045 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 1720 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6665 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6000 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 1723 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 993 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6666 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6667 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 556 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 601 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6668 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 6669 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 2049 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
[Request on bad port 636 should throw TypeError.]
|
||||
expected: NOTRUN
|
||||
|
||||
|
||||
[request-bad-port.any.sharedworker.html]
|
||||
expected: ERROR
|
||||
|
|
|
@ -315,21 +315,18 @@
|
|||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
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>: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -53,3 +53,6 @@
|
|||
[combined text/javascript ]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_3.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_4.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
[supported-elements.html]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -10,7 +9,7 @@
|
|||
expected: FAIL
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: FAIL
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
[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: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[form-double-submit-3.html]
|
||||
[<button> should have the same double-submit protection as <input type=submit>]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[module-delayed.html]
|
||||
[async document.write in a module]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[module-static-import-delayed.html]
|
||||
[document.write in an imported module]
|
||||
expected: FAIL
|
||||
|
|
@ -4,6 +4,3 @@
|
|||
[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
|
||||
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
[promise-job-entry-different-function-realm.html]
|
||||
expected: TIMEOUT
|
||||
[Fulfillment handler on fulfilled promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Rejection handler on pending-then-rejected promise]
|
||||
expected: FAIL
|
||||
|
||||
[Thenable resolution]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Rejection handler on rejected promise]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Fulfillment handler on pending-then-fulfilled promise]
|
||||
expected: FAIL
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[body-fills-html-quirk-vertical.html]
|
||||
expected: FAIL
|
2
tests/wpt/metadata/quirks/body-fills-html-quirk.html.ini
Normal file
2
tests/wpt/metadata/quirks/body-fills-html-quirk.html.ini
Normal file
|
@ -0,0 +1,2 @@
|
|||
[body-fills-html-quirk.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[html-fills-viewport-quirk-vertical.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[html-fills-viewport-quirk.html]
|
||||
expected: FAIL
|
|
@ -509,3 +509,6 @@
|
|||
[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[28696\]\t1.9543942710671582e-15\t9.3139332532882690e-1\t9.3139332532882491e-1\t9.9999999999999789e-1\t3.8985999999999999e-3\n\t[28697\]\t7.0477002859115601e-1\t9.0675884485244751e-1\t2.0198881626129150e-1\t2.2275913536212616e-1\t3.8985999999999999e-3\n\tMax AbsError of 9.3139332532882491e-1 at index of 28696.\n\tMax RelError of 9.9999999999999789e-1 at index of 28696.\n]
|
||||
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[28696\]\t1.7767626257415612e-27\t9.3139332532882690e-1\t9.3139332532882690e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\t[28697\]\t7.0477002859115601e-1\t9.0675884485244751e-1\t2.0198881626129150e-1\t2.2275913536212616e-1\t3.8985999999999999e-3\n\tMax AbsError of 9.3139332532882690e-1 at index of 28696.\n\tMax RelError of 1.0000000000000000e+0 at index of 28696.\n]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[Worker-constructor.html]
|
||||
expected: ERROR
|
|
@ -0,0 +1,9 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-break-3/#breaking-rules">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||
<div style="columns:2; column-fill:auto; column-gap:0; width:100px; height:100px; background:red;">
|
||||
<div style="float:left; width:100%; height:150px; background:green;"></div>
|
||||
<div style="display:inline-block; vertical-align:top; width:100%; height:50px; background:green;"></div>
|
||||
</div>
|
|
@ -0,0 +1,10 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-break-3/#breaking-rules">
|
||||
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1122901">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||
<div style="columns:4; column-fill:auto; column-gap:0; width:100px; height:100px; background:red;">
|
||||
<div style="float:left; width:100%; height:350px; background:green;"></div>
|
||||
<div style="display:inline-block; vertical-align:top; width:100%; height:50px; background:green;"></div>
|
||||
</div>
|
|
@ -0,0 +1,8 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5713">
|
||||
<meta name="assert" content="If stretch alignment is applied to one axis the aspect-ratio of a replaced element is preserved.">
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||
<div style="display: grid; grid-template: 100px / 200px; width: 100px; height: 100px; background: red;">
|
||||
<canvas width=10 height=10 style="background: green; align-self: stretch;"></canvas>
|
||||
</div>
|
|
@ -0,0 +1,8 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5713">
|
||||
<meta name="assert" content="If stretch alignment is applied to one axis the aspect-ratio of a replaced element is preserved.">
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||
<div style="display: grid; grid-template: 200px / 100px; width: 100px; height: 100px; background: red;">
|
||||
<canvas width=10 height=10 style="background: green; justify-self: stretch;"></canvas>
|
||||
</div>
|
|
@ -0,0 +1,8 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5713">
|
||||
<meta name="assert" content="If stretch alignment is applied to both axis the aspect-ratio of a replaced element is ignored.">
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||
<div style="display: grid; grid-template: 100px / 100px; width: 100px; height: 100px; background: red;">
|
||||
<canvas width=10 height=20 style="background: green; align-self: stretch; justify-self: stretch;"></canvas>
|
||||
</div>
|
|
@ -16,6 +16,33 @@
|
|||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
function startReference()
|
||||
{
|
||||
document.getElementById("ref").focus();
|
||||
/*
|
||||
Some browsers, like Chromium 80+, will transfer focus
|
||||
to a selected element like a contenteditable div and
|
||||
therefore style the border of such element according
|
||||
to the user agent stylesheet rule:
|
||||
:focus {outline: -webkit-focus-ring-color auto 1px;} .
|
||||
So, we deliberately trigger such focus with the focus()
|
||||
method in the reference file.
|
||||
*/
|
||||
document.getElementById("ref").style.caretColor = "yellow";
|
||||
/*
|
||||
When a contenteditable element is focused in Firefox
|
||||
82+, then the caret becomes visible and blinking and
|
||||
it is painted with the ::selected's color which is
|
||||
the green color in this case. We therefore counter,
|
||||
neutralize this by resetting the caret's color to the
|
||||
background color.
|
||||
*/
|
||||
}
|
||||
</script>
|
||||
|
||||
<body onload="startReference();">
|
||||
|
||||
<p>Test passes if each glyph of "Selected Text" is green with a yellow background and if there is <strong>no red</strong>.
|
||||
|
||||
<div contenteditable="true" id="test">Selected Text</div>
|
||||
<div contenteditable="true" id="ref">Selected Text</div>
|
||||
|
|
|
@ -35,15 +35,6 @@
|
|||
/* Then we set the range boundaries to the children of div#test */
|
||||
window.getSelection().addRange(targetRange);
|
||||
/* Finally, we now select such range of content */
|
||||
document.getElementById("test").blur();
|
||||
/*
|
||||
Some browsers, like Chromium 80+, will
|
||||
transfer focus to a selected element
|
||||
like a contenteditable div and
|
||||
therefore style the border of
|
||||
such element. We remove such
|
||||
focus with the blur() method.
|
||||
*/
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
|
@ -21,4 +21,36 @@ test(t => {
|
|||
controller.abort();
|
||||
target.dispatchEvent(new Event('testevent'));
|
||||
}, 'Tests support for EventController to cancel event listeners in addEventListener.');
|
||||
|
||||
test(t => {
|
||||
const target = new EventTarget();
|
||||
const controller = new AbortController();
|
||||
|
||||
target.addEventListener('testevent', t.step_func(() => {
|
||||
assert_unreached('testevent should have been canceled by AbortController');
|
||||
}), {signal: controller.signal, capture: true});
|
||||
|
||||
controller.abort();
|
||||
target.dispatchEvent(new Event('testevent'));
|
||||
}, 'Tests support for EventController to cancel capture event listeners in addEventListener.');
|
||||
|
||||
test(function() {
|
||||
let count = 0;
|
||||
function handler() {
|
||||
count++;
|
||||
}
|
||||
const et = new EventTarget();
|
||||
const controller = new AbortController();
|
||||
et.addEventListener('test', handler, { signal: controller.signal });
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 1, "Adding a signal still adds a listener");
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 2, "The listener was not added with the once flag");
|
||||
controller.abort();
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 2, "Aborting on the controller removes the listener");
|
||||
et.addEventListener('test', handler, { signal: controller.signal });
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 2, "Passing an aborted signal never adds the handler");
|
||||
}, "Passing an AbortSignal to addEventListener options should allow removing a listener");
|
||||
</script>
|
||||
|
|
|
@ -53,6 +53,7 @@ var BLOCKED_PORTS_LIST = [
|
|||
532, // netnews
|
||||
540, // uucp
|
||||
548, // afp
|
||||
554, // rtsp
|
||||
556, // remotefs
|
||||
563, // nntp+ssl
|
||||
587, // smtp (outgoing)
|
||||
|
@ -60,6 +61,8 @@ var BLOCKED_PORTS_LIST = [
|
|||
636, // ldap+ssl
|
||||
993, // ldap+ssl
|
||||
995, // pop3+ssl
|
||||
1720, // h323hostcall
|
||||
1723, // pptp
|
||||
2049, // nfs
|
||||
3659, // apple-sasl
|
||||
4045, // lockd
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>TestDriver actions: text edit commands</title>
|
||||
<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>
|
||||
|
||||
<style>
|
||||
div { padding:0px; margin: 0px; }
|
||||
</style>
|
||||
<body>
|
||||
<div>
|
||||
<input type="text" id="text1" value="Hello World" />
|
||||
<input type="text" id="text2">
|
||||
</div>
|
||||
</body>
|
||||
<script>
|
||||
async_test(t => {
|
||||
let text1 = document.getElementById("text1");
|
||||
let text2 = document.getElementById("text2");
|
||||
text1.addEventListener("click", function() {
|
||||
let text1 = document.getElementById("text1");
|
||||
text1.value="new text";
|
||||
});
|
||||
|
||||
const ctrl_key = "\uE009";
|
||||
const cmd_key = "\uE03D";
|
||||
let edit_command_key = ctrl_key;
|
||||
if(navigator.platform.includes('Mac'))
|
||||
edit_command_key = cmd_key;
|
||||
|
||||
let actions = new test_driver.Actions()
|
||||
.pointerMove(0, 0, {origin: text1})
|
||||
.pointerDown()
|
||||
.pointerUp()
|
||||
.addTick()
|
||||
.keyDown(edit_command_key)
|
||||
.keyDown("a")
|
||||
.keyUp("a")
|
||||
.keyDown("x")
|
||||
.keyUp("x")
|
||||
.keyUp(edit_command_key)
|
||||
.addTick()
|
||||
.pointerMove(0, 0, {origin: text2})
|
||||
.pointerDown()
|
||||
.pointerUp()
|
||||
.keyDown(edit_command_key)
|
||||
.keyDown("v")
|
||||
.keyUp("v")
|
||||
.keyUp(edit_command_key);
|
||||
|
||||
actions.send()
|
||||
.then(t.step_func_done(() => {
|
||||
assert_equals(text1.value, "");
|
||||
assert_equals(text2.value, "new text");
|
||||
}))
|
||||
.catch(e => t.step_func(() => assert_unreached("Actions sequence failed " + e)));
|
||||
});
|
||||
</script>
|
|
@ -143,6 +143,12 @@ dictionary MediaStreamTrackEventInit : EventInit {
|
|||
required MediaStreamTrack track;
|
||||
};
|
||||
|
||||
[Exposed=Window]
|
||||
interface OverconstrainedError : DOMException {
|
||||
constructor(DOMString constraint, optional DOMString message = "");
|
||||
readonly attribute DOMString constraint;
|
||||
};
|
||||
|
||||
partial interface Navigator {
|
||||
[SameObject, SecureContext] readonly attribute MediaDevices mediaDevices;
|
||||
};
|
||||
|
@ -191,9 +197,7 @@ dictionary MediaStreamConstraints {
|
|||
|
||||
callback NavigatorUserMediaSuccessCallback = undefined (MediaStream stream);
|
||||
|
||||
callback NavigatorUserMediaErrorCallback = undefined (MediaStreamError error);
|
||||
|
||||
typedef object MediaStreamError;
|
||||
callback NavigatorUserMediaErrorCallback = undefined (DOMException error);
|
||||
|
||||
dictionary DoubleRange {
|
||||
double max;
|
||||
|
|
|
@ -3,8 +3,7 @@
|
|||
<head>
|
||||
<title>getUserMedia() triggers error callback when auth is denied</title>
|
||||
<link rel="author" title="Dr. A. Gouaillard" href="mailto:agouaillard@gmail.com"/>
|
||||
<link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#methods-5">
|
||||
<link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#navigatorusermediaerrorcallback">
|
||||
<link rel="help" href="https://w3c.github.io/mediacapture-main/#dom-mediadevices-getusermedia">
|
||||
</head>
|
||||
<body>
|
||||
<p class="instructions">When prompted, <strong>please deny</strong> access to
|
||||
|
@ -16,18 +15,17 @@
|
|||
<script src=/resources/testharness.js></script>
|
||||
<script src=/resources/testharnessreport.js></script>
|
||||
<script>
|
||||
var t = async_test("Tests that the error callback is triggered when permission is denied");
|
||||
t.step(function() {
|
||||
navigator.mediaDevices.getUserMedia({video: true})
|
||||
.then(t.step_func(function (stream) {
|
||||
assert_unreached("The success callback should not be triggered since access is to be denied");
|
||||
t.done();
|
||||
}), t.step_func(function (error) {
|
||||
assert_equals(error.name, "NotAllowedError", "NotAllowedError returned as expected");
|
||||
assert_equals(error.constraintName, undefined, "constraintName attribute not set as expected");
|
||||
t.done();
|
||||
}))
|
||||
});
|
||||
promise_test(async () => {
|
||||
try {
|
||||
await navigator.mediaDevices.getUserMedia({video: true})
|
||||
} catch (error) {
|
||||
assert_throws_dom("NotAllowedError", () => { throw error });
|
||||
assert_false('constraintName' in error,
|
||||
"constraintName attribute not set as expected");
|
||||
return;
|
||||
};
|
||||
assert_unreached("The success callback should not be triggered since access is to be denied");
|
||||
}, "Tests that the error callback is triggered when permission is denied");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<head>
|
||||
<title>getUserMedia({}) rejects with TypeError</title>
|
||||
<link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/>
|
||||
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#widl-NavigatorUserMedia-getUserMedia-void-MediaStreamConstraints-constraints-NavigatorUserMediaSuccessCallback-successCallback-NavigatorUserMediaErrorCallback-errorCallback">
|
||||
<link rel="help" href="https://w3c.github.io/mediacapture-main/#dom-mediadevices-getusermedia">
|
||||
</head>
|
||||
<body>
|
||||
<h1 class="instructions">Description</h1>
|
||||
|
@ -14,18 +14,17 @@ options parameter raises a TypeError exception.</p>
|
|||
<script src=/resources/testharness.js></script>
|
||||
<script src=/resources/testharnessreport.js></script>
|
||||
<script>
|
||||
var t = async_test("Tests that getUserMedia is rejected with a TypeError when used with an empty options parameter");
|
||||
t.step( function () {
|
||||
navigator.mediaDevices.getUserMedia({})
|
||||
.then(t.step_func(function () {
|
||||
assert_unreached("This should never be triggered since the constraints parameter is empty");
|
||||
}), t.step_func(function (error) {
|
||||
assert_equals(error.name, "TypeError", "TypeError returned as expected");
|
||||
assert_equals(error.constraintName, undefined, "constraintName attribute not set as expected");
|
||||
t.done();
|
||||
}));
|
||||
t.done();
|
||||
});
|
||||
promise_test(async () => {
|
||||
try {
|
||||
await navigator.mediaDevices.getUserMedia({});
|
||||
} catch (error) {
|
||||
assert_throws_js(TypeError, () => { throw error });
|
||||
assert_false('constraintName' in error,
|
||||
"constraintName attribute not set as expected");
|
||||
return;
|
||||
}
|
||||
assert_unreached("This should never be triggered since the constraints parameter is empty.");
|
||||
}, "Tests that getUserMedia is rejected with a TypeError when used with an empty options parameter");
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -24,7 +24,6 @@ t.step(function () {
|
|||
assert_equals(error.constraintName, undefined, "constraintName attribute not set as expected");
|
||||
t.done();
|
||||
}));
|
||||
t.done();
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
idl_test(
|
||||
['mediacapture-streams'],
|
||||
['dom', 'html'],
|
||||
['WebIDL', 'dom', 'html'],
|
||||
async idl_array => {
|
||||
const inputDevices = [];
|
||||
const outputDevices = [];
|
||||
|
@ -44,6 +44,7 @@ idl_test(
|
|||
MediaDeviceInfo: outputDevices,
|
||||
MediaStreamTrack: ['track'],
|
||||
MediaStreamTrackEvent: ['trackEvent'],
|
||||
OverconstrainedError: ['new OverconstrainedError("constraint")'],
|
||||
});
|
||||
}
|
||||
);
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
<style>
|
||||
body {
|
||||
border: solid;
|
||||
margin: 10px 11px 12px 14px;
|
||||
float: left;
|
||||
}
|
||||
span {
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
<style>
|
||||
body {
|
||||
border: solid;
|
||||
margin: 10px 11px 12px 14px;
|
||||
display: inline-block;
|
||||
}
|
||||
span {
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
<style>
|
||||
body {
|
||||
border: solid;
|
||||
margin: 10px 11px 12px 14px;
|
||||
position: absolute;
|
||||
}
|
||||
span {
|
||||
|
|
|
@ -1,2 +1,4 @@
|
|||
<!DOCTYPE html>
|
||||
<div style="width: 100px; height: 100px; border: solid; background: green;"></div>
|
||||
<body style="margin: 10px 11px 12px 14px;">
|
||||
<div style="width: 100px; height: 100px; border: solid; background: green;"></div>
|
||||
</body>
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<body style="margin: 0">
|
||||
<div style="width: 175px; height: 178px; margin: 10px 11px 12px 14px; border: solid; box-sizing: border-box;">
|
||||
<div style="width: 100px; height: 100px; background: green"></div>
|
||||
</div>
|
||||
</body>
|
|
@ -0,0 +1,23 @@
|
|||
<!DOCTYPE quirks-mode>
|
||||
<link rel="help" href="https://quirks.spec.whatwg.org/#the-body-element-fills-the-html-element-quirk"/>
|
||||
<link rel="match" href="body-fills-html-quirk-ref2.html" />
|
||||
<style>
|
||||
html {
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
writing-mode: vertical-lr;
|
||||
}
|
||||
body {
|
||||
border: solid;
|
||||
margin: 10px 11px 12px 14px;
|
||||
}
|
||||
span {
|
||||
display: inline-block;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background: green;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<span></span>
|
||||
</body>
|
|
@ -0,0 +1,22 @@
|
|||
<!DOCTYPE quirks-mode>
|
||||
<link rel="help" href="https://quirks.spec.whatwg.org/#the-body-element-fills-the-html-element-quirk"/>
|
||||
<link rel="match" href="body-fills-html-quirk-ref2.html" />
|
||||
<style>
|
||||
html {
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
}
|
||||
body {
|
||||
border: solid;
|
||||
margin: 10px 11px 12px 14px;
|
||||
}
|
||||
span {
|
||||
display: inline-block;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background: green;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<span></span>
|
||||
</body>
|
|
@ -0,0 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<body style="width: 100vw; height: 100vh; margin: 0; padding: 10px 11px 12px 14px; box-sizing: border-box">
|
||||
<div id="border" style="border: solid; width: 100%; height: 100%; box-sizing: border-box">
|
||||
<div style="width: 100px; height: 100px; background: green"></div>
|
||||
</div>
|
||||
</body>
|
|
@ -0,0 +1,25 @@
|
|||
<!DOCTYPE quirks-mode>
|
||||
<link
|
||||
rel="help"
|
||||
href="https://quirks.spec.whatwg.org/#the-html-element-fills-the-viewport-quirk"
|
||||
/>
|
||||
<link rel="match" href="html-fills-viewport-quirk-ref.html" />
|
||||
<style>
|
||||
html {
|
||||
border: solid;
|
||||
margin: 10px 11px 12px 14px;
|
||||
direction: vertical-lr;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
span {
|
||||
display: inline-block;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background: green;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<span></span>
|
||||
</body>
|
|
@ -0,0 +1,24 @@
|
|||
<!DOCTYPE quirks-mode>
|
||||
<link
|
||||
rel="help"
|
||||
href="https://quirks.spec.whatwg.org/#the-html-element-fills-the-viewport-quirk"
|
||||
/>
|
||||
<link rel="match" href="html-fills-viewport-quirk-ref.html" />
|
||||
<style>
|
||||
html {
|
||||
border: solid;
|
||||
margin: 10px 11px 12px 14px;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
span {
|
||||
display: inline-block;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background: green;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<span></span>
|
||||
</body>
|
|
@ -27,7 +27,7 @@ promise_test(async t => {
|
|||
try {
|
||||
stopTracks(await navigator.mediaDevices.getDisplayMedia({video: true}));
|
||||
} catch (err) {
|
||||
assert_equals(err.name, 'InvalidStateError', err.message);
|
||||
assert_throws_dom('InvalidStateError', () => { throw err });
|
||||
return;
|
||||
}
|
||||
assert_unreached('getDisplayMedia should have failed');
|
||||
|
@ -62,7 +62,7 @@ promise_test(async t => {
|
|||
try {
|
||||
stopTracks(await getDisplayMedia(constraints));
|
||||
} catch (err) {
|
||||
assert_equals(err.name, 'TypeError', err.message);
|
||||
assert_throws_js(TypeError, () => { throw err });
|
||||
return;
|
||||
}
|
||||
assert_unreached('getDisplayMedia should have failed');
|
||||
|
|
|
@ -120,6 +120,7 @@ def is_bad_port(port):
|
|||
532, # netnews
|
||||
540, # uucp
|
||||
548, # afp
|
||||
554, # rtsp
|
||||
556, # remotefs
|
||||
563, # nntp+ssl
|
||||
587, # smtp (outgoing)
|
||||
|
@ -127,6 +128,8 @@ def is_bad_port(port):
|
|||
636, # ldap+ssl
|
||||
993, # ldap+ssl
|
||||
995, # pop3+ssl
|
||||
1720, # h323hostcall
|
||||
1723, # pptp
|
||||
2049, # nfs
|
||||
3659, # apple-sasl
|
||||
4045, # lockd
|
||||
|
|
|
@ -90,23 +90,6 @@
|
|||
return pc.getStats(track);
|
||||
}, 'getStats() with track added via addTransceiver should succeed');
|
||||
|
||||
promise_test(t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
return getTrackFromUserMedia('audio')
|
||||
.then(([track, mediaStream]) => {
|
||||
// addTransceiver allows adding same track multiple times
|
||||
const transceiver1 = pc.addTransceiver(track);
|
||||
const transceiver2 = pc.addTransceiver(track);
|
||||
|
||||
assert_not_equals(transceiver1, transceiver2);
|
||||
assert_not_equals(transceiver1.sender, transceiver2.sender);
|
||||
assert_equals(transceiver1.sender.track, transceiver2.sender.track);
|
||||
|
||||
return promise_rejects_dom(t, 'InvalidAccessError', pc.getStats(track));
|
||||
});
|
||||
}, `getStats() with track associated with more than one sender should reject with InvalidAccessError`);
|
||||
|
||||
promise_test(t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
|
@ -135,35 +118,69 @@
|
|||
});
|
||||
}, 'getStats() with no argument should return stats report containing peer-connection stats on an empty PC');
|
||||
|
||||
promise_test(t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
return getTrackFromUserMedia('audio')
|
||||
.then(([track, mediaStream]) => {
|
||||
pc.addTrack(track, mediaStream);
|
||||
return pc.getStats();
|
||||
})
|
||||
.then(statsReport => {
|
||||
// validateStatsReport(statsReport);
|
||||
// assert_stats_report_has_stats(statsReport, ['peer-connection']);
|
||||
assert_stats_report_has_stats(statsReport, ['outbound-rtp']);
|
||||
});
|
||||
}, 'getStats() with no argument should return stats report containing peer-connection stats and outbound-track-stats');
|
||||
promise_test(async t => {
|
||||
const pc = createPeerConnectionWithCleanup(t);
|
||||
const pc2 = createPeerConnectionWithCleanup(t);
|
||||
const [track, mediaStream] = await getTrackFromUserMedia('audio');
|
||||
pc.addTrack(track, mediaStream);
|
||||
exchangeIceCandidates(pc, pc2);
|
||||
await exchangeOfferAnswer(pc, pc2);
|
||||
await listenToConnected(pc);
|
||||
const statsReport = await pc.getStats();
|
||||
getRequiredStats(statsReport, 'peer-connection');
|
||||
getRequiredStats(statsReport, 'outbound-rtp');
|
||||
}, 'getStats() track with stream returns peer-connection and outbound-rtp stats');
|
||||
|
||||
promise_test(t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
return getTrackFromUserMedia('audio')
|
||||
.then(([track, mediaStream]) => {
|
||||
pc.addTrack(track);
|
||||
return pc.getStats();
|
||||
})
|
||||
.then(statsReport => {
|
||||
validateStatsReport(statsReport);
|
||||
assert_stats_report_has_stats(statsReport, ['peer-connection']);
|
||||
assert_stats_report_has_stats(statsReport, ['outbound-rtp']);
|
||||
});
|
||||
}, 'getStats() with no argument should return stats for no-stream tracks');
|
||||
promise_test(async t => {
|
||||
const pc = createPeerConnectionWithCleanup(t);
|
||||
const pc2 = createPeerConnectionWithCleanup(t);
|
||||
const [track, mediaStream] = await getTrackFromUserMedia('audio');
|
||||
pc.addTrack(track);
|
||||
exchangeIceCandidates(pc, pc2);
|
||||
await exchangeOfferAnswer(pc, pc2);
|
||||
await listenToConnected(pc);
|
||||
const statsReport = await pc.getStats();
|
||||
getRequiredStats(statsReport, 'peer-connection');
|
||||
getRequiredStats(statsReport, 'outbound-rtp');
|
||||
}, 'getStats() track without stream returns peer-connection and outbound-rtp stats');
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = createPeerConnectionWithCleanup(t);
|
||||
const pc2 = createPeerConnectionWithCleanup(t);
|
||||
const [track, mediaStream] = await getTrackFromUserMedia('audio');
|
||||
pc.addTrack(track, mediaStream);
|
||||
exchangeIceCandidates(pc, pc2);
|
||||
await exchangeOfferAnswer(pc, pc2);
|
||||
await listenToConnected(pc);
|
||||
const statsReport = await pc.getStats();
|
||||
assert_stats_report_has_stats(statsReport, ['outbound-rtp']);
|
||||
}, 'getStats() audio outbound-rtp contains all mandatory stats');
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = createPeerConnectionWithCleanup(t);
|
||||
const pc2 = createPeerConnectionWithCleanup(t);
|
||||
const [track, mediaStream] = await getTrackFromUserMedia('video');
|
||||
pc.addTrack(track, mediaStream);
|
||||
exchangeIceCandidates(pc, pc2);
|
||||
await exchangeOfferAnswer(pc, pc2);
|
||||
await listenToConnected(pc);
|
||||
const statsReport = await pc.getStats();
|
||||
assert_stats_report_has_stats(statsReport, ['outbound-rtp']);
|
||||
}, 'getStats() video outbound-rtp contains all mandatory stats');
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = createPeerConnectionWithCleanup(t);
|
||||
const pc2 = createPeerConnectionWithCleanup(t);
|
||||
const [audioTrack, audioStream] = await getTrackFromUserMedia('audio');
|
||||
pc.addTrack(audioTrack, audioStream);
|
||||
const [videoTrack, videoStream] = await getTrackFromUserMedia('video');
|
||||
pc.addTrack(videoTrack, videoStream);
|
||||
exchangeIceCandidates(pc, pc2);
|
||||
await exchangeOfferAnswer(pc, pc2);
|
||||
await listenToConnected(pc);
|
||||
const statsReport = await pc.getStats();
|
||||
validateStatsReport(statsReport);
|
||||
}, 'getStats() audio and video validate all mandatory stats');
|
||||
|
||||
/*
|
||||
8.5. The stats selection algorithm
|
||||
|
@ -181,12 +198,10 @@
|
|||
pc.addTrack(track, mediaStream);
|
||||
exchangeIceCandidates(pc, pc2);
|
||||
await exchangeOfferAnswer(pc, pc2);
|
||||
await listenToIceConnected(pc);
|
||||
await listenToConnected(pc);
|
||||
const stats = await pc.getStats(track);
|
||||
validateStatsReport(stats);
|
||||
assert_stats_report_has_stats(stats, ['outbound-rtp']);
|
||||
}, `getStats() on track associated with RtpSender should return stats report containing outbound-rtp stats`);
|
||||
|
||||
getRequiredStats(stats, 'outbound-rtp');
|
||||
}, `getStats() on track associated with RTCRtpSender should return stats report containing outbound-rtp stats`);
|
||||
|
||||
/*
|
||||
8.5. The stats selection algorithm
|
||||
|
@ -213,9 +228,28 @@
|
|||
});
|
||||
}
|
||||
const stats = await pc2.getStats(pc2.getReceivers()[0].track);
|
||||
validateStatsReport(stats);
|
||||
assert_stats_report_has_stats(stats, ['inbound-rtp']);
|
||||
}, `getStats() on track associated with RtpReceiver should return stats report containing inbound-rtp stats`);
|
||||
getRequiredStats(stats, 'inbound-rtp');
|
||||
}, `getStats() on track associated with RTCRtpReceiver should return stats report containing inbound-rtp stats`);
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = createPeerConnectionWithCleanup(t);
|
||||
const pc2 = createPeerConnectionWithCleanup(t);
|
||||
|
||||
let [track, mediaStream] = await getTrackFromUserMedia('audio');
|
||||
pc.addTrack(track, mediaStream);
|
||||
exchangeIceCandidates(pc, pc2);
|
||||
await exchangeOfferAnswer(pc, pc2);
|
||||
// Wait for unmute if the track is not already unmuted.
|
||||
// According to spec, it should be muted when being created, but this
|
||||
// is not what this test is testing, so allow it to be unmuted.
|
||||
if (pc2.getReceivers()[0].track.muted) {
|
||||
await new Promise(resolve => {
|
||||
pc2.getReceivers()[0].track.addEventListener('unmute', resolve);
|
||||
});
|
||||
}
|
||||
const stats = await pc2.getStats(pc2.getReceivers()[0].track);
|
||||
getRequiredStats(stats, 'inbound-rtp');
|
||||
}, `getStats() inbound-rtp contains all mandatory stats`);
|
||||
|
||||
/*
|
||||
8.6 Mandatory To Implement Stats
|
||||
|
@ -339,4 +373,34 @@
|
|||
|
||||
}, `getStats() with connected peer connections having tracks and data channel should return all mandatory to implement stats`);
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const [track, mediaStream] = await getTrackFromUserMedia('audio');
|
||||
pc.addTransceiver(track);
|
||||
pc.addTransceiver(track);
|
||||
await promise_rejects_dom(t, 'InvalidAccessError', pc.getStats(track));
|
||||
}, `getStats(track) should not work if multiple senders have the same track`);
|
||||
|
||||
promise_test(async t => {
|
||||
const kMinimumTimeElapsedBetweenGetStatsCallsMs = 500;
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const t0 = performance.now();
|
||||
const t0Stats = getRequiredStats(await pc.getStats(), 'peer-connection');
|
||||
await new Promise(
|
||||
r => t.step_timeout(r, kMinimumTimeElapsedBetweenGetStatsCallsMs));
|
||||
const t1Stats = getRequiredStats(await pc.getStats(), 'peer-connection');
|
||||
const t1 = performance.now();
|
||||
const maximumTimeElapsedBetweenGetStatsCallsMs = t1 - t0;
|
||||
const deltaTimestampMs = t1Stats.timestamp - t0Stats.timestamp;
|
||||
// The delta must be at least the time we waited between calls.
|
||||
assert_greater_than_equal(deltaTimestampMs,
|
||||
kMinimumTimeElapsedBetweenGetStatsCallsMs);
|
||||
// The delta must be at most the time elapsed before the first getStats()
|
||||
// call and after the second getStats() call.
|
||||
assert_less_than_equal(deltaTimestampMs,
|
||||
maximumTimeElapsedBetweenGetStatsCallsMs);
|
||||
}, `RTCStats.timestamp increases with time passing`);
|
||||
|
||||
</script>
|
||||
|
|
|
@ -58,6 +58,7 @@ async_test(t => {
|
|||
532, // netnews
|
||||
540, // uucp
|
||||
548, // afp
|
||||
554, // rtsp
|
||||
556, // remotefs
|
||||
563, // nntp+ssl
|
||||
587, // smtp (outgoing)
|
||||
|
@ -65,6 +66,8 @@ async_test(t => {
|
|||
636, // ldap+ssl
|
||||
993, // ldap+ssl
|
||||
995, // pop3+ssl
|
||||
1720, // h323hostcall
|
||||
1723, // pptp
|
||||
2049, // nfs
|
||||
3659, // apple-sasl
|
||||
4045, // lockd
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue