Update web-platform-tests to revision 0b22439430b6d8d9a6d43a0908e86c0366f207c0

This commit is contained in:
WPT Sync Bot 2019-07-06 10:25:38 +00:00
parent 39ec04a065
commit c8e806d0ef
93 changed files with 2118 additions and 597 deletions

View file

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

View file

@ -133615,6 +133615,18 @@
{} {}
] ]
], ],
"css/css-paint-api/hidpi/canvas-transform.https.html": [
[
"css/css-paint-api/hidpi/canvas-transform.https.html",
[
[
"/css/css-paint-api/hidpi/canvas-transform-ref.html",
"=="
]
],
{}
]
],
"css/css-paint-api/hidpi/device-pixel-ratio.https.html": [ "css/css-paint-api/hidpi/device-pixel-ratio.https.html": [
[ [
"css/css-paint-api/hidpi/device-pixel-ratio.https.html", "css/css-paint-api/hidpi/device-pixel-ratio.https.html",
@ -135571,6 +135583,54 @@
{} {}
] ]
], ],
"css/css-pseudo/first-line-change-inline-color-nested.html": [
[
"css/css-pseudo/first-line-change-inline-color-nested.html",
[
[
"/css/css-pseudo/first-line-change-inline-color-nested-ref.html",
"=="
]
],
{}
]
],
"css/css-pseudo/first-line-change-inline-color.html": [
[
"css/css-pseudo/first-line-change-inline-color.html",
[
[
"/css/css-pseudo/first-line-change-inline-color-ref.html",
"=="
]
],
{}
]
],
"css/css-pseudo/first-line-on-ancestor-block.html": [
[
"css/css-pseudo/first-line-on-ancestor-block.html",
[
[
"/css/css-pseudo/first-line-on-ancestor-block-ref.html",
"=="
]
],
{}
]
],
"css/css-pseudo/first-line-with-out-of-flow.html": [
[
"css/css-pseudo/first-line-with-out-of-flow.html",
[
[
"/css/css-pseudo/first-line-with-out-of-flow-ref.html",
"=="
]
],
{}
]
],
"css/css-pseudo/marker-and-other-pseudo-elements.html": [ "css/css-pseudo/marker-and-other-pseudo-elements.html": [
[ [
"css/css-pseudo/marker-and-other-pseudo-elements.html", "css/css-pseudo/marker-and-other-pseudo-elements.html",
@ -149807,6 +149867,42 @@
{} {}
] ]
], ],
"css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html": [
[
"css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html",
[
[
"/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-004-ref.html",
"=="
]
],
{}
]
],
"css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html": [
[
"css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html",
[
[
"/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-004-ref.html",
"=="
]
],
{}
]
],
"css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html": [
[
"css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html",
[
[
"/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-004-ref.html",
"=="
]
],
{}
]
],
"css/css-text/white-space/white-space-wrap-after-nowrap-001.html": [ "css/css-text/white-space/white-space-wrap-after-nowrap-001.html": [
[ [
"css/css-text/white-space/white-space-wrap-after-nowrap-001.html", "css/css-text/white-space/white-space-wrap-after-nowrap-001.html",
@ -200533,6 +200629,18 @@
{} {}
] ]
], ],
"html/semantics/embedded-content/the-iframe-element/iframe-modify-scrolling-attr-to-yes.html": [
[
"html/semantics/embedded-content/the-iframe-element/iframe-modify-scrolling-attr-to-yes.html",
[
[
"/html/semantics/embedded-content/the-iframe-element/iframe-modify-scrolling-attr-to-yes-ref.html",
"=="
]
],
{}
]
],
"html/semantics/embedded-content/the-iframe-element/iframe-with-base.html": [ "html/semantics/embedded-content/the-iframe-element/iframe-with-base.html": [
[ [
"html/semantics/embedded-content/the-iframe-element/iframe-with-base.html", "html/semantics/embedded-content/the-iframe-element/iframe-with-base.html",
@ -250168,6 +250276,9 @@
"css/css-paint-api/geometry-with-float-size-ref.html": [ "css/css-paint-api/geometry-with-float-size-ref.html": [
[] []
], ],
"css/css-paint-api/hidpi/canvas-transform-ref.html": [
[]
],
"css/css-paint-api/hidpi/device-pixel-ratio-ref.html": [ "css/css-paint-api/hidpi/device-pixel-ratio-ref.html": [
[] []
], ],
@ -250390,6 +250501,18 @@
"css/css-pseudo/first-line-and-placeholder-ref.html": [ "css/css-pseudo/first-line-and-placeholder-ref.html": [
[] []
], ],
"css/css-pseudo/first-line-change-inline-color-nested-ref.html": [
[]
],
"css/css-pseudo/first-line-change-inline-color-ref.html": [
[]
],
"css/css-pseudo/first-line-on-ancestor-block-ref.html": [
[]
],
"css/css-pseudo/first-line-with-out-of-flow-ref.html": [
[]
],
"css/css-pseudo/marker-and-other-pseudo-elements-ref.html": [ "css/css-pseudo/marker-and-other-pseudo-elements-ref.html": [
[] []
], ],
@ -253540,6 +253663,9 @@
"css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-003-ref.html": [ "css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-003-ref.html": [
[] []
], ],
"css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-004-ref.html": [
[]
],
"css/css-text/white-space/reference/white-space-wrap-after-nowrap-001-ref.html": [ "css/css-text/white-space/reference/white-space-wrap-after-nowrap-001-ref.html": [
[] []
], ],
@ -269302,6 +269428,9 @@
"html/semantics/embedded-content/the-iframe-element/cross_origin_grandchild.html": [ "html/semantics/embedded-content/the-iframe-element/cross_origin_grandchild.html": [
[] []
], ],
"html/semantics/embedded-content/the-iframe-element/iframe-modify-scrolling-attr-to-yes-ref.html": [
[]
],
"html/semantics/embedded-content/the-iframe-element/iframe-with-base-ref.html": [ "html/semantics/embedded-content/the-iframe-element/iframe-with-base-ref.html": [
[] []
], ],
@ -269359,6 +269488,9 @@
"html/semantics/embedded-content/the-iframe-element/support/iframe-trying-to-navigate-itself.html": [ "html/semantics/embedded-content/the-iframe-element/support/iframe-trying-to-navigate-itself.html": [
[] []
], ],
"html/semantics/embedded-content/the-iframe-element/support/iframe-which-content-height-equals-400px.html": [
[]
],
"html/semantics/embedded-content/the-iframe-element/support/iframe_sandbox_001.htm": [ "html/semantics/embedded-content/the-iframe-element/support/iframe_sandbox_001.htm": [
[] []
], ],
@ -271219,9 +271351,6 @@
"infrastructure/metadata/infrastructure/server/title.any.js.ini": [ "infrastructure/metadata/infrastructure/server/title.any.js.ini": [
[] []
], ],
"infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini": [
[]
],
"infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini": [ "infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini": [
[] []
], ],
@ -273385,10 +273514,10 @@
"pointerevents/resources/pointerevent_fractional_coordinates-iframe.html": [ "pointerevents/resources/pointerevent_fractional_coordinates-iframe.html": [
[] []
], ],
"pointerevents/resources/pointerevent_mouse_pointercapture-iframe.html": [ "pointerevents/resources/pointerevent_pointerId_scope-iframe.html": [
[] []
], ],
"pointerevents/resources/pointerevent_pointerId_scope-iframe.html": [ "pointerevents/resources/pointerevent_pointercapture-iframe.html": [
[] []
], ],
"pointerevents/resources/pointerevent_pointerrawupdate_in_pointerlock-iframe.html": [ "pointerevents/resources/pointerevent_pointerrawupdate_in_pointerlock-iframe.html": [
@ -278149,6 +278278,9 @@
"subresource-integrity/ed25519-style.css.headers": [ "subresource-integrity/ed25519-style.css.headers": [
[] []
], ],
"subresource-integrity/image.png": [
[]
],
"subresource-integrity/script.js": [ "subresource-integrity/script.js": [
[] []
], ],
@ -301768,6 +301900,12 @@
{} {}
] ]
], ],
"animation-worklet/worklet-animation-animator-name.https.html": [
[
"animation-worklet/worklet-animation-animator-name.https.html",
{}
]
],
"animation-worklet/worklet-animation-creation.https.html": [ "animation-worklet/worklet-animation-creation.https.html": [
[ [
"animation-worklet/worklet-animation-creation.https.html", "animation-worklet/worklet-animation-creation.https.html",
@ -308493,6 +308631,18 @@
{} {}
] ]
], ],
"css/css-animations/responsive/column-rule-color-001.html": [
[
"css/css-animations/responsive/column-rule-color-001.html",
{}
]
],
"css/css-animations/responsive/column-width-001.html": [
[
"css/css-animations/responsive/column-width-001.html",
{}
]
],
"css/css-animations/style-animation-parsing.html": [ "css/css-animations/style-animation-parsing.html": [
[ [
"css/css-animations/style-animation-parsing.html", "css/css-animations/style-animation-parsing.html",
@ -313257,6 +313407,18 @@
{} {}
] ]
], ],
"css/css-masking/parsing/mask-position-invalid.html": [
[
"css/css-masking/parsing/mask-position-invalid.html",
{}
]
],
"css/css-masking/parsing/mask-position-valid.html": [
[
"css/css-masking/parsing/mask-position-valid.html",
{}
]
],
"css/css-multicol/abspos-in-multicol-with-spanner-crash.html": [ "css/css-multicol/abspos-in-multicol-with-spanner-crash.html": [
[ [
"css/css-multicol/abspos-in-multicol-with-spanner-crash.html", "css/css-multicol/abspos-in-multicol-with-spanner-crash.html",
@ -322471,9 +322633,15 @@
{} {}
] ]
], ],
"css/cssom-view/scrollIntoView-direction-rtl.html": [ "css/cssom-view/scrollIntoView-horizontal-tb-writing-mode-and-rtl-direction.html": [
[ [
"css/cssom-view/scrollIntoView-direction-rtl.html", "css/cssom-view/scrollIntoView-horizontal-tb-writing-mode-and-rtl-direction.html",
{}
]
],
"css/cssom-view/scrollIntoView-horizontal-tb-writing-mode.html": [
[
"css/cssom-view/scrollIntoView-horizontal-tb-writing-mode.html",
{} {}
] ]
], ],
@ -322507,6 +322675,18 @@
{} {}
] ]
], ],
"css/cssom-view/scrollIntoView-vertical-lr-writing-mode-and-rtl-direction.html": [
[
"css/cssom-view/scrollIntoView-vertical-lr-writing-mode-and-rtl-direction.html",
{}
]
],
"css/cssom-view/scrollIntoView-vertical-lr-writing-mode.html": [
[
"css/cssom-view/scrollIntoView-vertical-lr-writing-mode.html",
{}
]
],
"css/cssom-view/scrollIntoView-vertical-rl-writing-mode.html": [ "css/cssom-view/scrollIntoView-vertical-rl-writing-mode.html": [
[ [
"css/cssom-view/scrollIntoView-vertical-rl-writing-mode.html", "css/cssom-view/scrollIntoView-vertical-rl-writing-mode.html",
@ -357198,14 +357378,6 @@
{} {}
] ]
], ],
"infrastructure/testdriver/actions/actionsWithKeyPressed.html": [
[
"infrastructure/testdriver/actions/actionsWithKeyPressed.html",
{
"testdriver": true
}
]
],
"infrastructure/testdriver/actions/elementPosition.html": [ "infrastructure/testdriver/actions/elementPosition.html": [
[ [
"infrastructure/testdriver/actions/elementPosition.html", "infrastructure/testdriver/actions/elementPosition.html",
@ -373743,14 +373915,6 @@
} }
] ]
], ],
"pointerevents/pointerevent_mouse_pointercapture_in_frame.html": [
[
"pointerevents/pointerevent_mouse_pointercapture_in_frame.html",
{
"testdriver": true
}
]
],
"pointerevents/pointerevent_on_event_handlers.html": [ "pointerevents/pointerevent_on_event_handlers.html": [
[ [
"pointerevents/pointerevent_on_event_handlers.html", "pointerevents/pointerevent_on_event_handlers.html",
@ -373765,6 +373929,14 @@
} }
] ]
], ],
"pointerevents/pointerevent_pointercapture_in_frame.html": [
[
"pointerevents/pointerevent_pointercapture_in_frame.html",
{
"testdriver": true
}
]
],
"pointerevents/pointerevent_pointerenter_does_not_bubble.html": [ "pointerevents/pointerevent_pointerenter_does_not_bubble.html": [
[ [
"pointerevents/pointerevent_pointerenter_does_not_bubble.html", "pointerevents/pointerevent_pointerenter_does_not_bubble.html",
@ -412985,6 +413157,12 @@
} }
] ]
], ],
"xhr/sync-xhr-and-window-onload.html": [
[
"xhr/sync-xhr-and-window-onload.html",
{}
]
],
"xhr/sync-xhr-supported-by-feature-policy.html": [ "xhr/sync-xhr-supported-by-feature-policy.html": [
[ [
"xhr/sync-xhr-supported-by-feature-policy.html", "xhr/sync-xhr-supported-by-feature-policy.html",
@ -441860,6 +442038,10 @@
"dba3aa8dc8dfa6f674477d9e71614b7b7288d9dd", "dba3aa8dc8dfa6f674477d9e71614b7b7288d9dd",
"testharness" "testharness"
], ],
"animation-worklet/worklet-animation-animator-name.https.html": [
"bd886ccd02094c8b1eee1fb31a1700f940ba2cbd",
"testharness"
],
"animation-worklet/worklet-animation-cancel-ref.html": [ "animation-worklet/worklet-animation-cancel-ref.html": [
"d44927374703ef2b38d3ed0c9570609b62baec65", "d44927374703ef2b38d3ed0c9570609b62baec65",
"support" "support"
@ -529420,6 +529602,14 @@
"fb74d7fa7d062d60153d47913df9eb2b0c7267c8", "fb74d7fa7d062d60153d47913df9eb2b0c7267c8",
"testharness" "testharness"
], ],
"css/css-animations/responsive/column-rule-color-001.html": [
"9953db43545990d9f6e0941ee89f10dc83e46438",
"testharness"
],
"css/css-animations/responsive/column-width-001.html": [
"7697eec324064dd6bd1fd75f16fdff5d3050315d",
"testharness"
],
"css/css-animations/style-animation-parsing.html": [ "css/css-animations/style-animation-parsing.html": [
"792fda33ed8b0bacf355e62066ec05d54cc5c729", "792fda33ed8b0bacf355e62066ec05d54cc5c729",
"testharness" "testharness"
@ -554160,6 +554350,14 @@
"bd14dfd1b5c9acb697dc4f7afc21e1fb656a377a", "bd14dfd1b5c9acb697dc4f7afc21e1fb656a377a",
"testharness" "testharness"
], ],
"css/css-masking/parsing/mask-position-invalid.html": [
"c246a1e795eea6a9e31fe1155d55ceb8532d6032",
"testharness"
],
"css/css-masking/parsing/mask-position-valid.html": [
"efdf55a0182ae701d459c1206b18ba74625e5f95",
"testharness"
],
"css/css-masking/test-mask-ref.html": [ "css/css-masking/test-mask-ref.html": [
"938235acbd36309fb969c55f161239bcd5ab969e", "938235acbd36309fb969c55f161239bcd5ab969e",
"support" "support"
@ -556728,6 +556926,14 @@
"65477e4b3bf369d511113cbe81d04531281edc4c", "65477e4b3bf369d511113cbe81d04531281edc4c",
"reftest" "reftest"
], ],
"css/css-paint-api/hidpi/canvas-transform-ref.html": [
"48d46e8e56109a87d9bf2c637f016c7ad52c0a5f",
"support"
],
"css/css-paint-api/hidpi/canvas-transform.https.html": [
"d160a8673c21d17e58ca20eb437c22cd76c97104",
"reftest"
],
"css/css-paint-api/hidpi/device-pixel-ratio-ref.html": [ "css/css-paint-api/hidpi/device-pixel-ratio-ref.html": [
"205cf8963bf639f8aae23457fa9b71d16c9c2c90", "205cf8963bf639f8aae23457fa9b71d16c9c2c90",
"support" "support"
@ -558048,10 +558254,42 @@
"2db3480feb5928c6a39fbf6084cf07bec0ba4767", "2db3480feb5928c6a39fbf6084cf07bec0ba4767",
"reftest" "reftest"
], ],
"css/css-pseudo/first-line-change-inline-color-nested-ref.html": [
"84becd9a78d186ba3c0e658746fd56aef8039b74",
"support"
],
"css/css-pseudo/first-line-change-inline-color-nested.html": [
"4a58f1ea5b623ffa5acd2993be16de399cd24127",
"reftest"
],
"css/css-pseudo/first-line-change-inline-color-ref.html": [
"84becd9a78d186ba3c0e658746fd56aef8039b74",
"support"
],
"css/css-pseudo/first-line-change-inline-color.html": [
"2a5be916b01d5d12eec1a4e81d912d95c7036916",
"reftest"
],
"css/css-pseudo/first-line-first-letter-insert-crash.html": [ "css/css-pseudo/first-line-first-letter-insert-crash.html": [
"17f035dedf1ef8df71918a1eacb01e1f0b80d46b", "17f035dedf1ef8df71918a1eacb01e1f0b80d46b",
"testharness" "testharness"
], ],
"css/css-pseudo/first-line-on-ancestor-block-ref.html": [
"7193bf25eb88c5443457480f7ce27782acd9473a",
"support"
],
"css/css-pseudo/first-line-on-ancestor-block.html": [
"6b797107df80156b511b9dc58c5ee40d6114cfc4",
"reftest"
],
"css/css-pseudo/first-line-with-out-of-flow-ref.html": [
"7193bf25eb88c5443457480f7ce27782acd9473a",
"support"
],
"css/css-pseudo/first-line-with-out-of-flow.html": [
"798ecf8264e2ddb38257c6cb1174bcc069c6e6d1",
"reftest"
],
"css/css-pseudo/idlharness.html": [ "css/css-pseudo/idlharness.html": [
"4c113fc9091fb773cabd77f1419fac9a2e99650b", "4c113fc9091fb773cabd77f1419fac9a2e99650b",
"testharness" "testharness"
@ -570312,6 +570550,10 @@
"1b50b667c03adae2db1f985e847b0106f9c6ad07", "1b50b667c03adae2db1f985e847b0106f9c6ad07",
"support" "support"
], ],
"css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-004-ref.html": [
"72e4642022af70b543990934c615471600b2bd46",
"support"
],
"css/css-text/white-space/reference/white-space-wrap-after-nowrap-001-ref.html": [ "css/css-text/white-space/reference/white-space-wrap-after-nowrap-001-ref.html": [
"80b2260cbbe6122e90c297ab1f2cd83917712030", "80b2260cbbe6122e90c297ab1f2cd83917712030",
"support" "support"
@ -570540,6 +570782,18 @@
"15e47a7adba3d4fc5534eab8811e3c91518aa771", "15e47a7adba3d4fc5534eab8811e3c91518aa771",
"reftest" "reftest"
], ],
"css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html": [
"becd4638eb068b26c00851390e393026796d7675",
"reftest"
],
"css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html": [
"f62e2e5c005d4043c02894eed87422fa6c59b824",
"reftest"
],
"css/css-text/white-space/white-space-pre-wrap-trailing-spaces-006.html": [
"820012e6ca10dec9065f7c5869c47b065b426033",
"reftest"
],
"css/css-text/white-space/white-space-wrap-after-nowrap-001.html": [ "css/css-text/white-space/white-space-wrap-after-nowrap-001.html": [
"a484f1cf9167e468063cf2205493b8e71a254470", "a484f1cf9167e468063cf2205493b8e71a254470",
"reftest" "reftest"
@ -572185,7 +572439,7 @@
"testharness" "testharness"
], ],
"css/css-transforms/parsing/scale-parsing-valid.html": [ "css/css-transforms/parsing/scale-parsing-valid.html": [
"b9afbc848a3b5ff3033d070b4f080245e0d822c5", "2ae12222f1361b6b0016ce235fad92d03b3bff45",
"testharness" "testharness"
], ],
"css/css-transforms/parsing/transform-box-invalid.html": [ "css/css-transforms/parsing/transform-box-invalid.html": [
@ -589544,8 +589798,12 @@
"cc67ce76ed9d432656b37c9c81a20e86d1bafc8d", "cc67ce76ed9d432656b37c9c81a20e86d1bafc8d",
"testharness" "testharness"
], ],
"css/cssom-view/scrollIntoView-direction-rtl.html": [ "css/cssom-view/scrollIntoView-horizontal-tb-writing-mode-and-rtl-direction.html": [
"fea92d1da5700ee0b1888941737cec9fbf9e98be", "3ef9d62a3654c5ab2dd061e34799053daeefc3a4",
"testharness"
],
"css/cssom-view/scrollIntoView-horizontal-tb-writing-mode.html": [
"49d5f5d8653260d7673268e5eb1e9491fed21f2b",
"testharness" "testharness"
], ],
"css/cssom-view/scrollIntoView-scrollMargin.html": [ "css/cssom-view/scrollIntoView-scrollMargin.html": [
@ -589568,8 +589826,16 @@
"7af5de5ff8aceb96867815354571314afd4cb07c", "7af5de5ff8aceb96867815354571314afd4cb07c",
"testharness" "testharness"
], ],
"css/cssom-view/scrollIntoView-vertical-lr-writing-mode-and-rtl-direction.html": [
"3301141ee0115fc941240dc76b27d988032273ae",
"testharness"
],
"css/cssom-view/scrollIntoView-vertical-lr-writing-mode.html": [
"9242a49c0bca5b5a5f190c38f9eecac73f50844b",
"testharness"
],
"css/cssom-view/scrollIntoView-vertical-rl-writing-mode.html": [ "css/cssom-view/scrollIntoView-vertical-rl-writing-mode.html": [
"56bcf214517d5220d53939fc25316ab5d6fe3da6", "cec27f412c926ab087f2cd736e4c6a7d4efb4c99",
"testharness" "testharness"
], ],
"css/cssom-view/scrollTop-display-change-ref.html": [ "css/cssom-view/scrollTop-display-change-ref.html": [
@ -606753,7 +607019,7 @@
"testharness" "testharness"
], ],
"element-timing/buffer-before-onload.html": [ "element-timing/buffer-before-onload.html": [
"88a641bbb666816da9a636ed43d23c205bf0e8f9", "68eeeefe15fdc587cdf0d4382f90c33ee3230290",
"testharness" "testharness"
], ],
"element-timing/cross-origin-element.sub.html": [ "element-timing/cross-origin-element.sub.html": [
@ -609041,7 +609307,7 @@
"support" "support"
], ],
"event-timing/bufferbeforeonload.html": [ "event-timing/bufferbeforeonload.html": [
"c91546ae41a499635573a2f7d7ea20b0283ca21f", "c30c01aa96bb9bc835bb1ce93bff86f5e99789d7",
"testharness" "testharness"
], ],
"event-timing/crossiframe.html": [ "event-timing/crossiframe.html": [
@ -609057,15 +609323,15 @@
"manual" "manual"
], ],
"event-timing/observethenonload.html": [ "event-timing/observethenonload.html": [
"e1c36e302108b1bd886130c7df38d8e536dc4473", "4145eae0a59a5da2fc5fbca95ee2721fc3b58b2b",
"testharness" "testharness"
], ],
"event-timing/onloadthenobserve-firstInput.html": [ "event-timing/onloadthenobserve-firstInput.html": [
"1422ceaa95582200ba1250dcdd53aec502b59856", "4efdfbbf006cdd8577b4d11b668974bfe20aaa84",
"testharness" "testharness"
], ],
"event-timing/onloadthenobserve.html": [ "event-timing/onloadthenobserve.html": [
"e2f9c932e6f5122af68ff84fd9495cf6fc216314", "d97228577a187ddf10f5513697d9b0424aab4588",
"testharness" "testharness"
], ],
"event-timing/only-observe-firstInput.html": [ "event-timing/only-observe-firstInput.html": [
@ -609077,7 +609343,7 @@
"testharness" "testharness"
], ],
"event-timing/resources/crossiframe-childframe.html": [ "event-timing/resources/crossiframe-childframe.html": [
"7aa4ace73afad7878205736c02a81e863127bb43", "ee9da6cad5411b477c3c11d6fc932ef132855bf7",
"support" "support"
], ],
"event-timing/resources/event-timing-test-utils.js": [ "event-timing/resources/event-timing-test-utils.js": [
@ -611265,7 +611531,7 @@
"testharness" "testharness"
], ],
"fetch/corb/script-resource-with-nonsniffable-types.tentative.sub.html": [ "fetch/corb/script-resource-with-nonsniffable-types.tentative.sub.html": [
"e599bf26f9445e9e96ee98e4bbab2895e2283fe2", "bf42d0eaf685d2d1bcdb3b9a0276daf2aae2268f",
"testharness" "testharness"
], ],
"fetch/corb/style-css-mislabeled-as-html-nosniff.sub.html": [ "fetch/corb/style-css-mislabeled-as-html-nosniff.sub.html": [
@ -625480,6 +625746,14 @@
"d245bf0b96451b3419e0e69bda86fe4859c9cbfe", "d245bf0b96451b3419e0e69bda86fe4859c9cbfe",
"testharness" "testharness"
], ],
"html/semantics/embedded-content/the-iframe-element/iframe-modify-scrolling-attr-to-yes-ref.html": [
"3758ea2cab4096beccb3722a1cc534b71c662a64",
"support"
],
"html/semantics/embedded-content/the-iframe-element/iframe-modify-scrolling-attr-to-yes.html": [
"9d85aa543d2d1732b8534fcdfa62a42d11716586",
"reftest"
],
"html/semantics/embedded-content/the-iframe-element/iframe-nosrc.html": [ "html/semantics/embedded-content/the-iframe-element/iframe-nosrc.html": [
"57189a0b884d3a55e4bb2ba1a1d3aa83066c0eb3", "57189a0b884d3a55e4bb2ba1a1d3aa83066c0eb3",
"testharness" "testharness"
@ -625828,6 +626102,10 @@
"6755d295aa179992b4cf958ee2ad8456e729677c", "6755d295aa179992b4cf958ee2ad8456e729677c",
"support" "support"
], ],
"html/semantics/embedded-content/the-iframe-element/support/iframe-which-content-height-equals-400px.html": [
"bb3dbd31182e91f43c3caa0cb8bb7ffbad485177",
"support"
],
"html/semantics/embedded-content/the-iframe-element/support/iframe_sandbox_001.htm": [ "html/semantics/embedded-content/the-iframe-element/support/iframe_sandbox_001.htm": [
"051ca5ecd78a17f499d3df76b0bd8f1b6a9dbade", "051ca5ecd78a17f499d3df76b0bd8f1b6a9dbade",
"support" "support"
@ -633284,10 +633562,6 @@
"cbae6b15410e13433c4a9fadd8c2a8cc5fbc4fdc", "cbae6b15410e13433c4a9fadd8c2a8cc5fbc4fdc",
"support" "support"
], ],
"infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini": [
"c83e8ff9261b78084f75fb584a8b5236cc28c3fd",
"support"
],
"infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini": [ "infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini": [
"49e4a40016e0eb2304a5e6e61b19556818c4ef3d", "49e4a40016e0eb2304a5e6e61b19556818c4ef3d",
"support" "support"
@ -633488,10 +633762,6 @@
"ea7973a62e0ee9cdc874879fd844b2309e944e61", "ea7973a62e0ee9cdc874879fd844b2309e944e61",
"testharness" "testharness"
], ],
"infrastructure/testdriver/actions/actionsWithKeyPressed.html": [
"74e939f5fde4773aade6ce4f7bbee573e39ae8ec",
"testharness"
],
"infrastructure/testdriver/actions/elementPosition.html": [ "infrastructure/testdriver/actions/elementPosition.html": [
"145852e7b51bd0cdc9e7b4ef5ebddcbf1c0235c5", "145852e7b51bd0cdc9e7b4ef5ebddcbf1c0235c5",
"testharness" "testharness"
@ -633629,7 +633899,7 @@
"support" "support"
], ],
"interfaces/WebIDL.idl": [ "interfaces/WebIDL.idl": [
"aa8d5bad16a971b09d74914865f7db3115c7d836", "a9157a955904c29b362dc1527f66c531ef6429ca",
"support" "support"
], ],
"interfaces/accelerometer.idl": [ "interfaces/accelerometer.idl": [
@ -634141,7 +634411,7 @@
"support" "support"
], ],
"interfaces/webxr.idl": [ "interfaces/webxr.idl": [
"c78683ef6bf6822b0320fe4c16bc9630a63884de", "2c9eac510672513e611f565fc31d2c7d8a3820da",
"support" "support"
], ],
"interfaces/worklets.idl": [ "interfaces/worklets.idl": [
@ -634613,11 +634883,11 @@
"testharness" "testharness"
], ],
"layout-instability/buffer-layout-shift.html": [ "layout-instability/buffer-layout-shift.html": [
"c1d0dc6d6eb971f39c913a78423aad046dd18a04", "5d2e69f1ff2ab2f673f432b3b69d678ff1d9a218",
"testharness" "testharness"
], ],
"layout-instability/observe-layout-shift.html": [ "layout-instability/observe-layout-shift.html": [
"25e4950f6a7d830097781923e80d82f130cf23a5", "1aa429b6b68df3872f2f1e8dbd591d8a171361ba",
"testharness" "testharness"
], ],
"layout-instability/resources/slow-image.py": [ "layout-instability/resources/slow-image.py": [
@ -639245,15 +639515,15 @@
"testharness" "testharness"
], ],
"native-file-system/FileSystemBaseHandle-remove.tentative.window.js": [ "native-file-system/FileSystemBaseHandle-remove.tentative.window.js": [
"5a8e67b8478caa022dccb10c14f64103e329e5c9", "a4eb2871104f924347f9ec8791a6381313a54483",
"testharness" "testharness"
], ],
"native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.window.js": [ "native-file-system/FileSystemDirectoryHandle-getDirectory.tentative.window.js": [
"0f8c1b13fa01d6fb5c88455eac86c969b4d04c0a", "2064fc46f05f5e30c14f77c14c5751b411d1c5e0",
"testharness" "testharness"
], ],
"native-file-system/FileSystemDirectoryHandle-getFile.tentative.window.js": [ "native-file-system/FileSystemDirectoryHandle-getFile.tentative.window.js": [
"0b27027f4eddb752b465ccfa5b3843689eb280ea", "473cad4c9c36660584c07d7b53dfc68c7f734cb4",
"testharness" "testharness"
], ],
"native-file-system/FileSystemWriter.tentative.window.js": [ "native-file-system/FileSystemWriter.tentative.window.js": [
@ -639269,7 +639539,7 @@
"support" "support"
], ],
"native-file-system/resources/test-helpers.js": [ "native-file-system/resources/test-helpers.js": [
"e29927b85247d55d6dfd6d04838d3587158aadf2", "56c93b597508a5be23da31c9a9cb89d3cb470aa7",
"support" "support"
], ],
"navigation-timing/META.yml": [ "navigation-timing/META.yml": [
@ -647300,10 +647570,6 @@
"10b19f8474a95126302f824390302007a4f63fea", "10b19f8474a95126302f824390302007a4f63fea",
"testharness" "testharness"
], ],
"pointerevents/pointerevent_mouse_pointercapture_in_frame.html": [
"83b4c1becc48339f74948fd01bdf15dfd27f96c1",
"testharness"
],
"pointerevents/pointerevent_multiple_primary_pointers_boundary_events-manual.html": [ "pointerevents/pointerevent_multiple_primary_pointers_boundary_events-manual.html": [
"eb758c70738760d217656244733755da3ee5f238", "eb758c70738760d217656244733755da3ee5f238",
"manual" "manual"
@ -647320,6 +647586,10 @@
"a645033a247437604d6b1c4614079c9193c28e9d", "a645033a247437604d6b1c4614079c9193c28e9d",
"testharness" "testharness"
], ],
"pointerevents/pointerevent_pointercapture_in_frame.html": [
"a4107fd707a2ec4cb40d22fcad786db0b42471d6",
"testharness"
],
"pointerevents/pointerevent_pointerenter_does_not_bubble.html": [ "pointerevents/pointerevent_pointerenter_does_not_bubble.html": [
"7d38de7446938de3715b19f4585d747a18912d77", "7d38de7446938de3715b19f4585d747a18912d77",
"testharness" "testharness"
@ -647572,14 +647842,14 @@
"5245a3f2e16bf13967187231db515433217912aa", "5245a3f2e16bf13967187231db515433217912aa",
"support" "support"
], ],
"pointerevents/resources/pointerevent_mouse_pointercapture-iframe.html": [
"817c6123cf96b0e966c04a48414725d794549c77",
"support"
],
"pointerevents/resources/pointerevent_pointerId_scope-iframe.html": [ "pointerevents/resources/pointerevent_pointerId_scope-iframe.html": [
"ab33560b35216ea0976d1c037650122d9336ae39", "ab33560b35216ea0976d1c037650122d9336ae39",
"support" "support"
], ],
"pointerevents/resources/pointerevent_pointercapture-iframe.html": [
"100756626987a95b242214a47704e87d5d7c2dc9",
"support"
],
"pointerevents/resources/pointerevent_pointerrawupdate_in_pointerlock-iframe.html": [ "pointerevents/resources/pointerevent_pointerrawupdate_in_pointerlock-iframe.html": [
"505fc2cae40b80612fdd67ba98918aafad2f1b0a", "505fc2cae40b80612fdd67ba98918aafad2f1b0a",
"support" "support"
@ -648073,7 +648343,7 @@
"testharness" "testharness"
], ],
"preload/subresource-integrity.html": [ "preload/subresource-integrity.html": [
"08c7854a9ecff0c6510d7ce7752de8e601e1530a", "52ec0f62bef04a618e650acfb75513a7c79683e2",
"testharness" "testharness"
], ],
"presentation-api/META.yml": [ "presentation-api/META.yml": [
@ -658161,7 +658431,7 @@
"support" "support"
], ],
"resources/sriharness.js": [ "resources/sriharness.js": [
"fe8ad2b4270c2f048a6a9eada153b1a1b2e90f1b", "d30d483e3296979ddce16b6118170a3a6c696e80",
"support" "support"
], ],
"resources/test/README.md": [ "resources/test/README.md": [
@ -663992,6 +664262,10 @@
"d2997e562fadfd208d202ce3d60d11cd937ea779", "d2997e562fadfd208d202ce3d60d11cd937ea779",
"testharness" "testharness"
], ],
"subresource-integrity/image.png": [
"01c9666a8de9d5535615aff830810e5df4b2156f",
"support"
],
"subresource-integrity/script.js": [ "subresource-integrity/script.js": [
"bfca1efbf3fb10fc98dd39600966fc97817586ee", "bfca1efbf3fb10fc98dd39600966fc97817586ee",
"support" "support"
@ -677069,7 +677343,7 @@
"testharness" "testharness"
], ],
"web-nfc/NFCWriter_push.https.html": [ "web-nfc/NFCWriter_push.https.html": [
"5a14b4090afe7b7850a36129eb3f882ac1886267", "0b804615930b12d1ac4d7bfc1b395e715de03778",
"testharness" "testharness"
], ],
"web-nfc/NFCWriter_push_signal-manual.https.html": [ "web-nfc/NFCWriter_push_signal-manual.https.html": [
@ -680257,7 +680531,7 @@
"testharness" "testharness"
], ],
"webrtc/RTCStats-helper.js": [ "webrtc/RTCStats-helper.js": [
"e91b40b6854f1cc6c59f7d81bf06a40e6dc0d31f", "5cd7d2c9e0e1f6c5c10afe529be8489dec4dd5ad",
"support" "support"
], ],
"webrtc/RTCTrackEvent-constructor.html": [ "webrtc/RTCTrackEvent-constructor.html": [
@ -688268,6 +688542,10 @@
"d23fbb8c66def47e31ad01aa7a311064ba8fddbd", "d23fbb8c66def47e31ad01aa7a311064ba8fddbd",
"testharness" "testharness"
], ],
"xhr/sync-xhr-and-window-onload.html": [
"3ba9e7ab2e8c772cfe4673b61ad8b4a4582d851d",
"testharness"
],
"xhr/sync-xhr-supported-by-feature-policy.html": [ "xhr/sync-xhr-supported-by-feature-policy.html": [
"45588bf6af54b0136c72068544bc908378f286a2", "45588bf6af54b0136c72068544bc908378f286a2",
"testharness" "testharness"

View file

@ -0,0 +1,7 @@
[column-rule-color-001.html]
[column-rule-color responds to inherited changes]
expected: FAIL
[column-rule-color responds to currentColor changes]
expected: FAIL

View file

@ -0,0 +1,10 @@
[column-width-001.html]
[column-width responds to font-size changes]
expected: FAIL
[column-width clamps to 0px]
expected: FAIL
[column-width responds to inherited changes]
expected: FAIL

View file

@ -0,0 +1,2 @@
[canvas-transform.https.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[white-space-pre-wrap-trailing-spaces-005.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[white-space-pre-wrap-trailing-spaces-006.html]
expected: FAIL

View file

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

View file

@ -0,0 +1,28 @@
[scrollIntoView-horizontal-tb-writing-mode-and-rtl-direction.html]
[scrollIntoView({"block":"center","inline":"center"})]
expected: FAIL
[scrollIntoView({"block":"end","inline":"start"})]
expected: FAIL
[scrollIntoView({"block":"start","inline":"center"})]
expected: FAIL
[scrollIntoView({"block":"center","inline":"start"})]
expected: FAIL
[scrollIntoView({"block":"start","inline":"start"})]
expected: FAIL
[scrollIntoView({"block":"end","inline":"center"})]
expected: FAIL
[scrollIntoView({"block":"end","inline":"end"})]
expected: FAIL
[scrollIntoView({"block":"start","inline":"end"})]
expected: FAIL
[scrollIntoView({"block":"center","inline":"end"})]
expected: FAIL

View file

@ -0,0 +1,28 @@
[scrollIntoView-horizontal-tb-writing-mode.html]
[scrollIntoView({"block":"center","inline":"center"})]
expected: FAIL
[scrollIntoView({"block":"end","inline":"start"})]
expected: FAIL
[scrollIntoView({"block":"start","inline":"center"})]
expected: FAIL
[scrollIntoView({"block":"center","inline":"start"})]
expected: FAIL
[scrollIntoView({"block":"start","inline":"start"})]
expected: FAIL
[scrollIntoView({"block":"end","inline":"center"})]
expected: FAIL
[scrollIntoView({"block":"end","inline":"end"})]
expected: FAIL
[scrollIntoView({"block":"start","inline":"end"})]
expected: FAIL
[scrollIntoView({"block":"center","inline":"end"})]
expected: FAIL

View file

@ -0,0 +1,28 @@
[scrollIntoView-vertical-lr-writing-mode-and-rtl-direction.html]
[scrollIntoView({"block":"center","inline":"center"})]
expected: FAIL
[scrollIntoView({"block":"end","inline":"start"})]
expected: FAIL
[scrollIntoView({"block":"start","inline":"center"})]
expected: FAIL
[scrollIntoView({"block":"center","inline":"start"})]
expected: FAIL
[scrollIntoView({"block":"start","inline":"start"})]
expected: FAIL
[scrollIntoView({"block":"end","inline":"center"})]
expected: FAIL
[scrollIntoView({"block":"end","inline":"end"})]
expected: FAIL
[scrollIntoView({"block":"start","inline":"end"})]
expected: FAIL
[scrollIntoView({"block":"center","inline":"end"})]
expected: FAIL

View file

@ -0,0 +1,28 @@
[scrollIntoView-vertical-lr-writing-mode.html]
[scrollIntoView({"block":"center","inline":"center"})]
expected: FAIL
[scrollIntoView({"block":"end","inline":"start"})]
expected: FAIL
[scrollIntoView({"block":"start","inline":"center"})]
expected: FAIL
[scrollIntoView({"block":"center","inline":"start"})]
expected: FAIL
[scrollIntoView({"block":"start","inline":"start"})]
expected: FAIL
[scrollIntoView({"block":"end","inline":"center"})]
expected: FAIL
[scrollIntoView({"block":"end","inline":"end"})]
expected: FAIL
[scrollIntoView({"block":"start","inline":"end"})]
expected: FAIL
[scrollIntoView({"block":"center","inline":"end"})]
expected: FAIL

View file

@ -26,3 +26,30 @@
[scrollIntoView({block: "end", inline: "end"})] [scrollIntoView({block: "end", inline: "end"})]
expected: FAIL expected: FAIL
[scrollIntoView({"block":"center","inline":"center"})]
expected: FAIL
[scrollIntoView({"block":"end","inline":"start"})]
expected: FAIL
[scrollIntoView({"block":"start","inline":"center"})]
expected: FAIL
[scrollIntoView({"block":"center","inline":"start"})]
expected: FAIL
[scrollIntoView({"block":"start","inline":"start"})]
expected: FAIL
[scrollIntoView({"block":"end","inline":"center"})]
expected: FAIL
[scrollIntoView({"block":"end","inline":"end"})]
expected: FAIL
[scrollIntoView({"block":"start","inline":"end"})]
expected: FAIL
[scrollIntoView({"block":"center","inline":"end"})]
expected: FAIL

View file

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

View file

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

View file

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

View file

@ -0,0 +1,4 @@
[traverse_the_history_1.html]
[Multiple history traversals from the same task]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_2.html]
[Multiple history traversals, last would be aborted]
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,5 +1,24 @@
[open-features-negative-innerwidth-innerheight.html] [open-features-negative-innerwidth-innerheight.html]
type: testharness type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`] [HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`]
expected: FAIL expected: FAIL
[features "innerheight=-404.5" should NOT set "height=404"]
expected: TIMEOUT
[features "innerwidth=-404.5" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=-404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerheight=-404e1" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=-404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerwidth=-404e1" should NOT set "width=404"]
expected: TIMEOUT

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,7 +0,0 @@
[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,4 +0,0 @@
[DOMContentLoaded-defer.html]
[The end: DOMContentLoaded and defer scripts]
expected: FAIL

View file

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

View file

@ -23,3 +23,6 @@
[domainLookupStart should be 0 in cross-origin request.] [domainLookupStart should be 0 in cross-origin request.]
expected: FAIL expected: FAIL
[responseEnd should be greater than 0 in cross-origin request.]
expected: FAIL

View file

@ -62,3 +62,9 @@
[X SNR (21.440582444964107 dB) is not greater than or equal to 65.737. Got 21.440582444964107.] [X SNR (21.440582444964107 dB) is not greater than or equal to 65.737. Got 21.440582444964107.]
expected: FAIL expected: FAIL
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t9.4836157560348511e-1\t9.5236867666244507e-1\t4.0071010589599609e-3\t4.2075103446311962e-3\t3.8985999999999999e-3\n\t[31\]\t9.2646563053131104e-1\t9.3139332532882690e-1\t4.9276947975158691e-3\t5.2906700783754857e-3\t3.8985999999999999e-3\n\t[32\]\t9.0087991952896118e-1\t9.0675884485244751e-1\t5.8789253234863281e-3\t6.4834496590358351e-3\t3.8985999999999999e-3\n\t[33\]\t8.7170630693435669e-1\t8.7856203317642212e-1\t6.8557262420654297e-3\t7.8033490899654511e-3\t3.8985999999999999e-3\n\t[34\]\t8.3906102180480957e-1\t8.4691369533538818e-1\t7.8526735305786133e-3\t9.2721059699818163e-3\t3.8985999999999999e-3\n\t...and 31037 more errors.\n\tMax AbsError of 9.8276454204897923e-1 at index of 39267.\n\t[39267\]\t-5.3834547930620147e-11\t-9.8276454210281372e-1\t9.8276454204897923e-1\t9.9999999994522137e-1\t3.8985999999999999e-3\n\tMax RelError of 3.3137802965303198e+0 at index of 1253.\n\t[1253\]\t-4.3022233992815018e-2\t-9.9732093513011932e-3\t3.3049024641513824e-2\t3.3137802965303198e+0\t3.8985999999999999e-3\n]
expected: FAIL
[X SNR (21.440582478679808 dB) is not greater than or equal to 65.737. Got 21.440582478679808.]
expected: FAIL

View file

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

View file

@ -1,5 +1,4 @@
[005.html] [005.html]
expected: ERROR
[dedicated worker in shared worker in dedicated worker] [dedicated worker in shared worker in dedicated worker]
expected: FAIL expected: FAIL

View file

@ -0,0 +1,30 @@
<!DOCTYPE html>
<title>Worklet Animation's animator name should be accessible via animatorName property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="common.js"></script>
<script id="test_animator" type="text/worklet">
class NoopAnimator {
animate(currentTime, effect) {}
}
registerAnimator('Tokyo', NoopAnimator);
registerAnimator('دزفول', NoopAnimator);
</script>
<body></body>
<script>
promise_test(async t => {
await runInAnimationWorklet(document.getElementById('test_animator').textContent);
// An ascii name and a non-ascii one.
for (let name of ['Tokyo', 'دزفول']) {
const animation = new WorkletAnimation(name, new KeyframeEffect(document.body, {}));
assert_equals(name, animation.animatorName);
}
}, 'Verify that animatorName matches passed name');
</script>

View file

@ -0,0 +1,61 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Animations: column-rule-color animations respond to style changes</title>
<link rel="help" href="https://drafts.csswg.org/css-multicol-1/#crc">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.paused {
animation-duration: 4s;
animation-timing-function: linear;
animation-delay: -2s;
animation-play-state: paused;
}
#container {
color: rgb(80, 0, 0);
}
#first {
animation-name: first-anim;
color: rgb(60, 0, 0);
}
#second {
animation-name: second-anim;
}
@keyframes first-anim {
from { column-rule-color: currentColor; }
to { column-rule-color: rgb(0, 60, 0); }
}
@keyframes second-anim {
from { column-rule-color: inherit; }
to { column-rule-color: rgb(0, 0, 80); }
}
</style>
</head>
<body>
<div id="container">
<div id="first" class="paused"></div>
<div id="second" class="paused"></div>
</div>
<script>
'use strict';
var container = document.getElementById('container');
test(() => {
const first = document.getElementById('first');
assert_equals(getComputedStyle(first).columnRuleColor, 'rgb(30, 30, 0)');
first.style.color = 'rgb(0, 0, 60)';
assert_equals(getComputedStyle(first).columnRuleColor, 'rgb(0, 30, 30)');
}, 'column-rule-color responds to currentColor changes');
test(() => {
const container = document.getElementById('container');
const second = document.getElementById('second');
assert_equals(getComputedStyle(second).columnRuleColor, 'rgb(40, 0, 40)');
container.style.columnRuleColor = 'rgb(0, 80, 0)';
assert_equals(getComputedStyle(second).columnRuleColor, 'rgb(0, 40, 40)');
}, 'column-rule-color responds to inherited changes');
</script>
</body>
</html>

View file

@ -0,0 +1,76 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Animations: column-width animations respond to style changes</title>
<link rel="help" href="https://drafts.csswg.org/css-multicol-1/#cw">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.paused {
animation-duration: 4s;
animation-timing-function: linear;
animation-delay: -2s;
animation-play-state: paused;
}
#container {
column-width: 40px;
font-size: 10px;
}
#first {
animation-name: first-anim;
}
#second {
animation-name: second-anim;
}
#third {
animation-name: third-anim;
}
@keyframes first-anim {
from { column-width: 3em; }
to { column-width: 5em; }
}
@keyframes second-anim {
from { column-width: 40px; }
to { column-width: calc(40px - 2em); }
}
@keyframes third-anim {
from { column-width: 20px; }
to { column-width: inherit; }
}
</style>
</head>
<body>
<div id="container">
<div id="first" class="paused"></div>
<div id="second" class="paused"></div>
<div id="third" class="paused"></div>
</div>
<script>
'use strict';
var container = document.getElementById('container');
test(() => {
const first = document.getElementById('first');
assert_equals(getComputedStyle(first).columnWidth, '40px');
first.style.fontSize = '20px';
assert_equals(getComputedStyle(first).columnWidth, '80px');
}, 'column-width responds to font-size changes');
test(() => {
const second = document.getElementById('second');
assert_equals(getComputedStyle(second).columnWidth, '30px');
second.style.fontSize = '90px';
assert_equals(getComputedStyle(second).columnWidth, '0px');
}, 'column-width clamps to 0px');
test(() => {
const container = document.getElementById('container');
const third = document.getElementById('third');
assert_equals(getComputedStyle(third).columnWidth, '30px');
container.style.columnWidth = 'auto';
assert_equals(getComputedStyle(third).columnWidth, 'auto');
}, 'column-width responds to inherited changes');
</script>
</body>
</html>

