Update web-platform-tests to revision 94a0b420301fc9d7da16097083ecdce927e22343

This commit is contained in:
WPT Sync Bot 2019-08-26 10:26:31 +00:00
parent 66e5ad0cb8
commit 0233eb3d32
54 changed files with 1279 additions and 313 deletions

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: FAIL

View file

@ -34,3 +34,6 @@
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
[Revoke blob URL after calling fetch, fetch should succeed]
expected: FAIL

View file

@ -272285,6 +272285,12 @@
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-worker.js.headers": [
[]
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/iframe-failure.html": [
[]
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/iframe-failure.html.headers": [
[]
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe-domain.sub.html": [
[]
],
@ -272375,6 +272381,9 @@
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-domain-success.https.sub.html.headers": [
[]
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-failure.https.html.headers": [
[]
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-iframe-messagechannel-success.https.html.headers": [
[]
],
@ -288476,6 +288485,9 @@
"websockets/handlers/basic_auth_wsh.py": [
[]
],
"websockets/handlers/delayed-passive-close_wsh.py": [
[]
],
"websockets/handlers/echo-cookie_wsh.py": [
[]
],
@ -288557,6 +288569,12 @@
"websockets/security/check.py": [
[]
],
"websockets/stream-tentative/README.md": [
[]
],
"websockets/stream-tentative/resources/url-constants.js": [
[]
],
"websockets/unload-a-document/001-1.html": [
[]
],
@ -319712,6 +319730,30 @@
{}
]
],
"css/css-grid/parsing/grid-template-columns-invalid.html": [
[
"css/css-grid/parsing/grid-template-columns-invalid.html",
{}
]
],
"css/css-grid/parsing/grid-template-columns-valid.html": [
[
"css/css-grid/parsing/grid-template-columns-valid.html",
{}
]
],
"css/css-grid/parsing/grid-template-rows-invalid.html": [
[
"css/css-grid/parsing/grid-template-rows-invalid.html",
{}
]
],
"css/css-grid/parsing/grid-template-rows-valid.html": [
[
"css/css-grid/parsing/grid-template-rows-valid.html",
{}
]
],
"css/css-grid/placement/grid-auto-placement-implicit-tracks-001.html": [
[
"css/css-grid/placement/grid-auto-placement-implicit-tracks-001.html",
@ -353684,6 +353726,12 @@
{}
]
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-failure.https.html": [
[
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-failure.https.html",
{}
]
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-iframe-messagechannel-success.https.html": [
[
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-iframe-messagechannel-success.https.html",
@ -367085,6 +367133,12 @@
{}
]
],
"mathml/relations/css-styling/display-contents.html": [
[
"mathml/relations/css-styling/display-contents.html",
{}
]
],
"mathml/relations/css-styling/displaystyle-1.html": [
[
"mathml/relations/css-styling/displaystyle-1.html",
@ -417247,6 +417301,162 @@
{}
]
],
"websockets/stream-tentative/close.any.js": [
[
"websockets/stream-tentative/close.any.html",
{
"script_metadata": [
[
"script",
"../websocket.sub.js"
],
[
"script",
"resources/url-constants.js"
],
[
"global",
"window,worker"
]
]
}
],
[
"websockets/stream-tentative/close.any.serviceworker.html",
{
"script_metadata": [
[
"script",
"../websocket.sub.js"
],
[
"script",
"resources/url-constants.js"
],
[
"global",
"window,worker"
]
]
}
],
[
"websockets/stream-tentative/close.any.sharedworker.html",
{
"script_metadata": [
[
"script",
"../websocket.sub.js"
],
[
"script",
"resources/url-constants.js"
],
[
"global",
"window,worker"
]
]
}
],
[
"websockets/stream-tentative/close.any.worker.html",
{
"script_metadata": [
[
"script",
"../websocket.sub.js"
],
[
"script",
"resources/url-constants.js"
],
[
"global",
"window,worker"
]
]
}
]
],
"websockets/stream-tentative/constructor.any.js": [
[
"websockets/stream-tentative/constructor.any.html",
{
"script_metadata": [
[
"script",
"../websocket.sub.js"
],
[
"script",
"resources/url-constants.js"
],
[
"global",
"window,worker"
]
]
}
],
[
"websockets/stream-tentative/constructor.any.serviceworker.html",
{
"script_metadata": [
[
"script",
"../websocket.sub.js"
],
[
"script",
"resources/url-constants.js"
],
[
"global",
"window,worker"
]
]
}
],
[
"websockets/stream-tentative/constructor.any.sharedworker.html",
{
"script_metadata": [
[
"script",
"../websocket.sub.js"
],
[
"script",
"resources/url-constants.js"
],
[
"global",
"window,worker"
]
]
}
],
[
"websockets/stream-tentative/constructor.any.worker.html",
{
"script_metadata": [
[
"script",
"../websocket.sub.js"
],
[
"script",
"resources/url-constants.js"
],
[
"global",
"window,worker"
]
]
}
]
],
"websockets/unload-a-document/001.html": [
[
"websockets/unload-a-document/001.html",
@ -563246,6 +563456,22 @@
"9c9bd47ec894ccc0e389287120082fb4bf5c9905",
"testharness"
],
"css/css-grid/parsing/grid-template-columns-invalid.html": [
"9d7aac48721a763ab778e22523b16b3f99b3f16a",
"testharness"
],
"css/css-grid/parsing/grid-template-columns-valid.html": [
"85ac76a999aab5adf628a8e38f626fcae299d12f",
"testharness"
],
"css/css-grid/parsing/grid-template-rows-invalid.html": [
"8a0fe9ddfa23e12985c99c1fe9196eebfc04c8cc",
"testharness"
],
"css/css-grid/parsing/grid-template-rows-valid.html": [
"ec8d64f79bacc1d7831e415768c2a76bf05607e0",
"testharness"
],
"css/css-grid/placement/grid-auto-placement-implicit-tracks-001.html": [
"546336a6ce8208d7c30afd66e20fbe33040cbd7c",
"testharness"
@ -619959,7 +620185,7 @@
"support"
],
"editing/data/insert-list-items-in-table-cells.js": [
"6a4d3985a570dd4acbf182c48d5acce2f2c1a0e1",
"9324d5b55ac2ad969593296dc907c97de8d3c7e8",
"support"
],
"editing/data/inserthorizontalrule.js": [
@ -635042,6 +635268,14 @@
"6604450991a122e3e241e40b1b9e0516c525389d",
"support"
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/iframe-failure.html": [
"2c33dba79a2fb9e6a81fc9ee5805b378e826f725",
"support"
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/iframe-failure.html.headers": [
"1528bf05e6368b00600b23c23042bf0d61985917",
"support"
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe-domain.sub.html": [
"a6dd70177584c9115c24beb281e7681110c07624",
"support"
@ -635178,6 +635412,14 @@
"63b60e490f47f4db77d33d7a4ca2f5b9a4181de8",
"support"
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-failure.https.html": [
"203a9f637fe61a2367fd4b58523af601401991be",
"testharness"
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-failure.https.html.headers": [
"63b60e490f47f4db77d33d7a4ca2f5b9a4181de8",
"support"
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-iframe-messagechannel-success.https.html": [
"98145310f610f0ca88af938872e9ea2103de600c",
"testharness"
@ -649418,6 +649660,10 @@
"f32a15ec01ac808d2e32ecb8cb232c12a5e0aa19",
"reftest"
],
"mathml/relations/css-styling/display-contents.html": [
"aeaa28da908816ad39619d9a47bbb43a3116bbe9",
"testharness"
],
"mathml/relations/css-styling/displaystyle-011-ref.html": [
"400c46a2456d0e1d4d48860e3ad557fa5d2990ee",
"support"
@ -649727,7 +649973,7 @@
"reftest"
],
"mathml/relations/css-styling/not-participating-to-parent-layout.html": [
"89389fc668234cc46bb58e33a099b2c04cc675b5",
"769449b97d4983efc19aa9c0999725cb5735c6dc",
"testharness"
],
"mathml/relations/css-styling/padding-border-margin/border-001.html": [
@ -649735,7 +649981,7 @@
"testharness"
],
"mathml/relations/css-styling/padding-border-margin/border-002.html": [
"f78bc588c04cc3d7b7939a194b2b577bab8f1ae7",
"06a719de64071ce0c9ca388ccf98fc4c6559a983",
"testharness"
],
"mathml/relations/css-styling/padding-border-margin/margin-001.html": [
@ -649743,7 +649989,7 @@
"testharness"
],
"mathml/relations/css-styling/padding-border-margin/margin-002.html": [
"69e1fd6b033c1a4be5e8f46bb699d08caf558eca",
"01c8f3e45f83e9f9ad5168de98dc60c63e213841",
"testharness"
],
"mathml/relations/css-styling/padding-border-margin/padding-001.html": [
@ -649751,7 +649997,7 @@
"testharness"
],
"mathml/relations/css-styling/padding-border-margin/padding-002.html": [
"a2f167a34040e067e3f41db33034ecb891204d58",
"565dfc43b566b0a3c019437111ce21db7885c426",
"testharness"
],
"mathml/relations/css-styling/padding-border-margin/padding-border-margin-001-ref.html": [
@ -649827,7 +650073,7 @@
"testharness"
],
"mathml/relations/html5-tree/clipboard-event-handlers.tentative.html": [
"d293b1500c77dd289381619d658ad5761316b9cf",
"0031004616886bc5933358d005d16d2299d52095",
"testharness"
],
"mathml/relations/html5-tree/color-attributes-1-ref.html": [
@ -649839,7 +650085,7 @@
"reftest"
],
"mathml/relations/html5-tree/css-inline-style-interface.tentative.html": [
"708926413f2aff21c4972a3f0ab19c692b81bbc7",
"b82f98e28b70cbfbadf7f585c9a2c8a2612ba05f",
"testharness"
],
"mathml/relations/html5-tree/display-1.html": [
@ -649875,7 +650121,7 @@
"testharness"
],
"mathml/relations/html5-tree/html-or-foreign-element-interfaces.tentative.html": [
"1fcaf6c40167a5eeb55dcc62de14e50224998994",
"bf4b99894da3251a394760f03d7b06b7e52b291f",
"testharness"
],
"mathml/relations/html5-tree/integration-point-1-ref.html": [
@ -649907,7 +650153,7 @@
"testharness"
],
"mathml/relations/html5-tree/math-global-event-handlers.tentative.html": [
"92e18639dff0d10949143bba2c7c403e48fdbe1c",
"807a29ee315f2a0d4680b693bb9137a6cd50ca1c",
"testharness"
],
"mathml/relations/html5-tree/required-extensions-2-ref.html": [
@ -649959,7 +650205,7 @@
"support"
],
"mathml/support/box-comparison.js": [
"c46808f7fee6f72ec9e7ffd4946239d9dcaad25b",
"a574b01706b5fecc232d62735ef7e89938594769",
"support"
],
"mathml/support/feature-detection.js": [
@ -696502,6 +696748,10 @@
"7ace8f4edb79e4d7dae94349ff256567a17c219b",
"support"
],
"websockets/handlers/delayed-passive-close_wsh.py": [
"7d55b88ecc6db7fd9d3fb7a9722e030d926c807d",
"support"
],
"websockets/handlers/echo-cookie_wsh.py": [
"367d03190cfef898b092663a34891c721216f823",
"support"
@ -696946,6 +697196,22 @@
"f1414376dcf165ab1c7da18a6f5856796dfec2c2",
"support"
],
"websockets/stream-tentative/README.md": [
"6c5158877417a3271ff0179449eace740cf157a1",
"support"
],
"websockets/stream-tentative/close.any.js": [
"ddcdc2b2c8f62682f395551be1272b624876ce32",
"testharness"
],
"websockets/stream-tentative/constructor.any.js": [
"12a24f25f2cc50c9437c7e59c4997774d023a101",
"testharness"
],
"websockets/stream-tentative/resources/url-constants.js": [
"9bc77aa3264a157f3da9e37504febfe8563d40bb",
"support"
],
"websockets/unload-a-document/001-1.html": [
"bd0c36686954938a1d2bf70918bc506da431e296",
"support"

View file

@ -1,2 +0,0 @@
[mix-blend-mode-animation.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[matchMedia-display-none-iframe.html]
expected: ERROR

View file

@ -3,3 +3,9 @@
[scroll-behavior: smooth on DIV element]
expected: FAIL
[Smooth scrolling while doing history navigation.]
expected: FAIL
[Instant scrolling while doing history navigation.]
expected: FAIL

View file

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

View file

@ -56,3 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript;charset=windows-1252 text/javascript]
expected: FAIL

View file

@ -11,3 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
[X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff]
expected: FAIL

View file

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

View file

@ -1,4 +0,0 @@
[creating_browsing_context_test_01.html]
[first argument: absolute url]
expected: FAIL

View file

@ -1,24 +1,5 @@
[open-features-negative-innerwidth-innerheight.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`]
expected: FAIL
[features "innerheight=-404.5" should NOT set "height=404"]
expected: TIMEOUT
[features "innerwidth=-404.5" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=-404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerheight=-404e1" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=-404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerwidth=-404e1" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -1,24 +1,5 @@
[open-features-negative-screenx-screeny.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for legacy `screenx`, `screeny`]
expected: FAIL
[features "screenx=-204" should NOT set "left=204"]
expected: TIMEOUT
[features "screeny=-204" should NOT set "top=204"]
expected: TIMEOUT
[features "screeny=-204.5" should NOT set "top=204"]
expected: TIMEOUT
[features "screeny=-0" should NOT set "top=204"]
expected: TIMEOUT
[features "screenx=-0" should NOT set "left=204"]
expected: TIMEOUT
[features "screenx=-204.5" should NOT set "left=204"]
expected: TIMEOUT

View file

@ -1,24 +1,5 @@
[open-features-negative-width-height.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for `width`, `height`]
expected: FAIL
[features "height=-404" should NOT set "height=404"]
expected: TIMEOUT
[features "height=-404e1" should NOT set "height=404"]
expected: TIMEOUT
[features "height=-404.5" should NOT set "height=404"]
expected: TIMEOUT
[features "width=-404" should NOT set "width=404"]
expected: TIMEOUT
[features "width=-404e1" should NOT set "width=404"]
expected: TIMEOUT
[features "width=-404.5" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -1,48 +1,32 @@
[open-features-non-integer-height.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `height`]
expected: FAIL
[features "height=405*3" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405.32" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405e1" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405/5" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405^4" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405.5" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405e-1" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405 " should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405LLl" should set "height=405"]
expected: TIMEOUT
[features "height=/404" should NOT set "height=404"]
expected: TIMEOUT
[top=0,left=0,width=401,: absence of feature "height" should be treated same as "height=0"]
expected: TIMEOUT
[top=0,left=0: absence of feature "height" should be treated same as "height=0"]
expected: TIMEOUT
[features "height=_404" should NOT set "height=404"]
expected: TIMEOUT
[features "height=L404" should NOT set "height=404"]
expected: TIMEOUT
expected: FAIL

View file

@ -1,42 +1,32 @@
[open-features-non-integer-innerheight.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `innerheight`]
expected: FAIL
[features "innerheight=405e-1" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405LLl" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405^4" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405e1" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405 " should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405/5" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405.32" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405.5" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405*3" should set "height=405"]
expected: TIMEOUT
[features "innerheight=_404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=L404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=/404" should NOT set "height=404"]
expected: TIMEOUT
expected: FAIL

View file

@ -1,42 +1,32 @@
[open-features-non-integer-innerwidth.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `innerwidth`]
expected: FAIL
[features "innerwidth=405e-1" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405*3" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405.5" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405e1" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405.32" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405 " should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405LLl" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405/5" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405^4" should set "width=405"]
expected: TIMEOUT
[features "innerwidth=/404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=_404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=L404" should NOT set "width=404"]
expected: TIMEOUT
expected: FAIL

View file

@ -1,42 +1,32 @@
[open-features-non-integer-left.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `left`]
expected: FAIL
[features "left=105e1" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105 " should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105/5" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105e-1" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105^4" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105LLl" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105.32" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105*3" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105.5" should set "left=105"]
expected: TIMEOUT
[features "left=L104" should NOT set "left=104"]
expected: TIMEOUT
[features "left=/104" should NOT set "left=104"]
expected: TIMEOUT
[features "left=_104" should NOT set "left=104"]
expected: TIMEOUT
expected: FAIL

View file

@ -1,42 +1,32 @@
[open-features-non-integer-screenx.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `screenx`]
expected: FAIL
[features "screenx=105.5" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105e1" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105 " should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105*3" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105e-1" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105^4" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105LLl" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105/5" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105.32" should set "left=105"]
expected: TIMEOUT
[features "screenx=_104" should NOT set "left=104"]
expected: TIMEOUT
[features "screenx=L104" should NOT set "left=104"]
expected: TIMEOUT
[features "screenx=/104" should NOT set "left=104"]
expected: TIMEOUT
expected: FAIL

View file

@ -1,42 +1,32 @@
[open-features-non-integer-screeny.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `screeny`]
expected: FAIL
[features "screeny=405^4" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405e-1" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405LLl" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405e1" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405 " should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405/5" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405*3" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405.32" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405.5" should set "height=405"]
expected: TIMEOUT
[features "screeny=_404" should NOT set "height=404"]
expected: TIMEOUT
[features "screeny=L404" should NOT set "height=404"]
expected: TIMEOUT
[features "screeny=/404" should NOT set "height=404"]
expected: TIMEOUT
expected: FAIL

View file

@ -1,42 +1,32 @@
[open-features-non-integer-top.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `top`]
expected: FAIL
[features "top=105/5" should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105*3" should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105LLl" should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105e-1" should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105.32" should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105e1" should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105 " should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105^4" should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105.5" should set "top=105"]
expected: TIMEOUT
[features "top=/104" should NOT set "top=104"]
expected: TIMEOUT
[features "top=_104" should NOT set "top=104"]
expected: TIMEOUT
[features "top=L104" should NOT set "top=104"]
expected: TIMEOUT
expected: FAIL

View file

@ -1,48 +1,32 @@
[open-features-non-integer-width.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `width`]
expected: FAIL
[features "width=405^4" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405.5" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405e1" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405 " should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405.32" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405LLl" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405*3" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405e-1" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405/5" should set "width=405"]
expected: TIMEOUT
[top=0,left=0: absence of feature "width" should be treated same as "width=0"]
expected: TIMEOUT
[features "width=_404" should NOT set "width=404"]
expected: TIMEOUT
[top=0,left=0,height=401,: absence of feature "width" should be treated same as "width=0"]
expected: TIMEOUT
[features "width=/404" should NOT set "width=404"]
expected: TIMEOUT
[features "width=L404" should NOT set "width=404"]
expected: TIMEOUT
expected: FAIL

View file

@ -0,0 +1,5 @@
[window-failure.https.html]
expected: TIMEOUT
[SharedArrayBuffer and a cross-site <iframe>]
expected: TIMEOUT

View file

@ -0,0 +1,10 @@
[non-active-document.html]
[DOMParser]
expected: FAIL
[createHTMLDocument]
expected: FAIL
[<template>]
expected: FAIL

View file

@ -1,7 +0,0 @@
[null-image-source.html]
[img with picture parent]
expected: FAIL
[img with empty srcset]
expected: FAIL

View file

@ -0,0 +1,7 @@
[toggleEvent.html]
[Calling open twice on 'details' fires only one toggle event]
expected: FAIL
[Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element]
expected: FAIL

View file

@ -1,5 +1,4 @@
[promise-rejection-events.html]
expected: TIMEOUT
[delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire]
expected: FAIL
@ -9,6 +8,3 @@
[no unhandledrejection/rejectionhandled: rejection handler attached synchronously to a promise created from createImageBitmap]
expected: FAIL
[rejectionhandled is dispatched from a queued task, and not immediately]
expected: TIMEOUT

View file

@ -0,0 +1,181 @@
[close.any.html]
[unspecified close code with non-empty reason should set code to 1000]
expected: FAIL
[canceling the readable with an invalid code should be ignored]
expected: FAIL
[close() with an overlong reason should throw]
expected: FAIL
[close() with invalid code 5000 should throw]
expected: FAIL
[aborting the writable with a DOMException should be ignored]
expected: FAIL
[close() with invalid code 999 should throw]
expected: FAIL
[canceling the readable with a DOMException should be ignored]
expected: FAIL
[close(true) should throw a TypeError]
expected: FAIL
[canceling the readable with a reason but no code should be ignored]
expected: FAIL
[closing the writable should result in a clean close]
expected: FAIL
[close during handshake should work]
expected: FAIL
[canceling the readable should result in a clean close]
expected: FAIL
[aborting the writable with an invalid code should be ignored]
expected: FAIL
[aborting the writable with a code and reason should use them]
expected: FAIL
[canceling the readable with a code and reason should use them]
expected: FAIL
[canceling the readable with a code should send that code]
expected: FAIL
[close() with invalid code 2999 should throw]
expected: FAIL
[aborting the writable with a reason but no code should be ignored]
expected: FAIL
[aborting the writable with an invalid reason should be ignored]
expected: FAIL
[writer close() promise should not resolve until handshake completes]
expected: FAIL
[aborting the writable with a code should send that code]
expected: FAIL
[canceling the readable with an invalid reason should be ignored]
expected: FAIL
[close() with invalid code 1001 should throw]
expected: FAIL
[close code should be sent to server and reflected back]
expected: FAIL
[no close argument should send empty Close frame]
expected: FAIL
[unspecified close code with empty reason should send empty Close frame]
expected: FAIL
[aborting the writable should result in a clean close]
expected: FAIL
[unspecified close code should send empty Close frame]
expected: FAIL
[close.any.worker.html]
[unspecified close code with non-empty reason should set code to 1000]
expected: FAIL
[canceling the readable with an invalid code should be ignored]
expected: FAIL
[close() with an overlong reason should throw]
expected: FAIL
[close() with invalid code 5000 should throw]
expected: FAIL
[aborting the writable with a DOMException should be ignored]
expected: FAIL
[close() with invalid code 999 should throw]
expected: FAIL
[canceling the readable with a DOMException should be ignored]
expected: FAIL
[close(true) should throw a TypeError]
expected: FAIL
[canceling the readable with a reason but no code should be ignored]
expected: FAIL
[closing the writable should result in a clean close]
expected: FAIL
[close during handshake should work]
expected: FAIL
[canceling the readable should result in a clean close]
expected: FAIL
[aborting the writable with an invalid code should be ignored]
expected: FAIL
[aborting the writable with a code and reason should use them]
expected: FAIL
[canceling the readable with a code and reason should use them]
expected: FAIL
[canceling the readable with a code should send that code]
expected: FAIL
[close() with invalid code 2999 should throw]
expected: FAIL
[aborting the writable with a reason but no code should be ignored]
expected: FAIL
[aborting the writable with an invalid reason should be ignored]
expected: FAIL
[writer close() promise should not resolve until handshake completes]
expected: FAIL
[aborting the writable with a code should send that code]
expected: FAIL
[canceling the readable with an invalid reason should be ignored]
expected: FAIL
[close() with invalid code 1001 should throw]
expected: FAIL
[close code should be sent to server and reflected back]
expected: FAIL
[no close argument should send empty Close frame]
expected: FAIL
[unspecified close code with empty reason should send empty Close frame]
expected: FAIL
[aborting the writable should result in a clean close]
expected: FAIL
[unspecified close code should send empty Close frame]
expected: FAIL
[close.any.serviceworker.html]
[close]
expected: FAIL
[close.any.sharedworker.html]
[close]
expected: FAIL

View file

@ -0,0 +1,61 @@
[constructor.any.worker.html]
[constructing with a valid URL should work]
expected: FAIL
[setting a protocol in the constructor should work]
expected: FAIL
[wss.connection should resolve to the right types]
expected: FAIL
[constructing with no URL should throw]
expected: FAIL
[constructing with invalid options should throw]
expected: FAIL
[connection failure should reject the promises]
expected: FAIL
[protocols should be required to be a list]
expected: FAIL
[constructing with an invalid URL should throw]
expected: FAIL
[constructor.any.sharedworker.html]
[constructor]
expected: FAIL
[constructor.any.html]
[constructing with a valid URL should work]
expected: FAIL
[setting a protocol in the constructor should work]
expected: FAIL
[wss.connection should resolve to the right types]
expected: FAIL
[constructing with no URL should throw]
expected: FAIL
[constructing with invalid options should throw]
expected: FAIL
[connection failure should reject the promises]
expected: FAIL
[protocols should be required to be a list]
expected: FAIL
[constructing with an invalid URL should throw]
expected: FAIL
[constructor.any.serviceworker.html]
[constructor]
expected: FAIL

View file

@ -0,0 +1,2 @@
[Worker-constructor.html]
expected: ERROR

View file

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Test: parsing grid-template-columns with invalid values</title>
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#propdef-grid-template-columns">
<meta name="assert" content="grid-template-columns supports only the grammar 'none | <track-list> | <auto-track-list>'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_invalid_value("grid-template-columns", '-10px');
test_invalid_value("grid-template-columns", '-20%');
test_invalid_value("grid-template-columns", '-5fr');
test_invalid_value("grid-template-columns", 'minmax(5fr, calc(0.5em + 10px))');
test_invalid_value("grid-template-columns", 'minmax(-10px, auto)');
test_invalid_value("grid-template-columns", 'minmax(-20%, max-content)');
test_invalid_value("grid-template-columns", 'minmax(min-content, -20%)');
test_invalid_value("grid-template-columns", 'fit-content(-10px)');
test_invalid_value("grid-template-columns", 'fit-content(-20%)');
test_invalid_value("grid-template-columns", '[one] 10px [two three] repeat(20%) [four five six] 3fr [seven]');
test_invalid_value("grid-template-columns", '[one]');
test_invalid_value("grid-template-columns", '[one] 10px [two] [three]');
test_invalid_value("grid-template-columns", 'repeat(auto-fill, -10px)');
test_invalid_value("grid-template-columns", 'repeat(auto-fill, 10px) repeat(auto-fit, 20%)');
</script>
</body>
</html>

View file

@ -0,0 +1,79 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Test: parsing grid-template-columns with valid values</title>
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#propdef-grid-template-columns">
<meta name="assert" content="grid-template-columns supports the full grammar 'none | <track-list> | <auto-track-list>'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_valid_value("grid-template-columns", "none");
// track-size <fixed-breadth> = <length-percentage> | <flex> | min-content | max-content | auto
test_valid_value("grid-template-columns", '10px');
test_valid_value("grid-template-columns", '20%');
test_valid_value("grid-template-columns", 'calc(-0.5em + 10px)');
test_valid_value("grid-template-columns", 'calc(0.5em + 10px)');
test_valid_value("grid-template-columns", 'calc(30% + 40vw)');
test_valid_value("grid-template-columns", '5fr');
test_valid_value("grid-template-columns", 'min-content');
test_valid_value("grid-template-columns", 'max-content');
test_valid_value("grid-template-columns", 'auto');
// track-size minmax( <inflexible-breadth> , <track-breadth> )
test_valid_value("grid-template-columns", 'minmax(10px, auto)');
test_valid_value("grid-template-columns", 'minmax(20%, max-content)');
test_valid_value("grid-template-columns", 'minmax(calc(-0.5em + 10px), min-content)');
test_valid_value("grid-template-columns", 'minmax(calc(0.5em + 10px), 5fr)');
test_valid_value("grid-template-columns", 'minmax(calc(30% + 40vw), 10px)');
test_valid_value("grid-template-columns", 'minmax(min-content, 20%)');
test_valid_value("grid-template-columns", 'minmax(max-content, calc(-0.5em + 10px))');
test_valid_value("grid-template-columns", 'minmax(auto, calc(0.5em + 10px))');
// track-size fit-content( <length-percentage> )
test_valid_value("grid-template-columns", 'fit-content(10px)');
test_valid_value("grid-template-columns", 'fit-content(20%)');
test_valid_value("grid-template-columns", 'fit-content(calc(-0.5em + 10px))');
test_valid_value("grid-template-columns", 'fit-content(calc(0.5em + 10px))');
test_valid_value("grid-template-columns", 'fit-content(calc(30% + 40vw))');
// <track-repeat> = repeat( [ <positive-integer> ] , [ <line-names>? <track-size> ]+ <line-names>? )
// 'repeat(1, [] 10px)' in Blink
// 'repeat(1, 10px)' in Firefox
// '[] 10px' in Safari
// '10px' in Edge 18
test_valid_value("grid-template-columns", 'repeat(1, [] 10px)', ['repeat(1, 10px)', 'repeat(1, [] 10px)']);
// 'repeat(1, [one two] 20%)' in Blink, Firefox
// '[one two] 20%' in Safari, Edge 18
test_valid_value("grid-template-columns", 'repeat(1, [one two] 20%)');
// 'repeat(2, minmax(10px, auto))' in Blink, Firefox, Edge 18
// 'minmax(10px, auto) minmax(10px, auto)' in Safari
test_valid_value("grid-template-columns", 'repeat(2, minmax(10px, auto))');
test_valid_value("grid-template-columns", 'repeat(2, fit-content(20%) [three four] 30px 40px [five six])');
// <track-list> = [ <line-names>? [ <track-size> | <track-repeat> ] ]+ <line-names>?
test_valid_value("grid-template-columns", 'min-content repeat(5, minmax(10px, auto))');
// <auto-repeat> = repeat( [ auto-fill | auto-fit ] , [ <line-names>? <fixed-size> ]+ <line-names>? )
test_valid_value("grid-template-columns", 'repeat(auto-fill, 10px)');
test_valid_value("grid-template-columns", 'repeat(auto-fit, [one] 20%)');
test_valid_value("grid-template-columns", 'repeat(auto-fill, minmax(30px, 5fr) [two])');
test_valid_value("grid-template-columns", 'repeat(auto-fit, [three] minmax(max-content, 6em) [four])');
// <auto-track-list> =
// [ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>?
// <auto-repeat>
// [ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>?
test_valid_value("grid-template-columns", '[one] repeat(2, minmax(10px, auto)) [two] 30px [three] repeat(auto-fill, 10px) 40px [four five] repeat(2, minmax(10px, auto)) [six]');
</script>
</body>
</html>

View file

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Test: parsing grid-template-rows with invalid values</title>
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#propdef-grid-template-rows">
<meta name="assert" content="grid-template-rows supports only the grammar 'none | <track-list> | <auto-track-list>'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_invalid_value("grid-template-rows", '-10px');
test_invalid_value("grid-template-rows", '-20%');
test_invalid_value("grid-template-rows", '-5fr');
test_invalid_value("grid-template-rows", 'minmax(5fr, calc(0.5em + 10px))');
test_invalid_value("grid-template-rows", 'minmax(-10px, auto)');
test_invalid_value("grid-template-rows", 'minmax(-20%, max-content)');
test_invalid_value("grid-template-rows", 'minmax(min-content, -20%)');
test_invalid_value("grid-template-rows", 'fit-content(-10px)');
test_invalid_value("grid-template-rows", 'fit-content(-20%)');
test_invalid_value("grid-template-rows", '[one] 10px [two three] repeat(20%) [four five six] 3fr [seven]');
test_invalid_value("grid-template-rows", '[one]');
test_invalid_value("grid-template-rows", '[one] 10px [two] [three]');
test_invalid_value("grid-template-rows", 'repeat(auto-fill, -10px)');
test_invalid_value("grid-template-rows", 'repeat(auto-fill, 10px) repeat(auto-fit, 20%)');
</script>
</body>
</html>

View file

@ -0,0 +1,79 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Test: parsing grid-template-rows with valid values</title>
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#propdef-grid-template-rows">
<meta name="assert" content="grid-template-rows supports the full grammar 'none | <track-list> | <auto-track-list>'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_valid_value("grid-template-rows", "none");
// track-size <fixed-breadth> = <length-percentage> | <flex> | min-content | max-content | auto
test_valid_value("grid-template-rows", '10px');
test_valid_value("grid-template-rows", '20%');
test_valid_value("grid-template-rows", 'calc(-0.5em + 10px)');
test_valid_value("grid-template-rows", 'calc(0.5em + 10px)');
test_valid_value("grid-template-rows", 'calc(30% + 40vw)');
test_valid_value("grid-template-rows", '5fr');
test_valid_value("grid-template-rows", 'min-content');
test_valid_value("grid-template-rows", 'max-content');
test_valid_value("grid-template-rows", 'auto');
// track-size minmax( <inflexible-breadth> , <track-breadth> )
test_valid_value("grid-template-rows", 'minmax(10px, auto)');
test_valid_value("grid-template-rows", 'minmax(20%, max-content)');
test_valid_value("grid-template-rows", 'minmax(calc(-0.5em + 10px), min-content)');
test_valid_value("grid-template-rows", 'minmax(calc(0.5em + 10px), 5fr)');
test_valid_value("grid-template-rows", 'minmax(calc(30% + 40vw), 10px)');
test_valid_value("grid-template-rows", 'minmax(min-content, 20%)');
test_valid_value("grid-template-rows", 'minmax(max-content, calc(-0.5em + 10px))');
test_valid_value("grid-template-rows", 'minmax(auto, calc(0.5em + 10px))');
// track-size fit-content( <length-percentage> )
test_valid_value("grid-template-rows", 'fit-content(10px)');
test_valid_value("grid-template-rows", 'fit-content(20%)');
test_valid_value("grid-template-rows", 'fit-content(calc(-0.5em + 10px))');
test_valid_value("grid-template-rows", 'fit-content(calc(0.5em + 10px))');
test_valid_value("grid-template-rows", 'fit-content(calc(30% + 40vw))');
// <track-repeat> = repeat( [ <positive-integer> ] , [ <line-names>? <track-size> ]+ <line-names>? )
// 'repeat(1, [] 10px)' in Blink
// 'repeat(1, 10px)' in Firefox
// '[] 10px' in Safari
// '10px' in Edge 18
test_valid_value("grid-template-rows", 'repeat(1, [] 10px)', ['repeat(1, 10px)', 'repeat(1, [] 10px)']);
// 'repeat(1, [one two] 20%)' in Blink, Firefox
// '[one two] 20%' in Safari, Edge 18
test_valid_value("grid-template-rows", 'repeat(1, [one two] 20%)');
// 'repeat(2, minmax(10px, auto))' in Blink, Firefox, Edge 18
// 'minmax(10px, auto) minmax(10px, auto)' in Safari
test_valid_value("grid-template-rows", 'repeat(2, minmax(10px, auto))');
test_valid_value("grid-template-rows", 'repeat(2, fit-content(20%) [three four] 30px 40px [five six])');
// <track-list> = [ <line-names>? [ <track-size> | <track-repeat> ] ]+ <line-names>?
test_valid_value("grid-template-rows", 'min-content repeat(5, minmax(10px, auto))');
// <auto-repeat> = repeat( [ auto-fill | auto-fit ] , [ <line-names>? <fixed-size> ]+ <line-names>? )
test_valid_value("grid-template-rows", 'repeat(auto-fill, 10px)');
test_valid_value("grid-template-rows", 'repeat(auto-fit, [one] 20%)');
test_valid_value("grid-template-rows", 'repeat(auto-fill, minmax(30px, 5fr) [two])');
test_valid_value("grid-template-rows", 'repeat(auto-fit, [three] minmax(max-content, 6em) [four])');
// <auto-track-list> =
// [ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>?
// <auto-repeat>
// [ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>?
test_valid_value("grid-template-rows", '[one] repeat(2, minmax(10px, auto)) [two] 30px [three] repeat(auto-fill, 10px) 40px [four five] repeat(2, minmax(10px, auto)) [six]');
</script>
</body>
</html>

View file

@ -5,6 +5,26 @@ var browserTests = [
'<div contenteditable="true"><table><tbody><tr><td><ol><li>fsdf</li></ol></td><td>fsdf</td></tr><tr><td>gghfg</td><td>fsfg</td></tr></tbody></table></div>',
[true],
{"insertOrderedList":[false,false,"false",false,true,"true"]}],
['<div contenteditable="true"><table><tr><td>[fs<br>df]</td><td>fsdf</td></tr><tr><td>gghfg</td><td>fsfg</td></tr></table></div>',
[["insertOrderedList",""]],
'<div contenteditable="true"><table><tbody><tr><td><ol><li>fs</li><li>df</li></ol></td><td>fsdf</td></tr><tr><td>gghfg</td><td>fsfg</td></tr></tbody></table></div>',
[true],
{"insertOrderedList":[false,false,"false",false,true,"true"]}],
['<div contenteditable="true"><table><tr><td>[f<b>s<br>d</b>f]</td><td>fsdf</td></tr><tr><td>gghfg</td><td>fsfg</td></tr></table></div>',
[["insertOrderedList",""]],
'<div contenteditable="true"><table><tbody><tr><td><ol><li>f<b>s</b></li><li><b>d</b>f</li></ol></td><td>fsdf</td></tr><tr><td>gghfg</td><td>fsfg</td></tr></tbody></table></div>',
[true],
{"insertOrderedList":[false,false,"false",false,true,"true"]}],
['<div contenteditable="true"><table><tr><td>[fs]<br>df</td><td>fsdf</td></tr><tr><td>gghfg</td><td>fsfg</td></tr></table></div>',
[["insertOrderedList",""]],
'<div contenteditable="true"><table><tbody><tr><td><ol><li>fs</li></ol>df</td><td>fsdf</td></tr><tr><td>gghfg</td><td>fsfg</td></tr></tbody></table></div>',
[true],
{"insertOrderedList":[false,false,"false",false,true,"true"]}],
['<div contenteditable="true"><table><tr><td>[f<b>s]<br>d</b>f</td><td>fsdf</td></tr><tr><td>gghfg</td><td>fsfg</td></tr></table></div>',
[["insertOrderedList",""]],
'<div contenteditable="true"><table><tbody><tr><td><ol><li>f<b>s</b></li></ol><b>d</b>f</td><td>fsdf</td></tr><tr><td>gghfg</td><td>fsfg</td></tr></tbody></table></div>',
[true],
{"insertOrderedList":[false,false,"false",false,true,"true"]}],
['<div contenteditable="true"><table><tr data-start=0 data-end=2><td>fsdf</td><td>fsdf</td></tr><tr><td>gghfg</td><td>fsfg</td></tr></table></div>',
[["insertOrderedList",""]],
'<div contenteditable="true"><table><tbody><tr><td><ol><li>fsdf</li></ol></td><td><ol><li>fsdf</li></ol></td></tr><tr><td>gghfg</td><td>fsfg</td></tr></tbody></table></div>',

View file

@ -0,0 +1,3 @@
<script>
parent.postMessage(new SharedArrayBuffer(10), "*");
</script>

View file

@ -0,0 +1,2 @@
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Resource-Policy: cross-site

View file

@ -0,0 +1,15 @@
<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<div id=log></div>
<script>
async_test(t => {
const frame = document.createElement("iframe");
t.add_cleanup(() => frame.remove());
frame.src = get_host_info().HTTPS_NOTSAMESITE_ORIGIN + new URL("resources/iframe-failure.html", location).pathname;
window.onmessage = t.unreached_func("Got a message event, expected a messageerror event");
window.onmessageerror = t.step_func_done();
document.body.append(frame);
}, "SharedArrayBuffer and a cross-site <iframe>");
</script>

View file

@ -0,0 +1,2 @@
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

View file

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>display: contents</title>
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling">
<meta name="assert" content="Verify that display: contents computes to display: none">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/mathml/support/mathml-fragments.js"></script>
<script>
setup({ explicit_done: true });
window.addEventListener("load", runTests);
function runTests() {
var container = document.getElementById("container");
for (tag in MathMLFragments) {
container.insertAdjacentHTML("beforeend", `<math>${MathMLFragments[tag]}</math>`);
}
test(function() {
Array.from(document.getElementsByClassName("element")).forEach(element => {
var style = window.getComputedStyle(element);
element.setAttribute("style", "display: contents");
assert_equals(style.getPropertyValue("display"), "none", `${tag}`);
});
}, "display: contents computes to display: none");
done();
}
</script>
</head>
<body>
<div id="log"></div>
<div id="container">
<math class="element"></math>
</div>
</body>
</html>

View file

@ -24,6 +24,7 @@
continue;
// TODO: Add floats too?
["display: none",
"display: contents",
"position: absolute",
"position: fixed"
].forEach(style => {

View file

@ -28,6 +28,7 @@
var s = compareSizeWithAndWithoutStyle(tag, style);
assert_approx_equals(s.element_width_delta, 30 + 40, epsilon, "left/right border");
assert_approx_equals(s.element_height_delta, 50 + 60, epsilon, "top/bottom border");
assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "preferred width");
}, `Border properties on ${tag}`);
continue;
}
@ -40,6 +41,7 @@
assert_approx_equals(s.bottom_delta, 60, epsilon, "bottom border");
assert_approx_equals(s.element_width_delta, 30 + 40, epsilon, "element width");
assert_approx_equals(s.element_height_delta, 50 + 60, epsilon, "element height");
assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "element preferred width");
}, `Border properties on ${tag}`);
test(function() {
@ -50,6 +52,7 @@
assert_approx_equals(s.bottom_delta, 60, epsilon, "bottom border");
assert_approx_equals(s.element_width_delta, 30 + 40, epsilon, "element width");
assert_approx_equals(s.element_height_delta, 50 + 60, epsilon, "element height");
assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "element preferred width");
}, `Border properties on ${tag} (rtl)`);
}

View file

@ -30,6 +30,7 @@
assert_approx_equals(s.height_delta, 50 + 60, epsilon, "top/bottom margin");
assert_approx_equals(s.element_width_delta, 0, epsilon, "element width");
assert_approx_equals(s.element_height_delta, 0, epsilon, "element height");
assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "preferred width");
}, `Margin properties on ${tag}`);
continue;
}
@ -42,6 +43,7 @@
assert_approx_equals(s.bottom_delta, 60, epsilon, "bottom margin");
assert_approx_equals(s.element_width_delta, 0, epsilon, "element width");
assert_approx_equals(s.element_height_delta, 0, epsilon, "element height");
assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "preferred width");
}, `Margin properties on ${tag}`);
test(function() {
@ -52,6 +54,7 @@
assert_approx_equals(s.bottom_delta, 60, epsilon, "bottom margin");
assert_approx_equals(s.element_width_delta, 0, epsilon, "element width");
assert_approx_equals(s.element_height_delta, 0, epsilon, "element height");
assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "preferred width");
}, `Margin properties on ${tag} (rtl)`);
test(function() {
@ -64,6 +67,7 @@
assert_approx_equals(s.bottom_delta, 60 * 2, epsilon, "bottom margin");
assert_approx_equals(s.element_width_delta, 0, epsilon, "element width");
assert_approx_equals(s.element_height_delta, 0, epsilon, "element height");
assert_approx_equals(s.preferred_width_delta, (30 + 40) * 2, epsilon, "preferred width");
}, `Margin properties on ${tag} (no margin-collapsing)`);
}

View file

@ -28,6 +28,7 @@
var s = compareSizeWithAndWithoutStyle(tag, style);
assert_approx_equals(s.element_width_delta, 30 + 40, epsilon, "left/right padding");
assert_approx_equals(s.element_height_delta, 50 + 60, epsilon, "top/bottom padding");
assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "preferred width");
}, `Padding properties on ${tag}`);
continue;
}
@ -40,6 +41,7 @@
assert_approx_equals(s.bottom_delta, 60, epsilon, "bottom padding");
assert_approx_equals(s.element_width_delta, 30 + 40, epsilon, "element width");
assert_approx_equals(s.element_height_delta, 50 + 60, epsilon, "element height");
assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "preferred width");
}, `Padding properties on ${tag}`);
test(function() {
@ -50,6 +52,7 @@
assert_approx_equals(s.bottom_delta, 60, epsilon, "bottom padding");
assert_approx_equals(s.element_width_delta, 30 + 40, epsilon, "element width");
assert_approx_equals(s.element_height_delta, 50 + 60, epsilon, "element height");
assert_approx_equals(s.preferred_width_delta, 30 + 40, epsilon, "preferred width");
}, `Padding properties on ${tag} (rtl)`);
}

View file

@ -1,25 +1,10 @@
<!DOCTYPE html>
<title>DocumentAndElementEventHandlers / clipboard events for MathML</title>
<link
rel="help"
href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"
/>
<link
rel="help"
href="https://html.spec.whatwg.org/multipage/webappapis.html#documentandelementeventhandlers"
/>
<link
rel="help"
href="https://w3c.github.io/clipboard-apis/#clipboard-event-copy"
/>
<link
rel="help"
href="https://w3c.github.io/clipboard-apis/#clipboard-event-cut"
/>
<link
rel="help"
href="https://w3c.github.io/clipboard-apis/#clipboard-event-paste"
/>
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"/>
<link rel="help" href="https://html.spec.whatwg.org/multipage/webappapis.html#documentandelementeventhandlers"/>
<link rel="help" href="https://w3c.github.io/clipboard-apis/#clipboard-event-copy"/>
<link rel="help" href="https://w3c.github.io/clipboard-apis/#clipboard-event-cut"/>
<link rel="help" href="https://w3c.github.io/clipboard-apis/#clipboard-event-paste"/>
<meta
name="assert"
content="MathMLElements incorporate a functional DocumentAndElementEventHandlers interface"

View file

@ -3,10 +3,7 @@
<head>
<meta charset="utf-8" />
<title>MathML 'ElementCSSInlineStyle` Mixin Tests</title>
<link
rel="help"
href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"
/>
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"/>
<style>
math * {
background-color: red;

View file

@ -3,10 +3,7 @@
<head>
<meta charset="utf-8" />
<title>MathML 'HTMLOrForeignElement` Mixin Tests</title>
<link
rel="help"
href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"
/>
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"/>
<style>
mi {
background-color: red;

View file

@ -1,18 +1,9 @@
<!DOCTYPE html>
<title>MathMLElement GlobalEventHandlers</title>
<link rel="author" title="Brian Kardell" href="mailto:bkardell@igalia.com" />
<link
rel="help"
href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"
/>
<link
rel="help"
href="https://html.spec.whatwg.org/multipage/#event-handler-idl-attributes"
/>
<link
rel="help"
href="https://html.spec.whatwg.org/multipage/#event-handler-content-attributes"
/>
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"/>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#event-handler-idl-attributes"/>
<link rel="help" href="https://html.spec.whatwg.org/multipage/#event-handler-content-attributes"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>

View file

@ -23,12 +23,13 @@ function compareSpaceWithAndWithoutStyle(tag, style, parentStyle, direction) {
if (!direction)
direction = "ltr";
document.body.insertAdjacentHTML("beforeend", `<div style="position: absolute;">\
<math><mrow dir="${direction}">${MathMLFragments[tag]}</mrow></math>\
<math><mrow dir="${direction}">${MathMLFragments[tag]}</mrow></math>\
<div style="display: inline-block"><math><mrow dir="${direction}">${MathMLFragments[tag]}</mrow></math></div>\
<div style="display: inline-block"><math><mrow dir="${direction}">${MathMLFragments[tag]}</mrow></math></div>\
</div>`);
var div = document.body.lastElementChild;
var styleMath = div.firstElementChild;
var styleDiv = div.firstElementChild;
var styleMath = styleDiv.firstElementChild;
var styleParent = styleMath.firstElementChild;
if (parentStyle)
styleParent.setAttribute("style", parentStyle);
@ -40,7 +41,8 @@ function compareSpaceWithAndWithoutStyle(tag, style, parentStyle, direction) {
var styleChildBox = styleChild.getBoundingClientRect();
var styleSpace = spaceBetween(styleChildBox, styleMathBox);
var noStyleMath = div.lastElementChild;
var noStyleDiv = div.lastElementChild;
var noStyleMath = noStyleDiv.firstElementChild;
var noStyleElement = FragmentHelper.element(noStyleMath);
var noStyleChild = FragmentHelper.forceNonEmptyElement(noStyleElement);
var noStyleMathBox = noStyleMath.getBoundingClientRect();
@ -48,9 +50,14 @@ function compareSpaceWithAndWithoutStyle(tag, style, parentStyle, direction) {
var noStyleChildBox = noStyleChild.getBoundingClientRect();
var noStyleSpace = spaceBetween(noStyleChildBox, noStyleMathBox);
var preferredWidthDelta =
styleDiv.getBoundingClientRect().width -
noStyleDiv.getBoundingClientRect().width;
div.style = "display: none;"; // Hide the div after measurement.
return {
preferred_width_delta: preferredWidthDelta,
left_delta: styleSpace.left - noStyleSpace.left,
right_delta: styleSpace.right - noStyleSpace.right,
top_delta: styleSpace.top - noStyleSpace.top,
@ -65,25 +72,32 @@ function compareSizeWithAndWithoutStyle(tag, style) {
throw `Invalid argument: ${tag}`;
document.body.insertAdjacentHTML("beforeend", `<div style="position: absolute;">\
<math>${MathMLFragments[tag]}</math>\
<math>${MathMLFragments[tag]}</math>\
<div style="display: inline-block"><math>${MathMLFragments[tag]}</math></div>\
<div style="display: inline-block"><math>${MathMLFragments[tag]}</math></div>\
</div>`);
var div = document.body.lastElementChild;
var styleMath = div.firstElementChild;
var styleDiv = div.firstElementChild;
var styleMath = styleDiv.firstElementChild;
var styleElement = FragmentHelper.element(styleMath);
styleElement.setAttribute("style", style);
var styleMathBox = styleMath.getBoundingClientRect();
var styleElementBox = styleElement.getBoundingClientRect();
var noStyleMath = div.lastElementChild;
var noStyleDiv = div.lastElementChild;
var noStyleMath = noStyleDiv.firstElementChild;
var noStyleElement = FragmentHelper.element(noStyleMath);
var noStyleMathBox = noStyleMath.getBoundingClientRect();
var noStyleElementBox = noStyleElement.getBoundingClientRect();
var preferredWidthDelta =
styleDiv.getBoundingClientRect().width -
noStyleDiv.getBoundingClientRect().width;
div.style = "display: none;"; // Hide the div after measurement.
return {
preferred_width_delta: preferredWidthDelta,
width_delta: styleMathBox.width - noStyleMathBox.width,
height_delta: styleMathBox.height - noStyleMathBox.height,
element_width_delta: styleElementBox.width - noStyleElementBox.width,

View file

@ -0,0 +1,27 @@
#!/usr/bin/python
from mod_pywebsocket import common
import time
def web_socket_do_extra_handshake(request):
pass
def web_socket_transfer_data(request):
# Wait for the close frame to arrive.
request.ws_stream.receive_message()
def web_socket_passive_closing_handshake(request):
# Echo close status code and reason
code, reason = request.ws_close_code, request.ws_close_reason
# No status received is a reserved pseudo code representing an empty code,
# so echo back an empty code in this case.
if code == common.STATUS_NO_STATUS_RECEIVED:
code = None
# The browser may error the connection if the closing handshake takes too
# long, but hopefully no browser will have a timeout this short.
time.sleep(1)
return code, reason

View file

@ -0,0 +1,9 @@
# WebSocketStream tentative tests
Tests in this directory are for the proposed "WebSocketStream" interface to the
WebSocket protocol. This is not yet standardised and browsers should not be
expected to pass these tests.
See the explainer at
https://github.com/ricea/websocketstream-explainer/blob/master/README.md for
more information about the API.

View file

@ -0,0 +1,184 @@
// META: script=../websocket.sub.js
// META: script=resources/url-constants.js
// META: global=window,worker
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
await wss.connection;
wss.close({code: 3456, reason: 'pizza'});
const { code, reason } = await wss.closed;
assert_equals(code, 3456, 'code should match');
assert_equals(reason, 'pizza', 'reason should match');
}, 'close code should be sent to server and reflected back');
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
await wss.connection;
wss.close();
const { code, reason } = await wss.closed;
assert_equals(code, 1005, 'code should be unset');
assert_equals(reason, '', 'reason should be empty');
}, 'no close argument should send empty Close frame');
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
await wss.connection;
wss.close({});
const { code, reason } = await wss.closed;
assert_equals(code, 1005, 'code should be unset');
assert_equals(reason, '', 'reason should be empty');
}, 'unspecified close code should send empty Close frame');
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
await wss.connection;
wss.close({reason: ''});
const { code, reason } = await wss.closed;
assert_equals(code, 1005, 'code should be unset');
assert_equals(reason, '', 'reason should be empty');
}, 'unspecified close code with empty reason should send empty Close frame');
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
await wss.connection;
wss.close({reason: 'non-empty'});
const { code, reason } = await wss.closed;
assert_equals(code, 1000, 'code should be set');
assert_equals(reason, 'non-empty', 'reason should match');
}, 'unspecified close code with non-empty reason should set code to 1000');
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
await wss.connection;
assert_throws(new TypeError(), () => wss.close(true),
'close should throw a TypeError');
}, 'close(true) should throw a TypeError');
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
await wss.connection;
const reason = '.'.repeat(124);
assert_throws('SyntaxError', () => wss.close({ reason }),
'close should throw a TypeError');
}, 'close() with an overlong reason should throw');
promise_test(t => {
const wss = new WebSocketStream(ECHOURL);
wss.close();
return Promise.all([
promise_rejects(t, 'NetworkError', wss.connection,
'connection promise should reject'),
promise_rejects(t, 'NetworkError', wss.closed,
'closed promise should reject')]);
}, 'close during handshake should work');
for (const invalidCode of [999, 1001, 2999, 5000]) {
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
await wss.connection;
assert_throws('InvalidAccessError', () => wss.close({ code: invalidCode }),
'close should throw a TypeError');
}, `close() with invalid code ${invalidCode} should throw`);
}
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
const { writable } = await wss.connection;
writable.getWriter().close();
const { code, reason } = await wss.closed;
assert_equals(code, 1005, 'code should be unset');
assert_equals(reason, '', 'reason should be empty');
}, 'closing the writable should result in a clean close');
promise_test(async () => {
const wss = new WebSocketStream(`${BASEURL}/delayed-passive-close`);
const { writable } = await wss.connection;
const startTime = performance.now();
await writable.getWriter().close();
const elapsed = performance.now() - startTime;
const jitterAllowance = 100;
assert_greater_than_equal(elapsed, 1000 - jitterAllowance,
'one second should have elapsed');
}, 'writer close() promise should not resolve until handshake completes');
const abortOrCancel = [
{
method: 'abort',
voweling: 'aborting',
stream: 'writable',
},
{
method: 'cancel',
voweling: 'canceling',
stream: 'readable',
},
];
for (const { method, voweling, stream } of abortOrCancel) {
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
const info = await wss.connection;
info[stream][method]();
const { code, reason } = await wss.closed;
assert_equals(code, 1005, 'code should be unset');
assert_equals(reason, '', 'reason should be empty');
}, `${voweling} the ${stream} should result in a clean close`);
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
const info = await wss.connection;
info[stream][method]({ code: 3333 });
const { code, reason } = await wss.closed;
assert_equals(code, 3333, 'code should be used');
assert_equals(reason, '', 'reason should be empty');
}, `${voweling} the ${stream} with a code should send that code`);
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
const info = await wss.connection;
info[stream][method]({ code: 3456, reason: 'set' });
const { code, reason } = await wss.closed;
assert_equals(code, 3456, 'code should be used');
assert_equals(reason, 'set', 'reason should be used');
}, `${voweling} the ${stream} with a code and reason should use them`);
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
const info = await wss.connection;
info[stream][method]({ reason: 'specified' });
const { code, reason } = await wss.closed;
assert_equals(code, 1005, 'code should be unset');
assert_equals(reason, '', 'reason should be empty');
}, `${voweling} the ${stream} with a reason but no code should be ignored`);
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
const info = await wss.connection;
info[stream][method]({ code: 999 });
const { code, reason } = await wss.closed;
assert_equals(code, 1005, 'code should be unset');
assert_equals(reason, '', 'reason should be empty');
}, `${voweling} the ${stream} with an invalid code should be ignored`);
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
const info = await wss.connection;
info[stream][method]({ code: 1000, reason: 'x'.repeat(128) });
const { code, reason } = await wss.closed;
assert_equals(code, 1005, 'code should be unset');
assert_equals(reason, '', 'reason should be empty');
}, `${voweling} the ${stream} with an invalid reason should be ignored`);
// DOMExceptions are only ignored because the |code| attribute is too small to
// be a valid WebSocket close code.
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
const info = await wss.connection;
info[stream][method](new DOMException('yes', 'DataCloneError'));
const { code, reason } = await wss.closed;
assert_equals(code, 1005, 'code should be unset');
assert_equals(reason, '', 'reason should be empty');
}, `${voweling} the ${stream} with a DOMException should be ignored`);
}

