mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Update web-platform-tests to revision 0b22439430b6d8d9a6d43a0908e86c0366f207c0
This commit is contained in:
parent
39ec04a065
commit
c8e806d0ef
93 changed files with 2118 additions and 597 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[canvas-transform.https.html]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
||||||
|
[white-space-pre-wrap-trailing-spaces-005.html]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
||||||
|
[white-space-pre-wrap-trailing-spaces-006.html]
|
||||||
|
expected: FAIL
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[traverse_the_history_1.html]
|
||||||
|
[Multiple history traversals from the same task]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[traverse_the_history_2.html]
|
||||||
|
[Multiple history traversals, last would be aborted]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[traverse_the_history_5.html]
|
||||||
|
[Multiple history traversals, last would be aborted]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,5 +1,24 @@
|
||||||
[open-features-negative-innerwidth-innerheight.html]
|
[open-features-negative-innerwidth-innerheight.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`]
|
[HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[features "innerheight=-404.5" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerwidth=-404.5" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerwidth=-404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerheight=-404e1" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerheight=-404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerwidth=-404e1" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,24 @@
|
||||||
[open-features-negative-screenx-screeny.html]
|
[open-features-negative-screenx-screeny.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: negative values for legacy `screenx`, `screeny`]
|
[HTML: window.open `features`: negative values for legacy `screenx`, `screeny`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[features "screenx=-204" should NOT set "left=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screeny=-204" should NOT set "top=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screeny=-204.5" should NOT set "top=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screeny=-0" should NOT set "top=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screenx=-0" should NOT set "left=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screenx=-204.5" should NOT set "left=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,24 @@
|
||||||
[open-features-negative-top-left.html]
|
[open-features-negative-top-left.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: negative values for `top`, `left`]
|
[HTML: window.open `features`: negative values for `top`, `left`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[features "top=-204" should NOT set "top=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "top=-204.5" should NOT set "top=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "left=-204" should NOT set "left=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "top=-0" should NOT set "top=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "left=-204.5" should NOT set "left=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "left=-0" should NOT set "left=204"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,24 @@
|
||||||
[open-features-negative-width-height.html]
|
[open-features-negative-width-height.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: negative values for `width`, `height`]
|
[HTML: window.open `features`: negative values for `width`, `height`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[features "height=-404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "height=-404e1" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "height=-404.5" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "width=-404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "width=-404e1" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "width=-404.5" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,48 @@
|
||||||
[open-features-non-integer-height.html]
|
[open-features-non-integer-height.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for feature `height`]
|
[HTML: window.open `features`: non-integer values for feature `height`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "height=405*3" should set "height=405"]
|
[features "height=405*3" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405.32" should set "height=405"]
|
[features "height=405.32" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405e1" should set "height=405"]
|
[features "height=405e1" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405/5" should set "height=405"]
|
[features "height=405/5" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405^4" should set "height=405"]
|
[features "height=405^4" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405.5" should set "height=405"]
|
[features "height=405.5" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405e-1" should set "height=405"]
|
[features "height=405e-1" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405 " should set "height=405"]
|
[features "height=405 " should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "height=405LLl" should set "height=405"]
|
[features "height=405LLl" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "height=/404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[top=0,left=0,width=401,: absence of feature "height" should be treated same as "height=0"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[top=0,left=0: absence of feature "height" should be treated same as "height=0"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "height=_404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "height=L404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,42 @@
|
||||||
[open-features-non-integer-innerheight.html]
|
[open-features-non-integer-innerheight.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for legacy feature `innerheight`]
|
[HTML: window.open `features`: non-integer values for legacy feature `innerheight`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "innerheight=405e-1" should set "height=405"]
|
[features "innerheight=405e-1" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405LLl" should set "height=405"]
|
[features "innerheight=405LLl" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405^4" should set "height=405"]
|
[features "innerheight=405^4" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405e1" should set "height=405"]
|
[features "innerheight=405e1" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405 " should set "height=405"]
|
[features "innerheight=405 " should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405/5" should set "height=405"]
|
[features "innerheight=405/5" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405.32" should set "height=405"]
|
[features "innerheight=405.32" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405.5" should set "height=405"]
|
[features "innerheight=405.5" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerheight=405*3" should set "height=405"]
|
[features "innerheight=405*3" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerheight=_404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerheight=L404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerheight=/404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,42 @@
|
||||||
[open-features-non-integer-innerwidth.html]
|
[open-features-non-integer-innerwidth.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for legacy feature `innerwidth`]
|
[HTML: window.open `features`: non-integer values for legacy feature `innerwidth`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "innerwidth=405e-1" should set "width=405"]
|
[features "innerwidth=405e-1" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405*3" should set "width=405"]
|
[features "innerwidth=405*3" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405.5" should set "width=405"]
|
[features "innerwidth=405.5" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405e1" should set "width=405"]
|
[features "innerwidth=405e1" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405.32" should set "width=405"]
|
[features "innerwidth=405.32" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405 " should set "width=405"]
|
[features "innerwidth=405 " should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405LLl" should set "width=405"]
|
[features "innerwidth=405LLl" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405/5" should set "width=405"]
|
[features "innerwidth=405/5" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "innerwidth=405^4" should set "width=405"]
|
[features "innerwidth=405^4" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerwidth=/404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerwidth=_404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "innerwidth=L404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,42 @@
|
||||||
[open-features-non-integer-left.html]
|
[open-features-non-integer-left.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for feature `left`]
|
[HTML: window.open `features`: non-integer values for feature `left`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "left=105e1" should set "left=105"]
|
[features "left=105e1" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105 " should set "left=105"]
|
[features "left=105 " should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105/5" should set "left=105"]
|
[features "left=105/5" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105e-1" should set "left=105"]
|
[features "left=105e-1" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105^4" should set "left=105"]
|
[features "left=105^4" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105LLl" should set "left=105"]
|
[features "left=105LLl" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105.32" should set "left=105"]
|
[features "left=105.32" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105*3" should set "left=105"]
|
[features "left=105*3" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "left=105.5" should set "left=105"]
|
[features "left=105.5" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "left=L104" should NOT set "left=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "left=/104" should NOT set "left=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "left=_104" should NOT set "left=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,42 @@
|
||||||
[open-features-non-integer-screenx.html]
|
[open-features-non-integer-screenx.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for legacy feature `screenx`]
|
[HTML: window.open `features`: non-integer values for legacy feature `screenx`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "screenx=105.5" should set "left=105"]
|
[features "screenx=105.5" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105e1" should set "left=105"]
|
[features "screenx=105e1" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105 " should set "left=105"]
|
[features "screenx=105 " should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105*3" should set "left=105"]
|
[features "screenx=105*3" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105e-1" should set "left=105"]
|
[features "screenx=105e-1" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105^4" should set "left=105"]
|
[features "screenx=105^4" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105LLl" should set "left=105"]
|
[features "screenx=105LLl" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105/5" should set "left=105"]
|
[features "screenx=105/5" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screenx=105.32" should set "left=105"]
|
[features "screenx=105.32" should set "left=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screenx=_104" should NOT set "left=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screenx=L104" should NOT set "left=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screenx=/104" should NOT set "left=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,42 @@
|
||||||
[open-features-non-integer-screeny.html]
|
[open-features-non-integer-screeny.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for legacy feature `screeny`]
|
[HTML: window.open `features`: non-integer values for legacy feature `screeny`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "screeny=405^4" should set "height=405"]
|
[features "screeny=405^4" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405e-1" should set "height=405"]
|
[features "screeny=405e-1" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405LLl" should set "height=405"]
|
[features "screeny=405LLl" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405e1" should set "height=405"]
|
[features "screeny=405e1" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405 " should set "height=405"]
|
[features "screeny=405 " should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405/5" should set "height=405"]
|
[features "screeny=405/5" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405*3" should set "height=405"]
|
[features "screeny=405*3" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405.32" should set "height=405"]
|
[features "screeny=405.32" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "screeny=405.5" should set "height=405"]
|
[features "screeny=405.5" should set "height=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screeny=_404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screeny=L404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "screeny=/404" should NOT set "height=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,42 @@
|
||||||
[open-features-non-integer-top.html]
|
[open-features-non-integer-top.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for feature `top`]
|
[HTML: window.open `features`: non-integer values for feature `top`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "top=105/5" should set "top=105"]
|
[features "top=105/5" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105*3" should set "top=105"]
|
[features "top=105*3" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105LLl" should set "top=105"]
|
[features "top=105LLl" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105e-1" should set "top=105"]
|
[features "top=105e-1" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105.32" should set "top=105"]
|
[features "top=105.32" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105e1" should set "top=105"]
|
[features "top=105e1" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105 " should set "top=105"]
|
[features "top=105 " should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105^4" should set "top=105"]
|
[features "top=105^4" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "top=105.5" should set "top=105"]
|
[features "top=105.5" should set "top=105"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "top=/104" should NOT set "top=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "top=_104" should NOT set "top=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "top=L104" should NOT set "top=104"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,48 @@
|
||||||
[open-features-non-integer-width.html]
|
[open-features-non-integer-width.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[HTML: window.open `features`: non-integer values for feature `width`]
|
[HTML: window.open `features`: non-integer values for feature `width`]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[features "width=405^4" should set "width=405"]
|
[features "width=405^4" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405.5" should set "width=405"]
|
[features "width=405.5" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405e1" should set "width=405"]
|
[features "width=405e1" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405 " should set "width=405"]
|
[features "width=405 " should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405.32" should set "width=405"]
|
[features "width=405.32" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405LLl" should set "width=405"]
|
[features "width=405LLl" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405*3" should set "width=405"]
|
[features "width=405*3" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405e-1" should set "width=405"]
|
[features "width=405e-1" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[features "width=405/5" should set "width=405"]
|
[features "width=405/5" should set "width=405"]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[top=0,left=0: absence of feature "width" should be treated same as "width=0"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "width=_404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[top=0,left=0,height=401,: absence of feature "width" should be treated same as "width=0"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "width=/404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[features "width=L404" should NOT set "width=404"]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[DOMContentLoaded-defer.html]
|
|
||||||
[The end: DOMContentLoaded and defer scripts]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
[promise-rejection-events.html]
|
[promise-rejection-events.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire]
|
[delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -8,3 +9,6 @@
|
||||||
[no unhandledrejection/rejectionhandled: rejection handler attached synchronously to a promise created from createImageBitmap]
|
[no unhandledrejection/rejectionhandled: rejection handler attached synchronously to a promise created from createImageBitmap]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[rejectionhandled is dispatched from a queued task, and not immediately]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[Worker-constructor.html]
|
|
||||||
expected: ERROR
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -0,0 +1,2 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<p style="color: blue">Blue <span style="color: green">This text should be green.</span> Blue</p>
|
|
@ -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>
|
|
@ -0,0 +1,2 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<p style="color: blue">Blue <span style="color: green">This text should be green.</span> Blue</p>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>  </span><span> XX</span></div>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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.");
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -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."
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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) => {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<body style="width: 200px; height: 400px">
|
||||||
|
iframe content
|
||||||
|
</body>
|
|
@ -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
|
|
|
@ -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>
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)]
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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.');
|
||||||
|
|
|
@ -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 });
|
||||||
|
|
|
@ -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');
|
||||||
|
|
|
@ -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.
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
|
@ -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.
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
BIN
tests/wpt/web-platform-tests/subresource-integrity/image.png
Normal file
BIN
tests/wpt/web-platform-tests/subresource-integrity/image.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
|
@ -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.");
|
||||||
|
|
|
@ -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');
|
||||||
|
|
|
@ -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>
|
Loading…
Add table
Add a link
Reference in a new issue