View file

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Masking Module Level 1: parsing mask-position with invalid values</title>
<link rel="help" href="https://www.w3.org/TR/css-masking-1/#the-mask-position">
<meta name="assert" content="mask-position supports only the '<position>#' grammar.">
<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("mask-position", "auto");
test_invalid_value("mask-position", "1px 2px 3px");
test_invalid_value("mask-position", "left right");
test_invalid_value("mask-position", "bottom 10%");
test_invalid_value("mask-position", "bottom 10% top 20%");
test_invalid_value("mask-position", "center left 1px");
test_invalid_value("mask-position", "center top 2px");
test_invalid_value("mask-position", "right 3% center");
test_invalid_value("mask-position", "left 4px top");
test_invalid_value("mask-position", "right top 5px");
test_invalid_value("mask-position", "bottom 6% center");
test_invalid_value("mask-position", "bottom 7% left");
test_invalid_value("mask-position", "bottom right 8%");
</script>
</body>
</html>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Masking Module Level 1: parsing mask-position with valid values</title>
<link rel="help" href="https://www.w3.org/TR/css-masking-1/#the-mask-position">
<meta name="assert" content="mask-position supports the full '<position>#' grammar.">
<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("mask-position", "10%", "10% center");
test_valid_value("mask-position", "right 30% top 60px");
test_valid_value("mask-position", "-20% -30px");
test_valid_value("mask-position", "30px center");
test_valid_value("mask-position", "40px top");
test_valid_value("mask-position", "bottom 10% right 20%", "right 20% bottom 10%");
test_valid_value("mask-position", "bottom right", "right bottom");
test_valid_value("mask-position", "center 50px");
test_valid_value("mask-position", "center bottom");
test_valid_value("mask-position", "center left", "left center");
test_valid_value("mask-position", "left", "left center");
test_valid_value("mask-position", "left bottom");
test_valid_value("mask-position", "right 40%");
test_valid_value("mask-position", "top", "center top");
test_valid_value("mask-position", "top center", "center top");
test_valid_value("mask-position", "center", "center center");
test_valid_value("mask-position", "bottom left, right 20%", "left bottom, right 20%");
test_valid_value("mask-position", "top, center, left", "center top, center center, left center");
</script>
</body>
</html>