View file

@ -0,0 +1,66 @@
// META: script=../websocket.sub.js
// META: script=resources/url-constants.js
// META: global=window,worker
test(() => {
assert_throws(new TypeError(), () => new WebSocketStream(),
'constructor should throw');
}, 'constructing with no URL should throw');
test(() => {
assert_throws(new SyntaxError(), () => new WebSocketStream('invalid:'),
"constructor should throw");
}, 'constructing with an invalid URL should throw');
test(() => {
assert_throws(new TypeError(),
() => new WebSocketStream(`${BASEURL}/`, true),
"constructor should throw");
}, 'constructing with invalid options should throw');
test(() => {
assert_throws(new TypeError(),
() => new WebSocketStream(`${BASEURL}/`, {protocols: 'hi'}),
"constructor should throw");
}, 'protocols should be required to be a list');
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
await wss.connection;
assert_equals(wss.url, ECHOURL, 'url should match');
wss.close();
}, 'constructing with a valid URL should work');
promise_test(async () => {
const wss = new WebSocketStream(`${BASEURL}/protocol_array`,
{protocols: ['alpha', 'beta']});
const { readable, protocol } = await wss.connection;
assert_equals(protocol, 'alpha', 'protocol should be right');
const reader = readable.getReader();
const { value, done } = await reader.read();
assert_equals(value, 'alpha', 'message contents should match');
wss.close();
}, 'setting a protocol in the constructor should work');
promise_test(t => {
const wss = new WebSocketStream(`${BASEURL}/404`);
return Promise.all([
promise_rejects(t, 'NetworkError', wss.connection,
'connection should reject'),
promise_rejects(t, 'NetworkError', wss.closed, 'closed should reject')
]);
}, 'connection failure should reject the promises');
promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
const { readable, writable, protocol, extensions} = await wss.connection;
// Verify that |readable| really is a ReadableStream using the getReader()
// brand check. If it doesn't throw the test passes.
ReadableStream.prototype.getReader.call(readable);
// Verify that |writable| really is a WritableStream using the getWriter()
// brand check. If it doesn't throw the test passes.
WritableStream.prototype.getWriter.call(writable);
assert_equals(typeof protocol, 'string', 'protocol should be a string');
assert_equals(typeof extensions, 'string', 'extensions should be a string');
wss.close();
}, 'wss.connection should resolve to the right types');

View file

@ -0,0 +1,11 @@
// The file including this must also include ../websocket.sub.js to pick up the
// necessary constants.
const {BASEURL, ECHOURL} = (() => {
const isSecure = location.href.match(/^https:/);
const scheme = isSecure ? "wss:" : "ws:";
const port = isSecure ? __SECURE__PORT : __PORT;
const BASEURL = `${scheme}//${__SERVER__NAME}:${port}`;
const ECHOURL = `${BASEURL}/echo`;
return {BASEURL, ECHOURL};
})();