View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<body>
<canvas id ="canvas" width="540" height="550"></canvas>
<script>
var canvas = document.getElementById('canvas');
canvas.style.width = (canvas.width / devicePixelRatio) + 'px';
canvas.style.height = (canvas.height / devicePixelRatio) + 'px';
var ctx = canvas.getContext("2d");
ctx.scale(devicePixelRatio, devicePixelRatio);
var fillW = 250;
var fillH = 50;
ctx.setTransform(devicePixelRatio, 0, 0, devicePixelRatio, 0, 100);
ctx.beginPath();
ctx.rect(0, 0, fillW, fillH);
ctx.closePath();
ctx.clip();
ctx.fillStyle = 'green';
ctx.fillRect(0, 0, fillW, fillH);
</script>
</body>
</html>

View file

@ -0,0 +1,43 @@
<!DOCTYPE html>
<html class="reftest-wait">
<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/#dom-css-paintworklet">
<link rel="match" href="canvas-transform-ref.html">
<style>
.container {
width: 270px;
height: 275px;
}
#canvas-geometry {
background-image: paint(geometry);
}
</style>
<script src="/common/reftest-wait.js"></script>
<script src="/common/worklet-reftest.js"></script>
<body>
<div id="canvas-geometry" class="container"></div>
<script id="code" type="text/worklet">
// Regression test for crbug.com/970783. The canvas transform matrix should
// account for the devicePixelRatio, such that the clip bounds can be
// properly computed when applying clips.
registerPaint('geometry', class {
paint(ctx, geom) {
var fillW = 250;
var fillH = 50;
ctx.setTransform(devicePixelRatio, 0, 0, devicePixelRatio, 0, 100);
ctx.beginPath();
ctx.rect(0, 0, fillW, fillH);
ctx.closePath();
ctx.clip();
ctx.fillStyle = 'green';
ctx.fillRect(0, 0, fillW, fillH);
}
});
</script>
<script>
importWorkletAndTerminateTestAfterAsyncPaint(CSS.paintWorklet, document.getElementById('code').textContent);
</script>
</body>
</html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p style="color: blue">Blue <span style="color: green">This text should be green.</span> Blue</p>

View file

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html class="reftest-wait">
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-line-pseudo">
<link rel="match" href="first-line-change-inline-color-nested-ref.html">
<style>
#block { color: green; }
#block::first-line { color: blue; }
.green { color: green; }
</style>
<div id="block">
<div>
<p>Blue <span id="target"><span>This text should be green.</span></span> Blue</p>
</div>
</div>
<script>
requestAnimationFrame(() => {
requestAnimationFrame(() => {
target.className = 'green';
document.documentElement.removeAttribute('class');
});
});
</script>
</html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<p style="color: blue">Blue <span style="color: green">This text should be green.</span> Blue</p>

View file

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html class="reftest-wait">
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-line-pseudo">
<link rel="match" href="first-line-change-inline-color-ref.html">
<style>
#block { color: green; }
#block::first-line { color: blue; }
.green { color: green; }
</style>
<div id="block">
<div>
<p>Blue <span id="target">This text should be green.</span> Blue</p>
</div>
</div>
<script>
requestAnimationFrame(() => {
requestAnimationFrame(() => {
target.className = 'green';
document.documentElement.removeAttribute('class');
});
});
</script>
</html>

View file

@ -0,0 +1,5 @@
<!DOCTYPE html>
<div>
<span style="color: green">This text should be green.</span><br>
<span style="color: blue">This text should be blue.</span>
</div>

View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-line-pseudo">
<link rel="match" href="first-line-on-ancestor-block-ref.html">
<style>
#block::first-line { color: green; }
</style>
<div id="block">
<div>
<div style="color: blue">
<div>
<span><span>This text should be green.</span></span><br>
This text should be blue.
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,5 @@
<!DOCTYPE html>
<div>
<span style="color: green">This text should be green.</span><br>
<span style="color: blue">This text should be blue.</span>
</div>

View file

@ -0,0 +1,20 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-line-pseudo">
<link rel="match" href="first-line-with-out-of-flow-ref.html">
<style>
#block::first-line { color: green; }
</style>
<div id="block">
<div style="position: absolute"><br></div>
<div style="float: right"><br></div>
<div>
<div style="position: absolute"><br></div>
<div style="float: right"><br></div>
<div style="color: blue">
<div>
<span><span>This text should be green.</span></span><br>
This text should be blue.
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,15 @@
<!doctype html>
<meta charset=utf-8>
<title>CSS test Reference</title>
<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
<style>
div {
font: 25px/1 Ahem;
color: green;
}
</style>
<p>This test passes if there is a green square and no red.
<div>XX<br>XX</div>

View file

@ -0,0 +1,21 @@
<!doctype html>
<meta charset=utf-8>
<title>CSS Text test: hanging trailing spaces with white-space:pre-wrap</title>
<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-004-ref.html">
<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap.">
<style>
div {
font: 25px/1 Ahem;
color: green;
background: red;
width: 2ch;
white-space: pre-wrap;
}
</style>
<p>This test passes if there is a green square and no red.
<div>XX<span> </span>XX</div>

View file

@ -0,0 +1,29 @@
<!doctype html>
<meta charset=utf-8>
<title>CSS Text test: hanging trailing spaces with white-space:pre-wrap</title>
<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-004-ref.html">
<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap.">
<style>
div {
font: 10px/1 Ahem;
}
.ref {
position: absolute;
color: red;
z-index: -1;
}
.ref span { color: green; }
.test {
color: green;
width: 5ch;
white-space: pre-wrap;
}
</style>
<p>This test passes if there is a green square and no red.
<div class="ref">XX<span>XXX</span><br>X<span>XX</span>X<span>X</span><br><span>XXXXX</span><br><span>XXXXX</span><br><span>XXXXX</span></div>
<div class="test">XX<span> </span><span>X X </span></div>

View file

@ -0,0 +1,29 @@
<!doctype html>
<meta charset=utf-8>
<title>CSS Text test: hanging trailing spaces with white-space:pre-wrap</title>
<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
<link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-004-ref.html">
<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap and any overflowing space is removed.">
<style>
div {
font: 25px/1 Ahem;
}
.ref {
position: absolute;
color: red;
z-index: -1;
}
.test span { background: red; }
.test {
color: green;
width: 2ch;
white-space: pre-wrap;
}
.test span { background: green; }
</style>
<p>This test passes if there is a green square and no red.
<div class="ref">X<span>X</span><br>XX</div>
<div class="test">X<span>&#x0020;&#x0020;</span><span>&#x0020;XX</span></div>

View file

@ -16,9 +16,11 @@ test_valid_value("scale", "none");
test_valid_value("scale", "1"); test_valid_value("scale", "1");
test_valid_value("scale", "100");
test_valid_value("scale", "100 100", "100"); test_valid_value("scale", "100 100", "100");
test_valid_value("scale", "100 200"); test_valid_value("scale", "100 100 1");
test_valid_value("scale", "100 200");
test_valid_value("scale", "100 200 1"); test_valid_value("scale", "100 200 1");
test_valid_value("scale", "100 200 300"); test_valid_value("scale", "100 200 300");
</script> </script>

View file

@ -1,77 +0,0 @@
<!DOCTYPE html>
<title>CSSOM View - scrollIntoView considers direction:rtl</title>
<meta charset="utf-8">
<link rel="author" title="Cathie Chen" href="mailto:cathiechen@igalia.com">
<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview">
<link rel="help" href="https://drafts.csswg.org/cssom-view/#scroll-an-element">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.box {
float: left;
width: 200px;
height: 200px;
}
#scroller {
direction: rtl;
overflow-x: scroll;
width: 300px;
height: 215px;
}
#container{
width: 600px;
height: 200px;
}
#target {
background-color: #ff0;
}
</style>
<body>
<div id="scroller">
<div id="container">
<div class="row">
<div class="box"></div>
<div class="box" id="target"></div>
<div class="box"></div>
</div>
</div>
</div>
<script>
// This page is direction: rtl and scroller is direction: rtl.
// So the the overflow direction is leftward, downward. The beginning edges are the top and right edges.
// And the ending edges are the bottom and left edges.
// Acording to the spec, x is min(0, max(x, element padding edge width - element scrolling area width)).
// So x is nonpositive and decreases leftward.
var target = document.getElementById("target");
var scroller = document.getElementById("scroller");
var box_width = target.offsetWidth;
var scroller_width = scroller.offsetWidth;
var leftEdge = -2*box_width + scroller_width;
var center = -(3*box_width - scroller_width)/2;
var rightEdge = - box_width;
test(() => {
scroller.scrollTo(0, 0);
target.scrollIntoView({inline: "start"});
assert_approx_equals(scroller.scrollLeft, rightEdge, 0.5, "start should be the right edge");
}, `scrollIntoView({inline: "start"}), direction: rtl`);
test(() => {
scroller.scrollTo(0, 0);
target.scrollIntoView({inline: "center"});
assert_approx_equals(scroller.scrollLeft, center, 0.5, "should center the target");
}, `scrollIntoView({inline: "center"}), direction: rtl`);
test(() => {
scroller.scrollTo(0, 0);
target.scrollIntoView({inline: "end"});
assert_approx_equals(scroller.scrollLeft, leftEdge, 0.5, "end should be the left edge");
}, `scrollIntoView({inline: "end"}), direction: rtl`);
</script>
</body>
</html>

View file

@ -0,0 +1,111 @@
<!DOCTYPE html>
<title>CSSOM View - scrollIntoView considers horizontal-tb and rtl direction</title>
<meta charset="utf-8">
<link rel="author" title="Cathie Chen" href="mailto:cathiechen@igalia.com">
<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview">
<link rel="help" href="https://drafts.csswg.org/cssom-view/#scroll-an-element">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.box {
float: left;
width: 200px;
height: 200px;
}
#scroller {
direction: rtl;
overflow: scroll;
width: 300px;
height: 300px;
}
#container{
width: 600px;
height: 600px;
}
#target {
background-color: #ff0;
}
</style>
<body>
<div id="scroller">
<div id="container">
<!-- ROW-1 -->
<div class="row">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
<!-- ROW-2 -->
<div class="row">
<div class="box"></div>
<div class="box" id="target"></div>
<div class="box"></div>
</div>
<!-- ROW-3 -->
<div class="row">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
</div>
</div>
<script>
// In horizontal-tb mode and rtl direction, X corresponds to the inline axis
// and is oriented leftward. Y corresponds to the block axis and is oriented
// downward. So the beginning edges are the top and right edges and the ending
// edges are the bottom and left edges.
// According to the spec, x is min(0, max(x, element padding edge width - element scrolling area width)).
// So x is nonpositive and decreases leftward.
// This assumes that the horizontal scrollbar is on the bottom side
// and the vertical scrollbar is on the left side.
var target = document.getElementById("target");
var scroller = document.getElementById("scroller");
var scrollbar_width = scroller.offsetWidth - scroller.clientWidth;
var scroller_width = scroller.offsetWidth;
var scroller_height = scroller.offsetHeight;
var box_width = target.offsetWidth;
var box_height = target.offsetHeight;
var expectedX = {
inlineStart: -box_width,
inlineCenter: -((3*box_width - scroller_width)/2) - scrollbar_width/2,
inlineEnd: -(2*box_width - scroller_width) - scrollbar_width,
};
var expectedY = {
blockStart: box_height,
blockCenter: (3*box_height - scroller_height)/2 + scrollbar_width/2,
blockEnd: 2*box_height - scroller_height + scrollbar_width,
};
[
[{block: "start", inline: "start"}, expectedX.inlineStart, expectedY.blockStart],
[{block: "start", inline: "center"}, expectedX.inlineCenter, expectedY.blockStart],
[{block: "start", inline: "end"}, expectedX.inlineEnd, expectedY.blockStart],
[{block: "center", inline: "start"}, expectedX.inlineStart, expectedY.blockCenter],
[{block: "center", inline: "center"}, expectedX.inlineCenter, expectedY.blockCenter],
[{block: "center", inline: "end"}, expectedX.inlineEnd, expectedY.blockCenter],
[{block: "end", inline: "start"}, expectedX.inlineStart, expectedY.blockEnd],
[{block: "end", inline: "center"}, expectedX.inlineCenter, expectedY.blockEnd],
[{block: "end", inline: "end"}, expectedX.inlineEnd, expectedY.blockEnd],
].forEach(([input, expectedX, expectedY]) => {
test(() => {
scroller.scrollTo(0, 0);
target.scrollIntoView(input);
assert_approx_equals(scroller.scrollLeft, expectedX, 0.5, "scrollX");
assert_approx_equals(scroller.scrollTop, expectedY, 0.5, "scrollY");
}, `scrollIntoView(${JSON.stringify(input)})`);
})
</script>
</body>
</html>

View file

@ -0,0 +1,106 @@
<!DOCTYPE html>
<title>CSSOM View - scrollIntoView considers horizontal-tb writing mode</title>
<meta charset="utf-8">
<link rel="author" title="Cathie Chen" href="mailto:cathiechen@igalia.com">
<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.box {
float: left;
width: 200px;
height: 200px;
}
#scroller {
overflow: scroll;
width: 300px;
height: 300px;
}
#container{
width: 600px;
height: 600px;
}
#target {
background-color: #ff0;
}
</style>
<body>
<div id="scroller">
<div id="container">
<!-- ROW-1 -->
<div class="row">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
<!-- ROW-2 -->
<div class="row">
<div class="box"></div>
<div class="box" id="target"></div>
<div class="box"></div>
</div>
<!-- ROW-3 -->
<div class="row">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
</div>
</div>
<script>
// In horizontal-tb mode, X corresponds to the inline axis and is oriented
// rightward. Y corresponds to the block axis and is oriented downward.
// So the beginning edges are the top and left edges and the ending
// edges are the bottom and right edges.
// This assumes that the horizontal scrollbar is on the bottom side and
// the vertical scrollbar is on the right side.
var target = document.getElementById("target");
var scroller = document.getElementById("scroller");
var scrollbar_width = scroller.offsetWidth - scroller.clientWidth;
var scroller_width = scroller.offsetWidth;
var scroller_height = scroller.offsetHeight;
var box_width = target.offsetWidth;
var box_height = target.offsetHeight;
var expectedX = {
inlineStart: box_width,
inlineCenter: (3*box_width - scroller_width)/2 + scrollbar_width/2,
inlineEnd: 2*box_width - scroller_width + scrollbar_width,
};
var expectedY = {
blockStart: box_height,
blockCenter: (3*box_height - scroller_height)/2 + scrollbar_width/2,
blockEnd: 2*box_height - scroller_height + scrollbar_width,
};
[
[{block: "start", inline: "start"}, expectedX.inlineStart, expectedY.blockStart],
[{block: "start", inline: "center"}, expectedX.inlineCenter, expectedY.blockStart],
[{block: "start", inline: "end"}, expectedX.inlineEnd, expectedY.blockStart],
[{block: "center", inline: "start"}, expectedX.inlineStart, expectedY.blockCenter],
[{block: "center", inline: "center"}, expectedX.inlineCenter, expectedY.blockCenter],
[{block: "center", inline: "end"}, expectedX.inlineEnd, expectedY.blockCenter],
[{block: "end", inline: "start"}, expectedX.inlineStart, expectedY.blockEnd],
[{block: "end", inline: "center"}, expectedX.inlineCenter, expectedY.blockEnd],
[{block: "end", inline: "end"}, expectedX.inlineEnd, expectedY.blockEnd],
].forEach(([input, expectedX, expectedY]) => {
test(() => {
scroller.scrollTo(0, 0);
target.scrollIntoView(input);
assert_approx_equals(scroller.scrollLeft, expectedX, 0.5, "scrollX");
assert_approx_equals(scroller.scrollTop, expectedY, 0.5, "scrollY");
}, `scrollIntoView(${JSON.stringify(input)})`);
})
</script>
</body>
</html>

View file

@ -0,0 +1,112 @@
<!DOCTYPE html>
<title>CSSOM View - scrollIntoView considers vertical-lr and rtl direction</title>
<meta charset="utf-8">
<link rel="author" title="Cathie Chen" href="mailto:cathiechen@igalia.com">
<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview">
<link rel="help" href="https://drafts.csswg.org/cssom-view/#scroll-an-element">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.box {
float: left;
width: 200px;
height: 200px;
}
#scroller {
writing-mode: vertical-lr;
direction: rtl;
overflow: scroll;
width: 300px;
height: 300px;
}
#container{
width: 600px;
height: 600px;
}
#target {
background-color: #ff0;
}
</style>
<body>
<div id="scroller">
<div id="container">
<!-- ROW-1 -->
<div class="row">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
<!-- ROW-2 -->
<div class="row">
<div class="box"></div>
<div class="box" id="target"></div>
<div class="box"></div>
</div>
<!-- ROW-3 -->
<div class="row">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
</div>
</div>
<script>
// In vertical-lr mode and rtl direction, X corresponds to the block axis
// and is oriented rightward. Y corresponds to the inline axis and is oriented
// upward. So the beginning edges are the bottom and left edges and the ending
// edges are the top and right edges.
// According to the spec, y be min(0, max(y, element padding edge height - element scrolling area height)).
// So y is nonpositive and decreases upward.
// This assumes that the horizontal scrollbar
// is on the bottom side and the vertical scrollbar is on the right side.
var target = document.getElementById("target");
var scroller = document.getElementById("scroller");
var scrollbar_width = scroller.offsetWidth - scroller.clientWidth;
var scroller_width = scroller.offsetWidth;
var scroller_height = scroller.offsetHeight;
var box_width = target.offsetWidth;
var box_height = target.offsetHeight;
var expectedX = {
blockStart: box_width,
blockCenter: (3*box_width - scroller_width)/2 + scrollbar_width/2,
blockEnd: 2*box_width - scroller_width + scrollbar_width,
};
var expectedY = {
inlineStart: -box_height,
inlineCenter: -((3*box_height - scroller_height)/2) - scrollbar_width/2,
inlineEnd: -(2*box_height - scroller_height) - scrollbar_width,
};
[
[{block: "start", inline: "start"}, expectedX.blockStart, expectedY.inlineStart],
[{block: "start", inline: "center"}, expectedX.blockStart, expectedY.inlineCenter],
[{block: "start", inline: "end"}, expectedX.blockStart, expectedY.inlineEnd],
[{block: "center", inline: "start"}, expectedX.blockCenter, expectedY.inlineStart],
[{block: "center", inline: "center"}, expectedX.blockCenter, expectedY.inlineCenter],
[{block: "center", inline: "end"}, expectedX.blockCenter, expectedY.inlineEnd],
[{block: "end", inline: "start"}, expectedX.blockEnd, expectedY.inlineStart],
[{block: "end", inline: "center"}, expectedX.blockEnd, expectedY.inlineCenter],
[{block: "end", inline: "end"}, expectedX.blockEnd, expectedY.inlineEnd],
].forEach(([input, expectedX, expectedY]) => {
test(() => {
scroller.scrollTo(0, 0);
target.scrollIntoView(input);
assert_approx_equals(scroller.scrollLeft, expectedX, 0.5, "scrollX");
assert_approx_equals(scroller.scrollTop, expectedY, 0.5, "scrollY");
}, `scrollIntoView(${JSON.stringify(input)})`);
})
</script>
</body>
</html>

View file

@ -0,0 +1,107 @@
<!DOCTYPE html>
<title>CSSOM View - scrollIntoView considers vertical-lr writing mode</title>
<meta charset="utf-8">
<link rel="author" title="Cathie Chen" href="mailto:cathiechen@igalia.com">
<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.box {
float: left;
width: 200px;
height: 200px;
}
#scroller {
writing-mode: vertical-lr;
overflow: scroll;
width: 300px;
height: 300px;
}
#container{
width: 600px;
height: 600px;
}
#target {
background-color: #ff0;
}
</style>
<body>
<div id="scroller">
<div id="container">
<!-- ROW-1 -->
<div class="row">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
<!-- ROW-2 -->
<div class="row">
<div class="box"></div>
<div class="box" id="target"></div>
<div class="box"></div>
</div>
<!-- ROW-3 -->
<div class="row">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
</div>
</div>
<script>
// In vertical-lr mode, X corresponds to the block axis and is oriented
// rightward. Y corresponds to the inline axis and is oriented downward.
// So the beginning edges are the top and left edges and the ending
// edges are the bottom and right edges.
// This assumes that the horizontal scrollbar is on the bottom side and
// the vertical scrollbar is on the right side.
var target = document.getElementById("target");
var scroller = document.getElementById("scroller");
var scrollbar_width = scroller.offsetWidth - scroller.clientWidth;
var scroller_width = scroller.offsetWidth;
var scroller_height = scroller.offsetHeight;
var box_width = target.offsetWidth;
var box_height = target.offsetHeight;
var expectedX = {
blockStart: box_width,
blockCenter: (3*box_width - scroller_width)/2 + (scrollbar_width/2),
blockEnd: (2*box_width) - scroller_width + scrollbar_width,
};
var expectedY = {
inlineStart: box_height,
inlineCenter: ((3*box_height - scroller_height)/2) + (scrollbar_width/2),
inlineEnd: ((2*box_height) - scroller_height) + scrollbar_width,
};
[
[{block: "start", inline: "start"}, expectedX.blockStart, expectedY.inlineStart],
[{block: "start", inline: "center"}, expectedX.blockStart, expectedY.inlineCenter],
[{block: "start", inline: "end"}, expectedX.blockStart, expectedY.inlineEnd],
[{block: "center", inline: "start"}, expectedX.blockCenter, expectedY.inlineStart],
[{block: "center", inline: "center"}, expectedX.blockCenter, expectedY.inlineCenter],
[{block: "center", inline: "end"}, expectedX.blockCenter, expectedY.inlineEnd],
[{block: "end", inline: "start"}, expectedX.blockEnd, expectedY.inlineStart],
[{block: "end", inline: "center"}, expectedX.blockEnd, expectedY.inlineCenter],
[{block: "end", inline: "end"}, expectedX.blockEnd, expectedY.inlineEnd],
].forEach(([input, expectedX, expectedY]) => {
test(() => {
scroller.scrollTo(0, 0);
target.scrollIntoView(input);
assert_approx_equals(scroller.scrollLeft, expectedX, 0.5, "scrollX");
assert_approx_equals(scroller.scrollTop, expectedY, 0.5, "scrollY");
}, `scrollIntoView(${JSON.stringify(input)})`);
})
</script>
</body>
</html>

View file

@ -55,7 +55,11 @@
<script> <script>
// In vertical-rl mode, X corresponds to the block axis and is oriented // In vertical-rl mode, X corresponds to the block axis and is oriented
// leftward. Y corresponds to the inline axis and is oriented downward. // leftward. Y corresponds to the inline axis and is oriented downward.
// So the beginning edges are the top and right edges and the ending
// edges are the bottom and left edges.
// This assumes that the horizontal scrollbar is on the bottom side. // This assumes that the horizontal scrollbar is on the bottom side.
var target = document.getElementById("target"); var target = document.getElementById("target");
var scroller = document.getElementById("scroller"); var scroller = document.getElementById("scroller");
var scrollbar_width = scroller.offsetWidth - scroller.clientWidth; var scrollbar_width = scroller.offsetWidth - scroller.clientWidth;
@ -102,17 +106,6 @@ if(scroller.scrollLeft === 0) {
}; };
} }
// This formats dict as a string suitable as test name.
// format_value() is provided by testharness.js,
// which also preserves sign for -0.
function format_dict(dict) {
const props = [];
for (let prop in dict) {
props.push(`${prop}: ${format_value(dict[prop])}`);
}
return `{${props.join(", ")}}`;
}
[ [
[{block: "start", inline: "start"}, expectedX.blockStart, expectedY.inlineStart], [{block: "start", inline: "start"}, expectedX.blockStart, expectedY.inlineStart],
[{block: "start", inline: "center"}, expectedX.blockStart, expectedY.inlineCenter], [{block: "start", inline: "center"}, expectedX.blockStart, expectedY.inlineCenter],
@ -129,7 +122,7 @@ function format_dict(dict) {
target.scrollIntoView(input); target.scrollIntoView(input);
assert_approx_equals(scroller.scrollLeft, expectedX, 0.5, "scrollX"); assert_approx_equals(scroller.scrollLeft, expectedX, 0.5, "scrollX");
assert_approx_equals(scroller.scrollTop, expectedY, 0.5, "scrollY"); assert_approx_equals(scroller.scrollTop, expectedY, 0.5, "scrollY");
}, `scrollIntoView(${format_dict(input)})`); }, `scrollIntoView(${JSON.stringify(input)})`);
}) })
</script> </script>

View file

@ -10,8 +10,7 @@
<script> <script>
/* /*
In this test, a slow image is added to the frame to delay onload. The entry In this test, a slow image is added to the frame to delay onload. The entry
for the other image should be available before onload, and thus delivered to is available from the observer with the buffered flag set to true.
the performance timeline.
*/ */
async_test(function(t) { async_test(function(t) {
if (!window.PerformanceElementTiming) { if (!window.PerformanceElementTiming) {
@ -23,18 +22,26 @@
img.setAttribute('elementtiming', 'my_image'); img.setAttribute('elementtiming', 'my_image');
img.setAttribute('id', 'my_id'); img.setAttribute('id', 'my_id');
document.body.appendChild(img); document.body.appendChild(img);
window.onload = t.step_func_done( () => {
const entries = performance.getEntriesByType('element'); // this PerformanceObserver should be notified about the previously
assert_greater_than_equal(entries.length, 1); // buffered element entry
assert_equals(performance.getEntries().filter(e => e.identifier === 'my_image').length, 1); new PerformanceObserver(function (entryList, observer) {
const entry = entries[0]; assert_equals(entryList.getEntries().length, 1);
const index = window.location.href.lastIndexOf('/'); entryList.getEntries().forEach(function(entry) {
const pathname = window.location.href.substring(0, index) + assert_equals(entry.entryType, "element");
'/resources/square20.jpg'; const index = window.location.href.lastIndexOf('/');
checkElement(entry, pathname, 'my_image', 'my_id', beforeRender, img); const pathname = window.location.href.substring(0, index) +
checkNaturalSize(entry, 20, 20); '/resources/square20.jpg';
checkElement(entry, pathname, 'my_image', 'my_id', beforeRender, img);
checkNaturalSize(entry, 20, 20);
observer.disconnect();
t.done();
});
}).observe({
type: "element",
buffered: true
}); });
}, "Element Timing: image loads before onload."); }, "Element Timing: image loads before onload available from buffered flag.");
</script> </script>
</body> </body>

View file

@ -27,9 +27,7 @@
firstClickEnd = performance.now(); firstClickEnd = performance.now();
} }
function validateEntries() { function validateEntries(entries) {
const entries = performance.getEntriesByName('mousedown', 'event');
const entriesBeforeOnload = entries.filter( const entriesBeforeOnload = entries.filter(
e => e.startTime < onloadStart); e => e.startTime < onloadStart);
assert_equals(entriesBeforeOnload.length, 1, assert_equals(entriesBeforeOnload.length, 1,
@ -48,8 +46,8 @@
const entriesAfterOnload = entries.filter( const entriesAfterOnload = entries.filter(
e => e.startTime >= onloadStart); e => e.startTime >= onloadStart);
assert_equals(entriesAfterOnload.length, 0, assert_equals(entriesAfterOnload.length, 1,
"Events after onload shouldn't be buffered."); "Events after onload should still be buffered.");
} }
/* Timeline: /* Timeline:
@ -66,24 +64,31 @@
async_test(function(t) { async_test(function(t) {
clickTimeMin = performance.now(); clickTimeMin = performance.now();
clickAndBlockMain('button'); clickAndBlockMain('button');
// Use a dummy observer to know when both clicks have been dispatched.
const observerPromise = new Promise((resolve, reject) => {
let entryCount = 0;
new PerformanceObserver(entryList => {
entryCount += entryList.getEntries().filter(
entry => entry.name === 'mousedown').length;
if (entryCount >= 2)
resolve();
}).observe({ entryTypes: ['event'] });
});
// Event handlers will be dispatched asynchronously, so this will be called // Event handlers will be dispatched asynchronously, so this will be called
// before processing begins. // before processing begins.
processingStartMin = performance.now(); processingStartMin = performance.now();
const bufferedEntries = [];
on_event(window, 'load', e => { on_event(window, 'load', e => {
onloadStart = performance.now(); onloadStart = performance.now();
const clickPromise = clickAndBlockMain('button'); // Register the observer after the page has been loaded
Promise.all([observerPromise, clickPromise]).then( const observer = new PerformanceObserver(function (entryList, observer) {
t.step_func_done(validateEntries)); entryList.getEntries().forEach(function(entry) {
assert_equals(entry.entryType, "event");
if (entry.name === 'mousedown') {
bufferedEntries.push(entry);
}
if (bufferedEntries.length == 2) {
validateEntries(bufferedEntries)
observer.disconnect();
t.done();
}
});
})
observer.observe({
type: "event",
buffered: true
});
clickAndBlockMain('button');
}); });
}, "Event Timing: click, onload."); }, "Event Timing: click, onload.");

View file

@ -20,19 +20,6 @@
let onloadStart; let onloadStart;
let observedEntries = []; let observedEntries = [];
function verifyBuffer(bufferedEntries) {
assert_equals(bufferedEntries.length, 1,
"Only events before onload should be buffered.");
const entry = bufferedEntries[0];
assert_greater_than(onloadStart, entry.startTime,
"Onload should be later than entry's start time.");
assert_greater_than(entry.processingStart, timeBeforeFirstClick,
"The entry's processing start should be after timeBeforeFirstClick");
assert_less_than(entry.processingStart, timeAfterFirstClick,
"The entry's processing start should be before timeAfterFirstClick.");
verifyClickEvent(entry, true);
}
function verifyObserverEntries(observedEntries) { function verifyObserverEntries(observedEntries) {
const entriesAfterFirstClick = observedEntries.filter( const entriesAfterFirstClick = observedEntries.filter(
e => e.startTime > timeAfterFirstClick); e => e.startTime > timeAfterFirstClick);
@ -60,6 +47,9 @@
"entry2's processing start should be berfore timeAfterFirstClick."); "entry2's processing start should be berfore timeAfterFirstClick.");
assert_greater_than(timeAfterFirstClick, entry2.startTime, assert_greater_than(timeAfterFirstClick, entry2.startTime,
"timeAfterFirstClick should be later than entry2's start time."); "timeAfterFirstClick should be later than entry2's start time.");
// This should happen before onLoad
assert_greater_than(onloadStart, entry2.startTime,
"Onload should be later than entry's start time.");
} }
/* Timeline: /* Timeline:
@ -82,7 +72,7 @@
entry => entry.name === 'mousedown')); entry => entry.name === 'mousedown'));
if (observedEntries.length < 2) return; if (observedEntries.length < 2) return;
resolve(observedEntries); resolve(observedEntries);
}).observe({ entryTypes: ['event'] }); }).observe({ type: 'event' , buffered: true});
}); });
timeBeforeFirstClick = performance.now(); timeBeforeFirstClick = performance.now();
clickAndBlockMain('button').then( () => { clickAndBlockMain('button').then( () => {
@ -95,7 +85,6 @@
Promise.all([observerPromise, bufferPromise]).then((results) => { Promise.all([observerPromise, bufferPromise]).then((results) => {
timeAfterSecondClick = performance.now(); timeAfterSecondClick = performance.now();
t.step(verifyObserverEntries.bind(null, results[0])); t.step(verifyObserverEntries.bind(null, results[0]));
t.step(verifyBuffer.bind(null, performance.getEntriesByName('mousedown', 'event')));
t.done(); t.done();
}); });
}); });

View file

@ -23,30 +23,38 @@
async_test(function(t) { async_test(function(t) {
let numFirstInputObserved = 0; let numFirstInputObserved = 0;
let numEventsObserved = 0; let numEventsObserved = 0;
new PerformanceObserver(t.step_func((entryList, obs) => { let observedEventEntries = [];
const observedEntries = entryList.getEntries().filter(
entry => entry.name === 'mousedown'); const event_observer_promise = new Promise((resolve, reject) => {
numEventsObserved += observedEntries.filter(entry => new PerformanceObserver(function(entryList) {
entry.entryType == 'event').length; observedEventEntries = entryList.getEntries().filter(
numFirstInputObserved += observedEntries.filter(entry => entry => entry.name === 'mousedown');
entry.entryType == 'firstInput').length; numEventsObserved += observedEventEntries.length;
if (numEventsObserved >= 2) { if (numEventsObserved >= 2) {
assert_equals(performance.getEntriesByType('event').length, 0, // There should be 2 event entries.
"There should be no buffered event entries.");
assert_equals(performance.getEntriesByType('firstInput').length, 1,
"There should be a buffered firstInput entry.");
// There should be 2 event entries and one firstInput entry.
assert_equals(numEventsObserved, 2, assert_equals(numEventsObserved, 2,
"There should be 2 observed event entries."); "There should be 2 observed event entries.");
assert_equals(numFirstInputObserved, 1, resolve();
"There should be only 1 observed firstInput entry.");
t.done();
} }
})).observe({ entryTypes: ['event', 'firstInput'] }); }).observe({ type: 'event' , buffered: true});
on_event(window, 'load', () => { });
clickAndBlockMain('button').then(() => {
const first_input_observer_promise = new Promise((resolve, reject) => {
new PerformanceObserver(function(entryList) {
assert_equals(entryList.getEntries().length, 1);
resolve();
}).observe({ type: 'firstInput' , buffered: true});
});
on_event(window, 'load', function(e) {
const click_promise = clickAndBlockMain('button').then(() => {
clickAndBlockMain('button'); clickAndBlockMain('button');
}); });
Promise.all(
[event_observer_promise, first_input_observer_promise, click_promise]
).then(() => {
t.done();
});
}); });
}, },
"Event Timing: check firstInput after onload, observer, click, click." "Event Timing: check firstInput after onload, observer, click, click."

View file

@ -17,16 +17,9 @@ registration are lost
let observerStart; let observerStart;
let processingStartMin; let processingStartMin;
function verifyBufferAndObserverEntries(observedEntries) { function verifyObserverEntries(observedEntries) {
// Verify buffer entries // Verify observer entries. Should not include first click since we didn't
const bufferedEntries = performance.getEntriesByName('mousedown', 'event'); // buffered to true.
const bufferedEntriesBeforeObserver = bufferedEntries.filter(e => e.startTime <
observerStart);
assert_equals(bufferedEntries.length, 0,
"Long latency events after onload should not be buffered."
);
// Verify observer entries
assert_equals(observedEntries.length, 1, "Long latency task after observer start should be observed."); assert_equals(observedEntries.length, 1, "Long latency task after observer start should be observed.");
const entry = observedEntries[0]; const entry = observedEntries[0];
verifyClickEvent(entry); verifyClickEvent(entry);
@ -45,8 +38,8 @@ registration are lost
callbackTime = performance.now(); callbackTime = performance.now();
const observedEntries = entryList.getEntries().filter( const observedEntries = entryList.getEntries().filter(
entry => entry.name === 'mousedown'); entry => entry.name === 'mousedown');
verifyBufferAndObserverEntries(observedEntries); verifyObserverEntries(observedEntries);
})).observe({ entryTypes: ['event'] }); })).observe({ type: 'event'});
observerStart = performance.now(); observerStart = performance.now();
} }

View file

@ -2,7 +2,6 @@
<html> <html>
<script src=event-timing-test-utils.js></script> <script src=event-timing-test-utils.js></script>
<button id='button_child_frame'>Generate a 'click' event</button> <button id='button_child_frame'>Generate a 'click' event</button>
<img src=slow-image.py>
<script> <script>
const clickTimeMin = performance.now(); const clickTimeMin = performance.now();
clickAndBlockMain('button_child_frame'); clickAndBlockMain('button_child_frame');
@ -10,7 +9,7 @@
const observerPromise = new Promise((resolve, reject) => { const observerPromise = new Promise((resolve, reject) => {
new PerformanceObserver((entryList) => { new PerformanceObserver((entryList) => {
resolve(entryList.getEntries().filter(entry => entry.name === 'mousedown')); resolve(entryList.getEntries().filter(entry => entry.name === 'mousedown'));
}).observe({ entryTypes: ['event'] }); }).observe({ type:'event', buffered: true });
}); });
window.addEventListener('load', e => { window.addEventListener('load', e => {
observerPromise.then((observedEntries) => { observerPromise.then((observedEntries) => {

View file

@ -58,6 +58,7 @@ protected_mime_types = [
"application/x-protobuf", "application/x-protobuf",
"application/x-www-form-urlencoded", "application/x-www-form-urlencoded",
"application/zip", "application/zip",
"multipart/byteranges",
"text/event-stream", "text/event-stream",
// TODO(lukasza): https://crbug.com/944162: Add application/pdf and // TODO(lukasza): https://crbug.com/944162: Add application/pdf and
// text/csv to the list of content types tested here (after // text/csv to the list of content types tested here (after

View file

@ -0,0 +1,7 @@
<!DOCTYPE html>
<title>iframe with scrolling attr equals yes</title>
<link rel="author" title="Jinfeng Ma" href="mailto:majinfeng1@xiaomi.org">
<p>Test passes if you can see the scrollbars of the iframe displayed below.</p>
<iframe src="support/iframe-which-content-height-equals-400px.html" scrolling="yes" width="200px" height="100px">
</iframe>

View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<title>modify iframe scrolling attr to yes</title>
<link rel="author" title="Jinfeng Ma" href="mailto:majinfeng1@xiaomi.org">
<link rel="help" href="https://www.w3.org/TR/html401/present/frames.html#adef-scrolling">
<link rel="match" href="iframe-modify-scrolling-attr-to-yes-ref.html">
<p>Test passes if you can see the scrollbars of the iframe displayed below.</p>
<iframe src="support/iframe-which-content-height-equals-400px.html" scrolling="no" width="200px" height="100px">
</iframe>
<script>
let iframe = document.querySelector("iframe");
iframe.onload = function () {
iframe.scrolling = 'yes';
};
</script>

View file

@ -0,0 +1,4 @@
<!DOCTYPE html>
<body style="width: 200px; height: 400px">
iframe content
</body>

View file

@ -1,8 +0,0 @@
[actionsWithKeyPressed.html]
expected:
if product == "safari": ERROR
[TestDriver actions: actions with key pressed]
expected:
if product == "firefox": FAIL
if os == "mac" and product == "chrome": FAIL

View file

@ -1,67 +0,0 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>TestDriver actions: actions with key pressed</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#test1, div#test2 {
position: fixed;
top: 0;
left: 0;
width: 100px;
height: 100px;
background-color: blue;
}
div#test2 {
position: fixed;
top: 100px;
left: 0;
width: 100px;
height: 100px;
background-color: green;
}
</style>
<div id="test1">
</div>
<div id="test2">
</div>
<script>
let keys = [];
async_test(t => {
let test1 = document.getElementById("test1");
let test2 = document.getElementById("test2");
document.getElementById("test1").addEventListener("click",
e => {keys.push(e.getModifierState("Control"))});
document.getElementById("test2").addEventListener("click",
e => {keys.push(e.getModifierState("Control"))});
let actions = new test_driver.Actions()
.keyDown("\uE009")
.addTick()
.pointerMove(0, 0, {origin: test1})
.pointerDown()
.pointerUp()
.pointerMove(0, 0, {origin: test2})
.pointerDown()
.pointerUp()
.addTick()
.keyUp("\uE009")
.addTick()
.pointerMove(0, 0, {origin: test1})
.pointerDown()
.pointerUp();
actions.send()
.then(t.step_func_done(() => assert_array_equals(keys, [true, true, false])))
.catch(e => t.step_func(() => assert_unreached("Actions sequence failed " + e)));
});
</script>

View file

@ -10,7 +10,8 @@ typedef (Int8Array or Int16Array or Int32Array or
typedef (ArrayBufferView or ArrayBuffer) BufferSource; typedef (ArrayBufferView or ArrayBuffer) BufferSource;
[ [
Exposed=(Window,Worker), Exposed=(Window,Worker),
Constructor(optional DOMString message = "", optional DOMString name = "Error") Constructor(optional DOMString message = "", optional DOMString name = "Error"),
Serializable
] ]
interface DOMException { // but see below note about ECMAScript binding interface DOMException { // but see below note about ECMAScript binding
readonly attribute DOMString name; readonly attribute DOMString name;

View file

@ -10,7 +10,7 @@ partial interface Navigator {
[SecureContext, Exposed=Window] interface XR : EventTarget { [SecureContext, Exposed=Window] interface XR : EventTarget {
// Methods // Methods
Promise<void> supportsSession(XRSessionMode mode); Promise<void> supportsSession(XRSessionMode mode);
Promise<XRSession> requestSession(XRSessionMode mode); Promise<XRSession> requestSession(XRSessionMode mode, optional XRSessionInit options);
// Events // Events
attribute EventHandler ondevicechange; attribute EventHandler ondevicechange;
@ -22,6 +22,11 @@ enum XRSessionMode {
"immersive-ar" "immersive-ar"
}; };
dictionary XRSessionInit {
sequence<DOMString> requiredFeatures;
sequence<DOMString> optionalFeatures;
};
enum XREnvironmentBlendMode { enum XREnvironmentBlendMode {
"opaque", "opaque",
"additive", "additive",
@ -239,13 +244,11 @@ dictionary XRSessionEventInit : EventInit {
interface XRInputSourceEvent : Event { interface XRInputSourceEvent : Event {
[SameObject] readonly attribute XRFrame frame; [SameObject] readonly attribute XRFrame frame;
[SameObject] readonly attribute XRInputSource inputSource; [SameObject] readonly attribute XRInputSource inputSource;
[SameObject] readonly attribute long? buttonIndex;
}; };
dictionary XRInputSourceEventInit : EventInit { dictionary XRInputSourceEventInit : EventInit {
required XRFrame frame; required XRFrame frame;
required XRInputSource inputSource; required XRInputSource inputSource;
long? buttonIndex = null;
}; };
[SecureContext, Exposed=Window, Constructor(DOMString type, XRInputSourcesChangeEventInit eventInitDict)] [SecureContext, Exposed=Window, Constructor(DOMString type, XRInputSourcesChangeEventInit eventInitDict)]

View file

@ -30,8 +30,11 @@
assert_greater_than_equal(entry.startTime, startTime) assert_greater_than_equal(entry.startTime, startTime)
assert_less_than_equal(entry.startTime, endTime) assert_less_than_equal(entry.startTime, endTime)
assert_equals(entry.duration, 0.0); assert_equals(entry.duration, 0.0);
// The layout shift value should be: 300 * (100 + 60) / viewport size. const maxDimension = Math.max(document.documentElement.clientWidth,
assert_equals(entry.value, 300 * (100 + 60) / document.documentElement.clientHeight);
// The layout shift value should be:
// 300 * (100 + 60) * (60 / maxDimension) / viewport size.
assert_equals(entry.value, 300 * (100 + 60) * (60 / maxDimension) /
(document.documentElement.clientWidth * document.documentElement.clientHeight)); (document.documentElement.clientWidth * document.documentElement.clientHeight));
t.done(); t.done();
} }

View file

@ -51,8 +51,11 @@
assert_greater_than_equal(entry.startTime, startTime) assert_greater_than_equal(entry.startTime, startTime)
assert_less_than_equal(entry.startTime, endTime) assert_less_than_equal(entry.startTime, endTime)
assert_equals(entry.duration, 0.0); assert_equals(entry.duration, 0.0);
// The layout shift value should be: 300 * (100 + 60) / viewport size. const maxDimension = Math.max(document.documentElement.clientWidth,
assert_equals(entry.value, 300 * (100 + 60) / document.documentElement.clientHeight);
// The layout shift value should be:
// 300 * (100 + 60) * (60 / maxDimension) / viewport size.
assert_equals(entry.value, 300 * (100 + 60) * (60 / maxDimension) /
(document.documentElement.clientWidth * document.documentElement.clientHeight)); (document.documentElement.clientWidth * document.documentElement.clientHeight));
}) })
); );
@ -75,8 +78,11 @@
assert_greater_than_equal(entry.startTime, startTime) assert_greater_than_equal(entry.startTime, startTime)
assert_less_than_equal(entry.startTime, endTime) assert_less_than_equal(entry.startTime, endTime)
assert_equals(entry.duration, 0.0); assert_equals(entry.duration, 0.0);
// The layout shift value should be: 300 * (100 + 60) / viewport size. const maxDimension = Math.max(document.documentElement.clientWidth,
assert_equals(entry.value, 300 * (100 + 60) / document.documentElement.clientHeight);
// The layout shift value should be:
// 300 * (100 + 60) * (60 / maxDimension) / viewport size.
assert_equals(entry.value, 300 * (100 + 60) * (60 / maxDimension) /
(document.documentElement.clientWidth * document.documentElement.clientHeight)); (document.documentElement.clientWidth * document.documentElement.clientHeight));
// We should see that there was a click input entry // We should see that there was a click input entry
assert_equals(entry.hadRecentInput, true); assert_equals(entry.hadRecentInput, true);

View file

@ -3,39 +3,74 @@ promise_test(async t => cleanupSandboxedFileSystem(),
'Cleanup to setup test environment'); 'Cleanup to setup test environment');
promise_test(async t => { promise_test(async t => {
const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' });
const handle = await createFileWithContents(t, 'file-to-remove', '12345', dir); const handle = await createFileWithContents(t, 'file-to-remove', '12345', root);
await createFileWithContents(t, 'file-to-keep', 'abc'); await createFileWithContents(t, 'file-to-keep', 'abc', root);
await handle.remove(); await root.removeEntry('file-to-remove');
assert_array_equals(await getSortedDirectoryEntries(dir), ['file-to-keep']); assert_array_equals(await getSortedDirectoryEntries(root), ['file-to-keep']);
await promise_rejects(t, 'NotFoundError', getFileContents(handle)); await promise_rejects(t, 'NotFoundError', getFileContents(handle));
}, 'remove() to remove a file'); }, 'removeEntry() to remove a file');
promise_test(async t => { promise_test(async t => {
const handle = await createFileWithContents(t, 'file-to-remove', '12345'); const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' });
await handle.remove(); const handle = await createFileWithContents(t, 'file-to-remove', '12345', root);
await root.removeEntry('file-to-remove');
await promise_rejects(t, 'NotFoundError', handle.remove()); await promise_rejects(t, 'NotFoundError', root.removeEntry('file-to-remove'));
}, 'remove() on an already removed file should fail'); }, 'removeEntry() on an already removed file should fail');
promise_test(async t => { promise_test(async t => {
const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' });
const dir = await root.getDirectory('dir-to-remove', { create: true }); const dir = await root.getDirectory('dir-to-remove', { create: true });
await createFileWithContents(t, 'file-to-keep', 'abc'); await createFileWithContents(t, 'file-to-keep', 'abc', root);
await dir.remove(); await root.removeEntry('dir-to-remove');
assert_array_equals(await getSortedDirectoryEntries(root), ['file-to-keep']); assert_array_equals(await getSortedDirectoryEntries(root), ['file-to-keep']);
await promise_rejects(t, 'NotFoundError', getSortedDirectoryEntries(dir)); await promise_rejects(t, 'NotFoundError', getSortedDirectoryEntries(dir));
}, 'remove() to remove an empty directory'); }, 'removeEntry() to remove an empty directory');
promise_test(async t => { promise_test(async t => {
const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' });
const dir = await root.getDirectory('dir-to-remove', { create: true }); const dir = await root.getDirectory('dir-to-remove', { create: true });
t.add_cleanup(() => dir.removeRecursively()); t.add_cleanup(() => root.removeEntry('dir-to-remove', { recursive: true }));
await createEmptyFile(t, 'file-in-dir', dir); await createEmptyFile(t, 'file-in-dir', dir);
await promise_rejects(t, 'InvalidModificationError', dir.remove()); await promise_rejects(t, 'InvalidModificationError', root.removeEntry('dir-to-remove'));
assert_array_equals(await getSortedDirectoryEntries(root), ['dir-to-remove/']); assert_array_equals(await getSortedDirectoryEntries(root), ['dir-to-remove/']);
assert_array_equals(await getSortedDirectoryEntries(dir), ['file-in-dir']); assert_array_equals(await getSortedDirectoryEntries(dir), ['file-in-dir']);
}, 'remove() on a non-empty directory should fail'); }, 'removeEntry() on a non-empty directory should fail');
promise_test(async t => {
const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' });
const dir = await createDirectory(t, 'dir', root);
await promise_rejects(t, 'NotFoundError', dir.removeEntry(""));
}, 'removeEntry() with empty name should fail');
promise_test(async t => {
const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' });
const dir = await createDirectory(t, 'dir', root);
await promise_rejects(t, 'SecurityError', dir.removeEntry(kCurrentDirectory));
}, `removeEntry() with "${kCurrentDirectory}" name should fail`);
promise_test(async t => {
const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' });
const dir = await createDirectory(t, 'dir', root);
await promise_rejects(t, 'SecurityError', dir.removeEntry(kParentDirectory));
}, `removeEntry() with "${kParentDirectory}" name should fail`);
promise_test(async t => {
const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' });
const dir_name = 'dir-name';
const dir = await createDirectory(t, dir_name, root);
const file_name = 'file-name';
await createEmptyFile(t, file_name, dir);
for (let i = 0; i < kPathSeparators.length; ++i) {
const path_with_separator = `${dir_name}${kPathSeparators[i]}${file_name}`;
await promise_rejects(t, 'SecurityError', root.removeEntry(path_with_separator),
`removeEntry() must reject names containing "${kPathSeparators[i]}"`);
}
}, 'removeEntry() with a path separator should fail.');

View file

@ -10,7 +10,7 @@ promise_test(async t => {
promise_test(async t => { promise_test(async t => {
const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' });
const handle = await root.getDirectory('non-existing-dir', { create: true }); const handle = await root.getDirectory('non-existing-dir', { create: true });
t.add_cleanup(() => handle.removeRecursively()); t.add_cleanup(() => root.removeEntry('non-existing-dir', { recursive: true }));
assert_false(handle.isFile); assert_false(handle.isFile);
assert_true(handle.isDirectory); assert_true(handle.isDirectory);
@ -22,7 +22,7 @@ promise_test(async t => {
promise_test(async t => { promise_test(async t => {
const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' });
const existing_handle = await root.getDirectory('dir-with-contents', { create: true }); const existing_handle = await root.getDirectory('dir-with-contents', { create: true });
t.add_cleanup(() => existing_handle.removeRecursively()); t.add_cleanup(() => root.removeEntry('dir-with-contents', { recursive: true }));
const file_handle = await createEmptyFile(t, 'test-file', existing_handle); const file_handle = await createEmptyFile(t, 'test-file', existing_handle);
const handle = await root.getDirectory('dir-with-contents', { create: false }); const handle = await root.getDirectory('dir-with-contents', { create: false });
@ -36,7 +36,7 @@ promise_test(async t => {
promise_test(async t => { promise_test(async t => {
const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); const root = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' });
const existing_handle = await root.getDirectory('dir-with-contents', { create: true }); const existing_handle = await root.getDirectory('dir-with-contents', { create: true });
t.add_cleanup(() => existing_handle.removeRecursively()); t.add_cleanup(() => root.removeEntry('dir-with-contents', { recursive: true }));
const file_handle = await existing_handle.getFile('test-file', { create: true }); const file_handle = await existing_handle.getFile('test-file', { create: true });
const handle = await root.getDirectory('dir-with-contents', { create: true }); const handle = await root.getDirectory('dir-with-contents', { create: true });

View file

@ -10,7 +10,7 @@ promise_test(async t => {
promise_test(async t => { promise_test(async t => {
const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' });
const handle = await dir.getFile('non-existing-file', { create: true }); const handle = await dir.getFile('non-existing-file', { create: true });
t.add_cleanup(() => handle.remove()); t.add_cleanup(() => dir.removeEntry('non-existing-file'));
assert_true(handle.isFile); assert_true(handle.isFile);
assert_false(handle.isDirectory); assert_false(handle.isDirectory);
@ -48,7 +48,7 @@ promise_test(async t => {
promise_test(async t => { promise_test(async t => {
const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' });
const dir_handle = await dir.getDirectory('dir-name', { create: true }); const dir_handle = await dir.getDirectory('dir-name', { create: true });
t.add_cleanup(() => dir_handle.removeRecursively()); t.add_cleanup(() => dir.removeEntry('dir-name', { recursive: true }));
await promise_rejects(t, 'TypeMismatchError', dir.getFile('dir-name')); await promise_rejects(t, 'TypeMismatchError', dir.getFile('dir-name'));
}, 'getFile(create=false) when a directory already exists with the same name'); }, 'getFile(create=false) when a directory already exists with the same name');
@ -56,7 +56,7 @@ promise_test(async t => {
promise_test(async t => { promise_test(async t => {
const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' });
const dir_handle = await dir.getDirectory('dir-name', { create: true }); const dir_handle = await dir.getDirectory('dir-name', { create: true });
t.add_cleanup(() => dir_handle.removeRecursively()); t.add_cleanup(() => dir.removeEntry('dir-name', { recursive: true }));
await promise_rejects(t, 'TypeMismatchError', dir.getFile('dir-name', { create: true })); await promise_rejects(t, 'TypeMismatchError', dir.getFile('dir-name', { create: true }));
}, 'getFile(create=true) when a directory already exists with the same name'); }, 'getFile(create=true) when a directory already exists with the same name');

View file

@ -15,12 +15,8 @@ if (navigator.userAgent.includes("Windows NT")) {
async function cleanupSandboxedFileSystem() { async function cleanupSandboxedFileSystem() {
const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' }); const dir = await FileSystemDirectoryHandle.getSystemDirectory({ type: 'sandbox' });
for await (let entry of dir.getEntries()) { for await (let entry of dir.getEntries())
if (entry.isDirectory) dir.removeEntry(entry.name, { recursive: entry.isDirectory });
await entry.removeRecursively();
else
await entry.remove();
}
} }
async function getFileSize(handle) { async function getFileSize(handle) {
@ -60,7 +56,7 @@ async function createDirectory(test, name, parent) {
const new_dir_handle = await parent_dir_handle.getDirectory(name, { create: true }); const new_dir_handle = await parent_dir_handle.getDirectory(name, { create: true });
test.add_cleanup(async () => { test.add_cleanup(async () => {
try { try {
await new_dir_handle.removeRecursively(); await parent_dir_handle.removeEntry(name, { recursive: true });
} catch (e) { } catch (e) {
// Ignore any errors when removing directories, as tests might // Ignore any errors when removing directories, as tests might
// have already removed the directory. // have already removed the directory.
@ -74,7 +70,7 @@ async function createEmptyFile(test, name, parent) {
const handle = await dir.getFile(name, { create: true }); const handle = await dir.getFile(name, { create: true });
test.add_cleanup(async () => { test.add_cleanup(async () => {
try { try {
await handle.remove(); await dir.removeEntry(name);
} catch (e) { } catch (e) {
// Ignore any errors when removing files, as tests might already remove the file. // Ignore any errors when removing files, as tests might already remove the file.
} }

View file

@ -1,143 +0,0 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<style>
iframe {
width: 300px;
height: 300px;
top: 100px;
left: 100px;
border: 0;
position: absolute;
background: green;
}
#outerFrame {
width: 500px;
height: 500px;
background: blue;
}
</style>
<body id="outerFrame body" onload="run()">
<div id='outerFrame'>
<iframe id='innerFrameElement' src="resources/pointerevent_mouse_pointercapture-iframe.html"></iframe>
</div>
</body>
<script>
var receivedEventList = [];
function handleEvent(event) {
receivedEventList.push(event.target.id + ' received ' + event.type);
if (event.type == 'pointerdown') {
if (document.setPointerCaptureOnPointerDown) {
event.target.setPointerCapture(event.pointerId);
}
}
if (event.type == "pointermove") {
if (document.releasePointerCaptureOnFirstMove && event.target.hasPointerCapture(event.pointerId))
event.target.releasePointerCapture(event.pointerId);
}
};
document.testEventList = ['pointerup', 'pointerdown', 'pointermove', 'gotpointercapture', 'lostpointercapture'];
document.testEventList.forEach(function(eventName) {
document.getElementById('outerFrame').addEventListener(eventName, handleEvent);
});
document.setPointerCaptureOnPointerDown = false;
document.releasePointerCaptureOnFirstMove = false;
function run() {
promise_test (async() => {
document.setPointerCaptureOnPointerDown = true;
receivedEventList = [];
expectedEventList = ["innerFrame received pointermove",
"innerFrame received pointerdown",
"innerFrame received gotpointercapture",
"innerFrame received pointermove",
"innerFrame received pointermove",
"innerFrame received pointerup",
"innerFrame received lostpointercapture"];
await new test_driver.Actions()
.pointerMove(200, 200)
.pointerDown()
.pointerMove(150, 150)
.pointerMove(50, 50)
.pointerUp()
.send();
assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList);
document.setPointerCaptureOnPointerDown = false;
}, "Test pointer capture event route across the same-origin frame: Mouse down at inner frame and set pointer capture.");
promise_test (async() => {
document.setPointerCaptureOnPointerDown = true;
receivedEventList = [];
expectedEventList = ["outerFrame received pointermove",
"outerFrame received pointerdown",
"outerFrame received gotpointercapture",
"outerFrame received pointermove",
"outerFrame received pointerup",
"outerFrame received lostpointercapture"];
await new test_driver.Actions()
.pointerMove(25, 25)
.pointerDown()
.pointerMove(200, 200)
.pointerUp()
.send();
assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList);
document.setPointerCaptureOnPointerDown = false;
}, "Test pointer capture event route across the same-origin frame: Mouse down at outer frame body and set pointer capture.");
promise_test (async() => {
document.setPointerCaptureOnPointerDown = true;
document.releasePointerCaptureOnFirstMove = true;
receivedEventList = [];
expectedEventList = ["innerFrame received pointermove",
"innerFrame received pointerdown",
"innerFrame received gotpointercapture",
"innerFrame received pointermove",
"innerFrame received lostpointercapture",
"innerFrameDocument received pointermove",
"innerFrameDocument received pointerup",];
await new test_driver.Actions()
.pointerMove(200, 200)
.pointerDown()
.pointerMove(150, 150)
.pointerMove(50, 50)
.pointerUp()
.send();
assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList);
document.releasePointerCaptureOnFirstMove = false;
document.setPointerCaptureOnPointerDown = false;
}, "Test pointer capture event route across the same-origin frame: Mouse down with set capture at inner frame, then release on next mouse move.");
promise_test (async() => {
document.setPointerCaptureOnPointerDown = true;
document.releasePointerCaptureOnFirstMove = true;
receivedEventList = [];
expectedEventList = ["outerFrame received pointermove",
"outerFrame received pointerdown",
"outerFrame received gotpointercapture",
"outerFrame received pointermove",
"outerFrame received lostpointercapture",
"innerFrame received pointermove",
"innerFrame received pointerup"];
await new test_driver.Actions()
.pointerMove(50, 50)
.pointerDown()
.pointerMove(200, 200)
.pointerMove(250, 250)
.pointerUp()
.send();
assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList);
document.releasePointerCaptureOnFirstMove = false;
document.setPointerCaptureOnPointerDown = false;
}, "Test pointercapture event route across the same-origin frame: Mouse down with set capture at outer frame, then release on next mouse move.");
}
</script>

View file

@ -0,0 +1,160 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script type="text/javascript" src="pointerevent_support.js"></script>
<style>
iframe {
width: 300px;
height: 300px;
top: 100px;
left: 100px;
border: 0;
position: absolute;
background: green;
}
#outerFrame {
width: 500px;
height: 500px;
background: blue;
}
body {
touch-action:none;
}
</style>
<body id="outerFrame body" onload="run()">
<div id='outerFrame'>
<iframe id='innerFrameElement' src="resources/pointerevent_pointercapture-iframe.html"></iframe>
</div>
</body>
<script>
var receivedEventList = [];
var start_logging = false;
function handleEvent(event) {
if (event.type == 'pointerdown') {
start_logging = true;
if (document.setPointerCaptureOnPointerDown) {
event.target.setPointerCapture(event.pointerId);
}
}
if (event.type == "pointermove") {
if (document.releasePointerCaptureOnFirstMove && event.target.hasPointerCapture(event.pointerId))
event.target.releasePointerCapture(event.pointerId);
}
if (start_logging)
receivedEventList.push(event.target.id + ' received ' + event.type);
};
document.testEventList = ['pointerup', 'pointerdown', 'pointermove', 'gotpointercapture', 'lostpointercapture'];
document.testEventList.forEach(function(eventName) {
document.getElementById('outerFrame').addEventListener(eventName, handleEvent);
});
function Reset() {
document.setPointerCaptureOnPointerDown = false;
document.releasePointerCaptureOnFirstMove = false;
receivedEventList = [];
start_logging = false;
}
function run() {
ALL_POINTERS.forEach(function(pointerType) {
promise_test (async() => {
Reset();
document.setPointerCaptureOnPointerDown = true;
expectedEventList = ["innerFrame received pointerdown",
"innerFrame received gotpointercapture",
"innerFrame received pointermove",
"innerFrame received pointermove",
"innerFrame received pointerup",
"innerFrame received lostpointercapture"];
var pointerId = pointerType + "Pointer1";
await new test_driver.Actions()
.addPointer(pointerId, pointerType)
.pointerMove(200, 200)
.pointerDown()
.pointerMove(150, 150)
.pointerMove(50, 50)
.pointerUp()
.send();
assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList);
document.setPointerCaptureOnPointerDown = false;
}, "Test " + pointerType + "pointer capture in same-origin frame: Pointer down at inner frame and set pointer capture.");
promise_test (async() => {
Reset();
document.setPointerCaptureOnPointerDown = true;
expectedEventList = ["outerFrame received pointerdown",
"outerFrame received gotpointercapture",
"outerFrame received pointermove",
"outerFrame received pointerup",
"outerFrame received lostpointercapture"];
var pointerId = pointerType + "Pointer1";
await new test_driver.Actions()
.addPointer(pointerId, pointerType)
.pointerMove(25, 25)
.pointerDown()
.pointerMove(200, 200)
.pointerUp()
.send();
assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList);
document.setPointerCaptureOnPointerDown = false;
}, "Test " + pointerType + "pointer capture in same-origin frame: Pointer down at outer frame body and set pointer capture.");
promise_test (async() => {
Reset();
document.setPointerCaptureOnPointerDown = true;
document.releasePointerCaptureOnFirstMove = true;
// Mouse event has the frame capture, so after pointer capture released, events are
// dispatched to innerFrameDocument.
expectedEventList = ["innerFrame received pointerdown",
"innerFrame received gotpointercapture",
"innerFrame received pointermove",
"innerFrame received lostpointercapture",
(pointerType == "touch" ? "outerFrame": "innerFrameDocument") + " received pointermove",
(pointerType == "touch" ? "outerFrame": "innerFrameDocument") + " received pointerup",];
var pointerId = pointerType + "Pointer1";
await new test_driver.Actions()
.addPointer(pointerId, pointerType)
.pointerMove(200, 200)
.pointerDown()
.pointerMove(150, 150)
.pointerMove(50, 50)
.pointerUp()
.send();
assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList);
document.releasePointerCaptureOnFirstMove = false;
document.setPointerCaptureOnPointerDown = false;
}, "Test " + pointerType + "pointer capture in same-origin frame: Pointerdown with set capture at inner frame, then release on next pointermove.");
promise_test (async() => {
Reset();
document.setPointerCaptureOnPointerDown = true;
document.releasePointerCaptureOnFirstMove = true;
expectedEventList = ["outerFrame received pointerdown",
"outerFrame received gotpointercapture",
"outerFrame received pointermove",
"outerFrame received lostpointercapture",
"innerFrame received pointermove",
"innerFrame received pointerup"];
var pointerId = pointerType + "Pointer1";
await new test_driver.Actions()
.addPointer(pointerId, pointerType)
.pointerMove(50, 50)
.pointerDown()
.pointerMove(200, 200)
.pointerMove(250, 250)
.pointerUp()
.send();
assert_array_equals(receivedEventList, expectedEventList, "Received events: " + receivedEventList);
document.releasePointerCaptureOnFirstMove = false;
document.setPointerCaptureOnPointerDown = false;
}, "Test " + pointerType + "pointer capture in same-origin frame: Pointerdown with set capture at outer frame, then release on next pointermove.");
});
}
</script>

View file

@ -1,4 +1,9 @@
<html id='innerFrameDocument'> <html id='innerFrameDocument'>
<style>
body {
touch-action:none;
}
</style>
<body id='innerFrame' style='height:500px; width: 500px; padding: 0; margin: 0;'> <body id='innerFrame' style='height:500px; width: 500px; padding: 0; margin: 0;'>
<script> <script>
top.document.testEventList.forEach(function(eventName) { top.document.testEventList.forEach(function(eventName) {
@ -6,4 +11,4 @@
}); });
</script> </script>
</body> </body>
</html> </html>

View file

@ -27,6 +27,12 @@
sha384: 'sha384-wDAWxH4tOWBwAwHfBn9B7XuNmFxHTMeigAMwn0iVQ0zq3FtmYMLxihcGnU64CwcX', sha384: 'sha384-wDAWxH4tOWBwAwHfBn9B7XuNmFxHTMeigAMwn0iVQ0zq3FtmYMLxihcGnU64CwcX',
sha512: 'sha512-9wXDjd6Wq3H6nPAhI9zOvG7mJkUr03MTxaO+8ztTKnfJif42laL93Be/IF6YYZHHF4esitVYxiwpY2HSZX4l6w==' sha512: 'sha512-9wXDjd6Wq3H6nPAhI9zOvG7mJkUr03MTxaO+8ztTKnfJif42laL93Be/IF6YYZHHF4esitVYxiwpY2HSZX4l6w=='
}, },
{
destination: 'image', ext: '.png', supports_sri: false,
sha256: 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=',
sha384: 'sha384-OLBgp1GsljhM2TJ+sbHjaiH9txEUvgdDTAzHv2P24donTt6/529l+9Ua0vFImLlb',
sha512: 'sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg=='
},
// TODO(domfarolino): Add more destinations. // TODO(domfarolino): Add more destinations.
]; ];

View file

@ -34,6 +34,13 @@ SRIScriptTest.prototype.execute = function() {
document.body.appendChild(e); document.body.appendChild(e);
}; };
function set_extra_attributes(element, attrs) {
// Apply the rest of the attributes, if any.
for (const [attr_name, attr_val] of Object.entries(attrs)) {
element[attr_name] = attr_val;
}
}
function buildElementFromDestination(resource_url, destination, attrs) { function buildElementFromDestination(resource_url, destination, attrs) {
// Assert: |destination| is a valid destination. // Assert: |destination| is a valid destination.
let element; let element;
@ -45,26 +52,24 @@ function buildElementFromDestination(resource_url, destination, attrs) {
switch (destination) { switch (destination) {
case "script": case "script":
element = document.createElement(destination); element = document.createElement(destination);
set_extra_attributes(element, attrs);
element.src = resource_url; element.src = resource_url;
break; break;
case "style": case "style":
element = document.createElement('link'); element = document.createElement('link');
set_extra_attributes(element, attrs);
element.rel = 'stylesheet'; element.rel = 'stylesheet';
element.href = resource_url; element.href = resource_url;
break; break;
case "image": case "image":
element = document.createElement('img'); element = document.createElement('img');
set_extra_attributes(element, attrs);
element.src = resource_url; element.src = resource_url;
break; break;
default: default:
assert_unreached("INVALID DESTINATION"); assert_unreached("INVALID DESTINATION");
} }
// Apply the rest of the attributes, if any.
for (const [attr_name, attr_val] of Object.entries(attrs)) {
element[attr_name] = attr_val;
}
return element; return element;
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -132,7 +132,7 @@ promise_test(t => {
const promises = []; const promises = [];
invalid_signals.forEach(invalid_signal => { invalid_signals.forEach(invalid_signal => {
promises.push( promises.push(
promise_rejects(t, 'TypeError', writer.push(test_text_data, { signal: invalid_signal }))); promise_rejects(t, new TypeError(), writer.push(test_text_data, { signal: invalid_signal })));
}); });
return Promise.all(promises); return Promise.all(promises);
}, "NFCWriter.push should fail if signal is not an AbortSignal."); }, "NFCWriter.push should fail if signal is not an AbortSignal.");

View file

@ -547,15 +547,17 @@ function validateMediaStreamTrackStats(statsReport, stats) {
assert_optional_unsigned_int_field(stats, 'partialFramesLost'); assert_optional_unsigned_int_field(stats, 'partialFramesLost');
assert_optional_unsigned_int_field(stats, 'fullFramesLost'); assert_optional_unsigned_int_field(stats, 'fullFramesLost');
} else { } else {
assert_number_field(stats, 'audioLevel'); if (stats['remoteSource']) {
assert_optional_number_field(stats, 'totalAudioEnergy'); assert_number_field(stats, 'audioLevel');
assert_optional_number_field(stats, 'totalAudioEnergy');
assert_optional_number_field(stats, 'totalSamplesDuration');
}
assert_optional_boolean_field(stats, 'voiceActivityFlag'); assert_optional_boolean_field(stats, 'voiceActivityFlag');
assert_optional_number_field(stats, 'echoReturnLoss'); assert_optional_number_field(stats, 'echoReturnLoss');
assert_optional_number_field(stats, 'echoReturnLossEnhancement'); assert_optional_number_field(stats, 'echoReturnLossEnhancement');
assert_optional_unsigned_int_field(stats, 'totalSamplesSent'); assert_optional_unsigned_int_field(stats, 'totalSamplesSent');
assert_optional_unsigned_int_field(stats, 'totalSamplesReceived'); assert_optional_unsigned_int_field(stats, 'totalSamplesReceived');
assert_optional_number_field(stats, 'totalSamplesDuration');
assert_optional_unsigned_int_field(stats, 'concealedSamples'); assert_optional_unsigned_int_field(stats, 'concealedSamples');
assert_optional_unsigned_int_field(stats, 'concealmentEvents'); assert_optional_unsigned_int_field(stats, 'concealmentEvents');
assert_optional_number_field(stats, 'jitterBufferDelay'); assert_optional_number_field(stats, 'jitterBufferDelay');

View file

@ -0,0 +1,25 @@
<!doctype html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
async_test((t) => {
let onloadIsCalled = false;
window.addEventListener('load', () => {
onloadIsCalled = true;
}, {once: true});
document.addEventListener('readystatechange', t.step_func(() => {
if (document.readyState !== 'complete') {
return;
}
const xhr = new XMLHttpRequest();
xhr.open('GET', 'resources/pass.txt', false /* async */);
xhr.send();
assert_false(onloadIsCalled);
// The load event eventually arrives.
window.addEventListener('load', t.step_func_done(() => {
}), {once: 'true'});
}));
}, 'sync XHR should not fire window.onload synchronously');
</script>
</body>