aboutsummaryrefslogtreecommitdiffstats
path: root/tests/wpt
diff options
context:
space:
mode:
authorServo WPT Sync <32481905+servo-wpt-sync@users.noreply.github.com>2024-08-19 03:45:30 -0400
committerGitHub <noreply@github.com>2024-08-19 07:45:30 +0000
commitd59a7f62f8f49c810a6d42b154d39bb8440eb11e (patch)
tree71865f83ba1f652b535b854e0af49a29871e4fdc /tests/wpt
parentb5fe99ba5dd548b4e9d5b5afc3e798fe4811a5fe (diff)
downloadservo-d59a7f62f8f49c810a6d42b154d39bb8440eb11e.tar.gz
servo-d59a7f62f8f49c810a6d42b154d39bb8440eb11e.zip
Update web-platform-tests to revision b'ebe057a1153d34042bac1ff3dc944220876f69ec' (#33116)
Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
Diffstat (limited to 'tests/wpt')
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/abspos/abspos-containing-block-initial-009e.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/abspos/static-fixed-inside-abspos.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/abspos/table-caption-is-containing-block-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/abspos/table-caption-passes-abspos-up-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/backgrounds/background-root-023.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/box-display/containing-block-007.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/box-display/containing-block-010.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/box-display/containing-block-021.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/clear-clearance-calculation-004.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/clear-on-parent-with-margins-no-clearance.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/clear-with-top-margin-after-cleared-empty-block.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/floats-041.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/margin-collapse-clear-015.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/floats/float-under-flatten-under-preserve-3d.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/generated-content/before-after-positioned-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-004.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-038.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-039.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-040.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-041.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-103.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-height-010.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-height-011.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-width-016.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-width-017.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/margin-collapsing-dynamic.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/positioning/abspos-001.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/positioning/position-fixed-001.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/height-table-cell-001.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001a.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001b.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001c.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001d.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001e.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001a.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001b.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001c.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001d.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/padding-applies-to-013a.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-003a.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-004a.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-004b.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-004c.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/table-height-algorithm-008a.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/table-height-algorithm-008b.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/tables/table-height-algorithm-008c.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/visuren/anonymous-boxes-001a.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/visuren/anonymous-boxes-001b.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/visuren/left-offset-position-fixed-001.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/visuren/right-offset-position-fixed-001.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-001.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-002.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-003.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-004.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-005.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-006.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-007.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-008.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-009.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-010.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-011.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-012.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-014.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-018.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-019.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-001.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-002.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-003.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-004.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-005.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-007.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-dynamic-001.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-blended-element-interposed.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-blended-element-with-transparent-pixels.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-blending-with-sibling.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-canvas-parent.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-canvas-sibling.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-mask.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-overflowing-child-of-blended-element.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-parent-with-3D-transform.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-script.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-simple.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-stacking-context-creates-isolation.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-block-in-inline.html.ini3
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-ltr-htb.html.ini42
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-ltr-vlr.html.ini42
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-ltr-vrl.html.ini42
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-rtl-htb.html.ini48
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-rtl-vlr.html.ini48
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-rtl-vrl.html.ini48
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-text-align.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-ltr-htb.html.ini30
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-ltr-vlr.html.ini30
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-ltr-vrl.html.ini30
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-rtl-htb.html.ini30
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-rtl-vlr.html.ini30
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-rtl-vrl.html.ini30
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-ltr-htb.html.ini30
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-ltr-vlr.html.ini30
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-ltr-vrl.html.ini30
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-rtl-htb.html.ini30
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-rtl-vlr.html.ini30
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-rtl-vrl.html.ini30
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-align/self-alignment/self-align-start-end-flex-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-backgrounds/background-origin/origin-border-box_with_position.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-017.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-018.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-019.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-020.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-001.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-002.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-fill-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-fill-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-backgrounds/box-shadow-029.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-backgrounds/css3-background-origin-border-box.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-backgrounds/css3-box-shadow.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-color/color-layers-no-blend-mode.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-color/composited-filters-under-opacity.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-color/filters-under-will-change-opacity.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-color/parsing/color-valid-color-layers-function.html.ini510
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-color/t32-opacity-offscreen-b.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-color/t32-opacity-offscreen-with-alpha-c.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-color/t32-opacity-zorder-c.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/abspos/dynamic-align-self-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/auto-margins-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/column-flex-child-with-max-width.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-006.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-007.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-009.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-014.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-017.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-basis-item-margins-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-box-wrap.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-item-contains-size-layout-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-item-z-ordering-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-001.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-002.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-004.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-005.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-006.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-007.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-008.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-011.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-015.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-019.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-004.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-005.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-006.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-007.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-008.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-009.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-010.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/flexbox-safe-overflow-position-006.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/grandchild-span-height.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/grid-flex-item-006.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/grid-flex-item-007.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/image-items-flake-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/intrinsic-size/row-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/stretch-obeys-min-max-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/table-as-item-stretch-cross-size-4.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-flexbox/table-as-item-wide-content.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-fonts/font-size-adjust-006.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-fonts/font-size-adjust-007.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-fonts/font-size-adjust-008.xht.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-fonts/generic-family-keywords-001.html.ini3
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-absolute-positioned-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-absolute-positioned-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-negative-values-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-negative-values-004.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-not-absolute-positioned-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-not-absolute-positioned-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-not-absolute-positioned-004.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-004.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-005.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-006.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-comma-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masonry/tentative/parsing/masonry-template-tracks-valid.html.ini69
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masonry/tentative/parsing/masonry-track-computed.html.ini24
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-masonry/tentative/parsing/masonry-track-valid.html.ini24
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-028.tentative.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-001.tentative.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-002.tentative.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-003.tentative.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-004.tentative.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-005.tentative.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-overflow/overflow-clip-margin-010.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-overflow/overflow-clip-margin-011.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-overflow/overflow-hidden-resize-with-stacking-context-child.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-overflow/overflow-recalc-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-004.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/fixed-z-index-blend.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/hypothetical-dynamic-change-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/hypothetical-dynamic-change-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/position-absolute-dynamic-auto-overflow.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/position-fixed-scroll-nested-fixed.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/position-fixed-scroll-overlap.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-bottom-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-escape-scroller-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-escape-scroller-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-escape-scroller-004.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-in-fixed-container.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-left-004.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-left-005.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-left-006.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-margins-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-stacking-context-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-top-004.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-top-005.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-top-006.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-position/z-index-blend-will-change-overlapping-layers.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/block-aspect-ratio-042.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/block-aspect-ratio-056.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/block-aspect-ratio-057.tentative.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-045.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-046.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-047.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-048.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-049.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-051.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-054.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/grid-aspect-ratio-023.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-sizing/fit-content-contribution-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-005.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-004.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-005.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-006.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-tables/table-has-box-sizing-border-box-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-text-decor/text-emphasis-punctuation-3.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-text/hyphens/hyphens-auto-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-text/overflow-wrap/overflow-wrap-min-content-size-004.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-015.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-016.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-017.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-018.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-019.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-020.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-transforms/css3-transform-scale-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-transforms/css3-transform-scale.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-transforms/perspective-containing-block-dynamic-1a.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-transforms/preserve3d-and-flattening-z-order-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-transforms/preserve3d-and-flattening-z-order-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-transforms/scalex.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-transforms/scaley.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-transforms/transform-containing-block-dynamic-1a.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-transforms/transform-stacking-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-transforms/transform-stacking-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-transforms/transform-stacking-004.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-transforms/transform3d-sorting-006.html.ini1
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-transforms/translate.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-transforms/ttwf-css-3d-polygon-cycle.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-ui/box-sizing-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-ui/box-sizing-026.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-ui/text-overflow-007.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/angle-units-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/angle-units-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/angle-units-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/angle-units-004.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/angle-units-005.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/attr-all-types.html.ini6
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/calc-positive-fraction-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/calc-size-height-interpolation.html.ini306
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html.ini12
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-aspect-ratio-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-aspect-ratio-004.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-aspect-ratio-005.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-004.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-005.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-006.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-grid-repeat.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-height.html.ini6
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-parsing.html.ini6
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/min-max-percentage-length-interpolation.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/q-unit-case-insensitivity-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/css-values/q-unit-case-insensitivity-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/cssom-view/scrollWidthHeight-negative-margin-001.html.ini12
-rw-r--r--tests/wpt/meta-legacy-layout/css/cssom-view/scrollWidthHeight-negative-margin-002.html.ini433
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/backdrop-filter-backdrop-root-filter.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/backdrop-filter-backdrop-root-mix-blend-mode.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/backdrop-filter-backdrop-root-opacity.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/clip-under-filter-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/clip-under-filter-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/clip-under-filter-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/drop-shadow-currentcolor-dynamic-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/dynamic-filter-changes-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filter-cb-dynamic-1a.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filter-cb-dynamic-1b.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filter-contrast-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filter-contrast-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filter-contrast-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-004.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-005.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filter-hue_rotate-001-test.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filter-invert-001-test.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filter-invert-002-test.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filter-saturate-001-test.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filters-drop-shadow-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filters-drop-shadow-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filters-grayscale-001-test.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filters-opacity-001-test.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filters-sepia-001-test.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filters-test-brightness-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filters-test-brightness-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/filters-test-brightness-003.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/fixed-pos-filter-clip-001.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/filter-effects/fixed-pos-filter-clip-002.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/css/selectors/user-invalid-form-submission-invalidation.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/custom-elements/upgrading/upgrade-custom-element-error-event.html.ini12
-rw-r--r--tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-event-target.any.js.ini6
-rw-r--r--tests/wpt/meta-legacy-layout/fetch/api/redirect/redirect-mode.any.js.ini33
-rw-r--r--tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-font-face.sub.tentative.html.ini3
-rw-r--r--tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini6
-rw-r--r--tests/wpt/meta-legacy-layout/html/canvas/element/manual/filters/canvas-fillStyle-opacity.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/html/canvas/element/manual/filters/canvas-globalAlpha.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini3
-rw-r--r--tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/html/rendering/replaced-elements/the-select-element/select-1-block-size.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-adopt-lazy-iframe-from-script-disabled-document.html.ini3
-rw-r--r--tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-nav-location-assign.html.ini3
-rw-r--r--tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini4
-rw-r--r--tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini3
-rw-r--r--tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/html/semantics/forms/historical.html.ini3
-rw-r--r--tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-even-less-good-value-rendering.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-optimum-value-rendering.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-rendering.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-suboptimum-value-rendering.html.ini2
-rw-r--r--tests/wpt/meta-legacy-layout/html/webappapis/update-rendering/child-document-raf-order.html.ini3
-rw-r--r--tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Range-isPointInRange.html.ini (renamed from tests/wpt/meta-legacy-layout/dom/ranges/Range-isPointInRange-shadowdom.tentative.html.ini)2
-rw-r--r--tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Selection-collapse-and-extend.html.ini12
-rw-r--r--tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Selection-getComposedRanges-collapsed.html.ini6
-rw-r--r--tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Selection-getComposedRanges.html.ini36
-rw-r--r--tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Selection-later-become-slotted-content.html.ini (renamed from tests/wpt/meta/selection/shadow-dom/select-later-become-slotted-content.tentative.html.ini)2
-rw-r--r--tests/wpt/meta-legacy-layout/xhr/responsexml-non-well-formed.htm.ini2
-rw-r--r--tests/wpt/meta/MANIFEST.json10729
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-block-in-inline.html.ini3
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-htb-ltr-htb.html.ini42
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-htb-ltr-vlr.html.ini42
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-htb-ltr-vrl.html.ini42
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-htb-rtl-htb.html.ini42
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-htb-rtl-vlr.html.ini42
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-htb-rtl-vrl.html.ini42
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-text-align.html.ini2
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-vlr-ltr-htb.html.ini30
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-vlr-ltr-vlr.html.ini30
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-vlr-ltr-vrl.html.ini30
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-vlr-rtl-htb.html.ini30
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-vlr-rtl-vlr.html.ini30
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-vlr-rtl-vrl.html.ini30
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-vrl-ltr-htb.html.ini30
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-vrl-ltr-vlr.html.ini30
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-vrl-ltr-vrl.html.ini30
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-vrl-rtl-htb.html.ini30
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-vrl-rtl-vlr.html.ini30
-rw-r--r--tests/wpt/meta/css/css-align/blocks/justify-self-vrl-rtl-vrl.html.ini30
-rw-r--r--tests/wpt/meta/css/css-color/color-layers-no-blend-mode.html.ini2
-rw-r--r--tests/wpt/meta/css/css-color/parsing/color-valid-color-layers-function.html.ini510
-rw-r--r--tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-template-tracks-valid.html.ini69
-rw-r--r--tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-track-computed.html.ini24
-rw-r--r--tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-track-valid.html.ini24
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-028.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-001.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-002.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-003.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-004.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-005.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-sizing/aspect-ratio/block-aspect-ratio-042.html.ini2
-rw-r--r--tests/wpt/meta/css/css-sizing/aspect-ratio/block-aspect-ratio-056.html.ini2
-rw-r--r--tests/wpt/meta/css/css-sizing/aspect-ratio/block-aspect-ratio-057.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-045.html.ini2
-rw-r--r--tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-046.html.ini2
-rw-r--r--tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-047.html.ini2
-rw-r--r--tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-048.html.ini2
-rw-r--r--tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-049.html.ini2
-rw-r--r--tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-051.html.ini2
-rw-r--r--tests/wpt/meta/css/css-text-decor/text-emphasis-punctuation-1.html.ini2
-rw-r--r--tests/wpt/meta/css/css-text-decor/text-emphasis-punctuation-3.html.ini2
-rw-r--r--tests/wpt/meta/css/css-values/attr-all-types.html.ini6
-rw-r--r--tests/wpt/meta/css/css-values/calc-size/animation/calc-size-height-interpolation.html.ini306
-rw-r--r--tests/wpt/meta/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html.ini12
-rw-r--r--tests/wpt/meta/css/css-values/calc-size/calc-size-aspect-ratio-003.html.ini2
-rw-r--r--tests/wpt/meta/css/css-values/calc-size/calc-size-aspect-ratio-004.html.ini2
-rw-r--r--tests/wpt/meta/css/css-values/calc-size/calc-size-aspect-ratio-005.html.ini2
-rw-r--r--tests/wpt/meta/css/css-values/calc-size/calc-size-flex-001.html.ini2
-rw-r--r--tests/wpt/meta/css/css-values/calc-size/calc-size-flex-002.html.ini2
-rw-r--r--tests/wpt/meta/css/css-values/calc-size/calc-size-flex-003.html.ini2
-rw-r--r--tests/wpt/meta/css/css-values/calc-size/calc-size-flex-004.html.ini2
-rw-r--r--tests/wpt/meta/css/css-values/calc-size/calc-size-flex-005.html.ini2
-rw-r--r--tests/wpt/meta/css/css-values/calc-size/calc-size-flex-006.html.ini2
-rw-r--r--tests/wpt/meta/css/css-values/calc-size/calc-size-grid-repeat.html.ini2
-rw-r--r--tests/wpt/meta/css/css-values/calc-size/calc-size-height.html.ini6
-rw-r--r--tests/wpt/meta/css/css-values/calc-size/calc-size-parsing.html.ini6
-rw-r--r--tests/wpt/meta/css/css-values/vh_not_refreshing_on_chrome.html.ini2
-rw-r--r--tests/wpt/meta/css/cssom-view/MediaQueryList-extends-EventTarget.html.ini7
-rw-r--r--tests/wpt/meta/css/cssom-view/matchMedia.html.ini6
-rw-r--r--tests/wpt/meta/css/cssom-view/scrollWidthHeight-negative-margin-001.html.ini12
-rw-r--r--tests/wpt/meta/css/cssom-view/scrollWidthHeight-negative-margin-002.html.ini25
-rw-r--r--tests/wpt/meta/css/selectors/user-invalid-form-submission-invalidation.html.ini2
-rw-r--r--tests/wpt/meta/custom-elements/upgrading/upgrade-custom-element-error-event.html.ini12
-rw-r--r--tests/wpt/meta/dom/observable/tentative/observable-event-target.any.js.ini6
-rw-r--r--tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini6
-rw-r--r--tests/wpt/meta/html/browsers/windows/embedded-opener-remove-frame.html.ini1
-rw-r--r--tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-adopt-lazy-iframe-from-script-disabled-document.html.ini3
-rw-r--r--tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-cross-site.tentative.sub.window.js.ini3
-rw-r--r--tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-same-site.tentative.sub.window.js.ini3
-rw-r--r--tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-user-activation-sticky.tentative.sub.window.js.ini3
-rw-r--r--tests/wpt/meta/html/semantics/embedded-content/the-img-element/update-the-image-data/not-broken-while-load-task-scheduled.html.ini6
-rw-r--r--tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-even-less-good-value-rendering.html.ini2
-rw-r--r--tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-optimum-value-rendering.html.ini2
-rw-r--r--tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-rendering.html.ini2
-rw-r--r--tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-suboptimum-value-rendering.html.ini2
-rw-r--r--tests/wpt/meta/selection/shadow-dom/tentative/Range-isPointInRange.html.ini (renamed from tests/wpt/meta/dom/ranges/Range-isPointInRange-shadowdom.tentative.html.ini)2
-rw-r--r--tests/wpt/meta/selection/shadow-dom/tentative/Selection-collapse-and-extend.html.ini12
-rw-r--r--tests/wpt/meta/selection/shadow-dom/tentative/Selection-getComposedRanges-collapsed.html.ini6
-rw-r--r--tests/wpt/meta/selection/shadow-dom/tentative/Selection-getComposedRanges.html.ini36
-rw-r--r--tests/wpt/meta/selection/shadow-dom/tentative/Selection-later-become-slotted-content.html.ini (renamed from tests/wpt/meta-legacy-layout/selection/shadow-dom/select-later-become-slotted-content.tentative.html.ini)2
-rw-r--r--tests/wpt/meta/url/failure.html.ini1
-rw-r--r--tests/wpt/meta/webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.html.ini4
-rw-r--r--tests/wpt/meta/webxr/render_state_update.https.html.ini1
-rw-r--r--tests/wpt/meta/workers/WorkerGlobalScope-close.html.ini3
-rw-r--r--tests/wpt/tests/IndexedDB/back-forward-cache-open-connection.window.js18
-rw-r--r--tests/wpt/tests/IndexedDB/back-forward-cache-open-transaction.window.js7
-rw-r--r--tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore.any.js167
-rw-r--r--tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore.htm65
-rw-r--r--tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore2.htm40
-rw-r--r--tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore3.htm39
-rw-r--r--tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore4.htm37
-rw-r--r--tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore5.htm41
-rw-r--r--tests/wpt/tests/IndexedDB/idbobjectstore_count.any.js95
-rw-r--r--tests/wpt/tests/IndexedDB/idbobjectstore_count.htm35
-rw-r--r--tests/wpt/tests/IndexedDB/idbobjectstore_count2.htm35
-rw-r--r--tests/wpt/tests/IndexedDB/idbobjectstore_count3.htm31
-rw-r--r--tests/wpt/tests/IndexedDB/idbobjectstore_count4.htm25
-rw-r--r--tests/wpt/tests/IndexedDB/resources/support.js12
-rw-r--r--tests/wpt/tests/accessibility/crashtests/missing-parent-map.html28
-rw-r--r--tests/wpt/tests/accname/name/comp_name_from_content.html6
-rw-r--r--tests/wpt/tests/accname/name/comp_name_from_content.tentative.html10
-rw-r--r--tests/wpt/tests/console/console-count-logging-manual.html23
-rw-r--r--tests/wpt/tests/console/console-count-logging.html41
-rw-r--r--tests/wpt/tests/core-aam/deletion-manual.html2
-rw-r--r--tests/wpt/tests/core-aam/insertion-manual.html2
-rw-r--r--tests/wpt/tests/core-aam/mark-manual.html2
-rw-r--r--tests/wpt/tests/core-aam/sectionfooter-manual.html96
-rw-r--r--tests/wpt/tests/core-aam/sectionheader-manual.html96
-rw-r--r--tests/wpt/tests/core-aam/suggestion-manual.html2
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-auto-margins-1.html24
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-auto-margins-2.html26
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-block-in-inline.html27
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-htb-ltr-htb.html107
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-htb-ltr-vlr.html107
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-htb-ltr-vrl.html108
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-htb-rtl-htb.html108
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-htb-rtl-vlr.html108
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-htb-rtl-vrl.html108
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-text-align.html24
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-vlr-ltr-htb.html108
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-vlr-ltr-vlr.html108
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-vlr-ltr-vrl.html108
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-vlr-rtl-htb.html108
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-vlr-rtl-vlr.html108
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-vlr-rtl-vrl.html108
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-vrl-ltr-htb.html108
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-vrl-ltr-vlr.html108
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-vrl-ltr-vrl.html108
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-vrl-rtl-htb.html108
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-vrl-rtl-vlr.html108
-rw-r--r--tests/wpt/tests/css/css-align/blocks/justify-self-vrl-rtl-vrl.html108
-rw-r--r--tests/wpt/tests/css/css-break/flexbox/single-line-column-flex-fragmentation-071.html11
-rw-r--r--tests/wpt/tests/css/css-color/color-layers-no-blend-mode-ref.html63
-rw-r--r--tests/wpt/tests/css/css-color/color-layers-no-blend-mode.html57
-rw-r--r--tests/wpt/tests/css/css-color/parsing/color-invalid-color-layers-function.html48
-rw-r--r--tests/wpt/tests/css/css-color/parsing/color-valid-color-layers-function.html55
-rw-r--r--tests/wpt/tests/css/css-fonts/variation-sequences.html2
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/inheritance.html14
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/parsing/inheritance.html14
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-computed.html54
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-edge-computed.html42
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-edge-invalid.html40
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-edge-valid.html40
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-invalid.html30
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-shorthand.html27
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-trim-computed.html15
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-trim-invalid.html15
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-trim-valid.html (renamed from tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-valid.html)7
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-valid.html54
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/support/MetricsTestFont.css4
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/support/README.md (renamed from tests/wpt/tests/css/css-inline/text-box-trim/resources/README.md)0
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/support/cap-x-height.ttf (renamed from tests/wpt/tests/css/css-inline/text-box-trim/resources/cap-x-height.ttf)bin19036 -> 19036 bytes
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/support/variant-class.js (renamed from tests/wpt/tests/css/css-inline/text-box-trim/resources/variant-class.js)0
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-edge-computed.html23
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-edge-invalid.html26
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-edge-valid.html21
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-accumulation-001.html36
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-atomic-inline-001-ref.html8
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-atomic-inline-001.html15
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-001-ref.html4
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-001.html12
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-002.html12
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-003.html12
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-004.html13
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-001-ref.html8
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-001.html16
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-002.html12
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-003.html12
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-dynamic-001-ref.html9
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-dynamic-001.html20
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-dynamic-002.html22
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-001-ref.html18
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-001.html35
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-empty-line-001-ref.html4
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-empty-line-001.html12
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-001-ref.html13
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-001.html21
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-002-ref.html9
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-002.html25
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-003-ref.html27
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-003.html33
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-start-001-ref.html6
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-start-001.html12
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001-ref.html13
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001.html21
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-002-ref.html8
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-002.html15
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-003-ref.html14
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-003.html24
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-004.html23
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-005.html23
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-006.html23
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-001-ref.html35
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-001.html48
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-002-ref.html44
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-002.html54
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-end-001-ref.html7
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-end-001.html14
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-start-001-ref.html10
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-start-001.html13
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-001-ref.html4
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-001.html12
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-multicol-001.html4
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-multicol-002.html4
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-om-001.html6
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-end-001.html14
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-start-001-ref.html2
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-start-001.html13
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-start-002.html11
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html18
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-start-001.html34
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-tall-line-001.html11
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-text-emphasis-001-ref.html (renamed from tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-text-emphasis-start-001-ref.html)9
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-text-emphasis-001.html27
-rw-r--r--tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-text-emphasis-start-001.html21
-rw-r--r--tests/wpt/tests/css/css-masonry/WEB_FEATURES.yml3
-rw-r--r--tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-template-tracks-invalid.html24
-rw-r--r--tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-template-tracks-valid.html32
-rw-r--r--tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-track-computed.html28
-rw-r--r--tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-track-invalid.html18
-rw-r--r--tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-track-valid.html25
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-028.tentative.html28
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-001.tentative.html29
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-002.tentative.html29
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-003.tentative.html34
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-004.tentative.html32
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-005.tentative.html39
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-028-ref.html17
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-with-ruby-001-ref.html22
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-with-ruby-003-ref.html27
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-with-ruby-005-ref.html27
-rw-r--r--tests/wpt/tests/css/css-scoping/host-has-001.html23
-rw-r--r--tests/wpt/tests/css/css-scoping/host-has-002.html25
-rw-r--r--tests/wpt/tests/css/css-scoping/host-has-003.html25
-rw-r--r--tests/wpt/tests/css/css-scoping/host-has-internal-001.tentative.html22
-rw-r--r--tests/wpt/tests/css/css-scoping/host-has-internal-002.tentative.html24
-rw-r--r--tests/wpt/tests/css/css-scoping/host-has-internal-003.tentative.html24
-rw-r--r--tests/wpt/tests/css/css-scrollbars/scrollbar-gutter-scroll-into-view-ref.html30
-rw-r--r--tests/wpt/tests/css/css-scrollbars/scrollbar-gutter-scroll-into-view.html38
-rw-r--r--tests/wpt/tests/css/css-shadow-parts/grouping-with-checked.html67
-rw-r--r--tests/wpt/tests/css/css-shadow-parts/grouping-with-disabled.html20
-rw-r--r--tests/wpt/tests/css/css-shapes/shape-outside/shape-image/shape-image-029.html44
-rw-r--r--tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-042.html9
-rw-r--r--tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-043.html9
-rw-r--r--tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-056.html10
-rw-r--r--tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-057.tentative.html10
-rw-r--r--tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-045.html7
-rw-r--r--tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-046.html7
-rw-r--r--tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-047.html7
-rw-r--r--tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-048.html7
-rw-r--r--tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-049.html9
-rw-r--r--tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-050.html9
-rw-r--r--tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-051.html9
-rw-r--r--tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-052.html9
-rw-r--r--tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-053.html7
-rw-r--r--tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-054.html7
-rw-r--r--tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-1-ref.html12
-rw-r--r--tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-1.html13
-rw-r--r--tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-2-ref.html13
-rw-r--r--tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-2.html14
-rw-r--r--tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-3-ref.html39
-rw-r--r--tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-3.html43
-rw-r--r--tests/wpt/tests/css/css-values/attr-all-types.html12
-rw-r--r--tests/wpt/tests/css/css-values/calc-size/animation/calc-size-height-interpolation.html64
-rw-r--r--tests/wpt/tests/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html32
-rw-r--r--tests/wpt/tests/css/css-values/calc-size/calc-size-aspect-ratio-003.html9
-rw-r--r--tests/wpt/tests/css/css-values/calc-size/calc-size-aspect-ratio-004.html9
-rw-r--r--tests/wpt/tests/css/css-values/calc-size/calc-size-aspect-ratio-005.html11
-rw-r--r--tests/wpt/tests/css/css-values/calc-size/calc-size-flex-001.html11
-rw-r--r--tests/wpt/tests/css/css-values/calc-size/calc-size-flex-002.html11
-rw-r--r--tests/wpt/tests/css/css-values/calc-size/calc-size-flex-003.html11
-rw-r--r--tests/wpt/tests/css/css-values/calc-size/calc-size-flex-004.html11
-rw-r--r--tests/wpt/tests/css/css-values/calc-size/calc-size-flex-005.html11
-rw-r--r--tests/wpt/tests/css/css-values/calc-size/calc-size-flex-006.html11
-rw-r--r--tests/wpt/tests/css/css-values/calc-size/calc-size-flex-007.html8
-rw-r--r--tests/wpt/tests/css/css-values/calc-size/calc-size-grid-repeat.html8
-rw-r--r--tests/wpt/tests/css/css-values/calc-size/calc-size-height.html1
-rw-r--r--tests/wpt/tests/css/css-values/calc-size/calc-size-parsing.html6
-rw-r--r--tests/wpt/tests/css/css-view-transitions/active-view-transition-on-non-root.html40
-rw-r--r--tests/wpt/tests/css/css-view-transitions/active-view-transition-type-on-non-root.html42
-rw-r--r--tests/wpt/tests/css/css-view-transitions/nested/contain-direct.tentative.html2
-rw-r--r--tests/wpt/tests/css/css-view-transitions/nested/contain-nested.tentative.html2
-rw-r--r--tests/wpt/tests/css/css-view-transitions/nested/contain-on-self.tentative.html2
-rw-r--r--tests/wpt/tests/css/css-view-transitions/nested/nearest-direct.tentative.html2
-rw-r--r--tests/wpt/tests/css/css-view-transitions/nested/nearest-ignores-nearest-name.tentative.html2
-rw-r--r--tests/wpt/tests/css/css-view-transitions/nested/nearest-nested.tentative.html2
-rw-r--r--tests/wpt/tests/css/css-view-transitions/nested/nested-group-in-pseudo-basic.tentative.html1
-rw-r--r--tests/wpt/tests/css/css-view-transitions/nested/resources/compute-common.css3
-rw-r--r--tests/wpt/tests/css/css-view-transitions/shadow-part-with-class-inside-shadow-important.html55
-rw-r--r--tests/wpt/tests/css/css-view-transitions/shadow-part-with-class-inside-shadow.html54
-rw-r--r--tests/wpt/tests/css/css-view-transitions/shadow-part-with-class.html58
-rw-r--r--tests/wpt/tests/css/css-view-transitions/view-transition-types-matches-ref.html2
-rw-r--r--tests/wpt/tests/css/css-view-transitions/view-transition-types-matches.html20
-rw-r--r--tests/wpt/tests/css/css-view-transitions/view-transition-types-reserved-mutation.html2
-rw-r--r--tests/wpt/tests/css/css-view-transitions/view-transition-types-reserved-ref.html2
-rw-r--r--tests/wpt/tests/css/css-view-transitions/view-transition-types-reserved.html2
-rw-r--r--tests/wpt/tests/css/cssom-view/scrollWidthHeight-negative-margin-001.html42
-rw-r--r--tests/wpt/tests/css/cssom-view/scrollWidthHeight-negative-margin-002.html100
-rw-r--r--tests/wpt/tests/css/selectors/user-invalid-form-submission-invalidation-ref.html20
-rw-r--r--tests/wpt/tests/css/selectors/user-invalid-form-submission-invalidation.html28
-rw-r--r--tests/wpt/tests/custom-elements/upgrading/upgrade-custom-element-error-event.html84
-rw-r--r--tests/wpt/tests/digital-credentials/digital-credentials-static-methods.tentative.https.html24
-rw-r--r--tests/wpt/tests/dom/events/Event-dispatch-throwing-multiple-globals.html69
-rw-r--r--tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-basic.html140
-rw-r--r--tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-multiple-action-chains.html101
-rw-r--r--tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-display-change.html100
-rw-r--r--tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-elements.html74
-rw-r--r--tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-move.html85
-rw-r--r--tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-removal.html92
-rw-r--r--tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-resize.html97
-rw-r--r--tests/wpt/tests/dom/nodes/moveBefore/tentative/pointer-events.html41
-rw-r--r--tests/wpt/tests/dom/nodes/moveBefore/tentative/selection-preserve.html34
-rw-r--r--tests/wpt/tests/dom/observable/tentative/observable-constructor.window.js2
-rw-r--r--tests/wpt/tests/dom/observable/tentative/observable-event-target.any.js16
-rw-r--r--tests/wpt/tests/dom/observable/tentative/observable-event-target.window.js6
-rw-r--r--tests/wpt/tests/dom/observable/tentative/observable-from.any.js2
-rw-r--r--tests/wpt/tests/dom/observable/tentative/observable-inspect.any.js2
-rw-r--r--tests/wpt/tests/editing/crashtests/replace-document-root-and-refocus-window.html23
-rw-r--r--tests/wpt/tests/editing/other/no-beforeinput-when-no-selection.html87
-rw-r--r--tests/wpt/tests/editing/run/undo-redo.html7
-rw-r--r--tests/wpt/tests/fenced-frame/notify-event-prevent-caching.https.html60
-rw-r--r--tests/wpt/tests/html/dom/render-blocking/support/utils.js1
-rw-r--r--tests/wpt/tests/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-adopt-lazy-iframe-from-script-disabled-document.html43
-rw-r--r--tests/wpt/tests/html/semantics/embedded-content/the-img-element/update-the-image-data/not-broken-while-load-task-scheduled.html31
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-label-element/control-active-with-multiple-clicks.html1
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-even-less-good-value-rendering.html5
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-optimum-value-rendering.html5
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-rendering.html5
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-suboptimum-value-rendering.html5
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-even-less-good-value-rendering.html3
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-optimum-value-rendering.html3
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-rendering-ref.html3
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-suboptimum-value-rendering-ref.html3
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-disabled.tentative.html44
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-fallback-datalist-animations.tentative.html58
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-keyboard-behavior.tentative.html46
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-size-multiple-new-content-ref.html19
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-size-multiple-new-content.tentative.html26
-rw-r--r--tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/bidi/subscription.html.ini3
-rw-r--r--tests/wpt/tests/largest-contentful-paint/background-image-set-image.html41
-rw-r--r--tests/wpt/tests/long-animation-frame/tentative/loaf-source-location-redirect.html2
-rw-r--r--tests/wpt/tests/mediacapture-extensions/GUM-backgroundBlur.https.html7
-rw-r--r--tests/wpt/tests/mimesniff/META.yml1
-rw-r--r--tests/wpt/tests/partitioned-popins/META.yml3
-rw-r--r--tests/wpt/tests/partitioned-popins/partitioned-popins.cookies.tentative.sub.https.window.js43
-rw-r--r--tests/wpt/tests/partitioned-popins/partitioned-popins.localStorage.tentative.sub.https.window.js42
-rw-r--r--tests/wpt/tests/partitioned-popins/resources/get_cookies.py10
-rw-r--r--tests/wpt/tests/partitioned-popins/resources/partitioned-popins.cookies-iframe.html15
-rw-r--r--tests/wpt/tests/partitioned-popins/resources/partitioned-popins.cookies-popin.py56
-rw-r--r--tests/wpt/tests/partitioned-popins/resources/partitioned-popins.cookies-window.html16
-rw-r--r--tests/wpt/tests/partitioned-popins/resources/partitioned-popins.localStorage-iframe.html12
-rw-r--r--tests/wpt/tests/partitioned-popins/resources/partitioned-popins.localStorage-popin.html19
-rw-r--r--tests/wpt/tests/partitioned-popins/resources/partitioned-popins.localStorage-window.html13
-rw-r--r--tests/wpt/tests/resource-timing/internal-resources-not-counted.html39
-rw-r--r--tests/wpt/tests/selection/shadow-dom/tentative/Range-isPointInRange.html (renamed from tests/wpt/tests/dom/ranges/Range-isPointInRange-shadowdom.tentative.html)0
-rw-r--r--tests/wpt/tests/selection/shadow-dom/tentative/Selection-collapse-and-extend.html (renamed from tests/wpt/tests/shadow-dom/selection-collapse-and-extend.tentative.html)0
-rw-r--r--tests/wpt/tests/selection/shadow-dom/tentative/Selection-getComposedRanges-collapsed.html (renamed from tests/wpt/tests/shadow-dom/selection-getComposedRanges-collapsed.tentative.html)0
-rw-r--r--tests/wpt/tests/selection/shadow-dom/tentative/Selection-getComposedRanges.html (renamed from tests/wpt/tests/shadow-dom/selection-getComposedRanges.tentative.html)0
-rw-r--r--tests/wpt/tests/selection/shadow-dom/tentative/Selection-later-become-slotted-content.html (renamed from tests/wpt/tests/selection/shadow-dom/select-later-become-slotted-content.tentative.html)0
-rw-r--r--tests/wpt/tests/shadow-dom/focus-navigation/reading-flow/tentative/grid-order-with-display-contents.html30
-rw-r--r--tests/wpt/tests/shadow-dom/focus-navigation/reading-flow/tentative/grid-order-with-nested-grids.html26
-rw-r--r--tests/wpt/tests/shadow-dom/reference-target/tentative/README.md9
-rw-r--r--tests/wpt/tests/shadow-dom/reference-target/tentative/anchor.html57
-rw-r--r--tests/wpt/tests/shadow-dom/reference-target/tentative/aria-labelledby.html55
-rw-r--r--tests/wpt/tests/shadow-dom/reference-target/tentative/label-descendant.html68
-rw-r--r--tests/wpt/tests/shadow-dom/reference-target/tentative/label-for.html91
-rw-r--r--tests/wpt/tests/shadow-dom/reference-target/tentative/popovertarget.html40
-rw-r--r--tests/wpt/tests/shadow-dom/reference-target/tentative/property-reflection.html211
-rw-r--r--tests/wpt/tests/svg/painting/reftests/non-scaling-stroke-004.html28
-rw-r--r--tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorchrome.py6
-rw-r--r--tests/wpt/tests/url/META.yml1
-rw-r--r--tests/wpt/tests/url/README.md4
-rw-r--r--tests/wpt/tests/web-animations/animation-model/animation-types/property-list.js10
-rw-r--r--tests/wpt/tests/webdriver/tests/bidi/browsing_context/navigate/error.py284
-rw-r--r--tests/wpt/tests/webdriver/tests/bidi/browsing_context/navigation_failed/navigation_failed.py2
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/buffer.https.any.js43
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/clamp.https.any.js22
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/hard_sigmoid.https.any.js22
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/hard_swish.https.any.js22
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/leaky_relu.https.any.js22
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/linear.https.any.js22
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/lstm.https.any.js825
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/lstm_cell.https.any.js401
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/parallel-dispatch.https.any.js331
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/relu.https.any.js24
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/sigmoid.https.any.js22
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/softplus.https.any.js22
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/softsign.https.any.js44
-rw-r--r--tests/wpt/tests/webnn/resources/utils_validation.js49
-rw-r--r--tests/wpt/tests/webnn/validation_tests/argMinMax.https.any.js14
-rw-r--r--tests/wpt/tests/webnn/validation_tests/batchNormalization.https.any.js16
-rw-r--r--tests/wpt/tests/webnn/validation_tests/build-more-than-once.https.any.js3
-rw-r--r--tests/wpt/tests/webnn/validation_tests/cast.https.any.js3
-rw-r--r--tests/wpt/tests/webnn/validation_tests/clamp.https.any.js18
-rw-r--r--tests/wpt/tests/webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.js3
-rw-r--r--tests/wpt/tests/webnn/validation_tests/concat.https.any.js14
-rw-r--r--tests/wpt/tests/webnn/validation_tests/constant-changed-buffer.https.any.js3
-rw-r--r--tests/wpt/tests/webnn/validation_tests/constant.https.any.js3
-rw-r--r--tests/wpt/tests/webnn/validation_tests/conv2d.https.any.js14
-rw-r--r--tests/wpt/tests/webnn/validation_tests/convTranspose2d.https.any.js16
-rw-r--r--tests/wpt/tests/webnn/validation_tests/createContext.https.any.js3
-rw-r--r--tests/wpt/tests/webnn/validation_tests/destroyContext.https.any.js38
-rw-r--r--tests/wpt/tests/webnn/validation_tests/elementwise-binary.https.any.js14
-rw-r--r--tests/wpt/tests/webnn/validation_tests/elementwise-logical.https.any.js9
-rw-r--r--tests/wpt/tests/webnn/validation_tests/elementwise-unary.https.any.js6
-rw-r--r--tests/wpt/tests/webnn/validation_tests/elu.https.any.js22
-rw-r--r--tests/wpt/tests/webnn/validation_tests/expand.https.any.js21
-rw-r--r--tests/wpt/tests/webnn/validation_tests/gather.https.any.js18
-rw-r--r--tests/wpt/tests/webnn/validation_tests/gelu.https.any.js7
-rw-r--r--tests/wpt/tests/webnn/validation_tests/gemm.https.any.js21
-rw-r--r--tests/wpt/tests/webnn/validation_tests/gru.https.any.js12
-rw-r--r--tests/wpt/tests/webnn/validation_tests/gruCell.https.any.js14
-rw-r--r--tests/wpt/tests/webnn/validation_tests/hardSigmoid.https.any.js7
-rw-r--r--tests/wpt/tests/webnn/validation_tests/hardSwish.https.any.js6
-rw-r--r--tests/wpt/tests/webnn/validation_tests/input.https.any.js3
-rw-r--r--tests/wpt/tests/webnn/validation_tests/instanceNormalization.https.any.js20
-rw-r--r--tests/wpt/tests/webnn/validation_tests/layerNormalization.https.any.js22
-rw-r--r--tests/wpt/tests/webnn/validation_tests/leakyRelu.https.any.js6
-rw-r--r--tests/wpt/tests/webnn/validation_tests/linear.https.any.js6
-rw-r--r--tests/wpt/tests/webnn/validation_tests/lstm.https.any.js12
-rw-r--r--tests/wpt/tests/webnn/validation_tests/lstmCell.https.any.js12
-rw-r--r--tests/wpt/tests/webnn/validation_tests/matmul.https.any.js10
-rw-r--r--tests/wpt/tests/webnn/validation_tests/pad.https.any.js16
-rw-r--r--tests/wpt/tests/webnn/validation_tests/pooling-and-reduction-keep-dims.https.any.js3
-rw-r--r--tests/wpt/tests/webnn/validation_tests/pooling.https.any.js14
-rw-r--r--tests/wpt/tests/webnn/validation_tests/prelu.https.any.js9
-rw-r--r--tests/wpt/tests/webnn/validation_tests/reduction.https.any.js14
-rw-r--r--tests/wpt/tests/webnn/validation_tests/relu.https.any.js6
-rw-r--r--tests/wpt/tests/webnn/validation_tests/resample2d.https.any.js80
-rw-r--r--tests/wpt/tests/webnn/validation_tests/reshape.https.any.js10
-rw-r--r--tests/wpt/tests/webnn/validation_tests/sigmoid.https.any.js6
-rw-r--r--tests/wpt/tests/webnn/validation_tests/slice.https.any.js11
-rw-r--r--tests/wpt/tests/webnn/validation_tests/softmax.https.any.js21
-rw-r--r--tests/wpt/tests/webnn/validation_tests/softplus.https.any.js6
-rw-r--r--tests/wpt/tests/webnn/validation_tests/softsign.https.any.js6
-rw-r--r--tests/wpt/tests/webnn/validation_tests/split.https.any.js16
-rw-r--r--tests/wpt/tests/webnn/validation_tests/tanh.https.any.js6
-rw-r--r--tests/wpt/tests/webnn/validation_tests/transpose.https.any.js33
-rw-r--r--tests/wpt/tests/webnn/validation_tests/triangular.https.any.js9
-rw-r--r--tests/wpt/tests/webnn/validation_tests/where.https.any.js11
-rw-r--r--tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform-drop-frames-worker.js34
-rw-r--r--tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform-no-write-worker.js17
-rw-r--r--tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform-worker.js44
-rw-r--r--tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform.https.html161
-rw-r--r--tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-sender-worker-single-frame.https.html133
-rw-r--r--tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-sender-worker-single-frame.js16
-rw-r--r--tests/wpt/tests/webrtc/protocol/pt-no-bundle.html42
806 files changed, 25185 insertions, 2215 deletions
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/abspos/abspos-containing-block-initial-009e.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/abspos/abspos-containing-block-initial-009e.xht.ini
deleted file mode 100644
index e0539e77862..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/abspos/abspos-containing-block-initial-009e.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[abspos-containing-block-initial-009e.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/abspos/static-fixed-inside-abspos.html.ini b/tests/wpt/meta-legacy-layout/css/CSS2/abspos/static-fixed-inside-abspos.html.ini
deleted file mode 100644
index 88f74804428..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/abspos/static-fixed-inside-abspos.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[static-fixed-inside-abspos.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/abspos/table-caption-is-containing-block-001.html.ini b/tests/wpt/meta-legacy-layout/css/CSS2/abspos/table-caption-is-containing-block-001.html.ini
deleted file mode 100644
index 66d3d601b7f..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/abspos/table-caption-is-containing-block-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[table-caption-is-containing-block-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/abspos/table-caption-passes-abspos-up-001.html.ini b/tests/wpt/meta-legacy-layout/css/CSS2/abspos/table-caption-passes-abspos-up-001.html.ini
deleted file mode 100644
index af9fd26b7b3..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/abspos/table-caption-passes-abspos-up-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[table-caption-passes-abspos-up-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/backgrounds/background-root-023.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/backgrounds/background-root-023.xht.ini
deleted file mode 100644
index 27270237b19..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/backgrounds/background-root-023.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[background-root-023.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/box-display/containing-block-007.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/box-display/containing-block-007.xht.ini
deleted file mode 100644
index 0c000bb2cd3..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/box-display/containing-block-007.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[containing-block-007.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/box-display/containing-block-010.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/box-display/containing-block-010.xht.ini
deleted file mode 100644
index af40eef0a5d..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/box-display/containing-block-010.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[containing-block-010.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/box-display/containing-block-021.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/box-display/containing-block-021.xht.ini
deleted file mode 100644
index bcb9c73edf7..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/box-display/containing-block-021.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[containing-block-021.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/clear-clearance-calculation-004.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/clear-clearance-calculation-004.xht.ini
deleted file mode 100644
index 6e5799fc585..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/clear-clearance-calculation-004.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clear-clearance-calculation-004.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/clear-on-parent-with-margins-no-clearance.html.ini b/tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/clear-on-parent-with-margins-no-clearance.html.ini
deleted file mode 100644
index 216939d7839..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/clear-on-parent-with-margins-no-clearance.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clear-on-parent-with-margins-no-clearance.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/clear-with-top-margin-after-cleared-empty-block.html.ini b/tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/clear-with-top-margin-after-cleared-empty-block.html.ini
deleted file mode 100644
index c1602cdda56..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/clear-with-top-margin-after-cleared-empty-block.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clear-with-top-margin-after-cleared-empty-block.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/floats-041.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/floats-041.xht.ini
deleted file mode 100644
index b21db4dcaa7..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/floats-041.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[floats-041.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/margin-collapse-clear-015.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/margin-collapse-clear-015.xht.ini
deleted file mode 100644
index e228a3fcfa4..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/floats-clear/margin-collapse-clear-015.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[margin-collapse-clear-015.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/floats/float-under-flatten-under-preserve-3d.html.ini b/tests/wpt/meta-legacy-layout/css/CSS2/floats/float-under-flatten-under-preserve-3d.html.ini
deleted file mode 100644
index 34417d4fee3..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/floats/float-under-flatten-under-preserve-3d.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[float-under-flatten-under-preserve-3d.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/generated-content/before-after-positioned-002.html.ini b/tests/wpt/meta-legacy-layout/css/CSS2/generated-content/before-after-positioned-002.html.ini
deleted file mode 100644
index 257a5fcd94c..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/generated-content/before-after-positioned-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[before-after-positioned-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-004.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-004.xht.ini
deleted file mode 100644
index d8dc0392e08..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-004.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[margin-collapse-004.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-038.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-038.xht.ini
deleted file mode 100644
index 4add9bf88f0..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-038.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[margin-collapse-038.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-039.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-039.xht.ini
deleted file mode 100644
index 33542c4d5d8..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-039.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[margin-collapse-039.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-040.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-040.xht.ini
deleted file mode 100644
index be2e1fbc2f9..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-040.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[margin-collapse-040.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-041.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-041.xht.ini
deleted file mode 100644
index 1ebdc37062d..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-041.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[margin-collapse-041.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-103.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-103.xht.ini
deleted file mode 100644
index e117b93df6a..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/margin-padding-clear/margin-collapse-103.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[margin-collapse-103.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-height-010.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-height-010.xht.ini
deleted file mode 100644
index db68d37d7a3..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-height-010.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[inline-replaced-height-010.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-height-011.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-height-011.xht.ini
deleted file mode 100644
index 337a7e7e162..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-height-011.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[inline-replaced-height-011.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-width-016.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-width-016.xht.ini
deleted file mode 100644
index aa3c1e00555..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-width-016.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[inline-replaced-width-016.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-width-017.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-width-017.xht.ini
deleted file mode 100644
index fd6fb9fb361..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/inline-replaced-width-017.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[inline-replaced-width-017.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/margin-collapsing-dynamic.html.ini b/tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/margin-collapsing-dynamic.html.ini
deleted file mode 100644
index d1e5504226f..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/normal-flow/margin-collapsing-dynamic.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[margin-collapsing-dynamic.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/positioning/abspos-001.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/positioning/abspos-001.xht.ini
deleted file mode 100644
index 121fd5f30db..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/positioning/abspos-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[abspos-001.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/positioning/position-fixed-001.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/positioning/position-fixed-001.xht.ini
deleted file mode 100644
index 4b3ed34c385..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/positioning/position-fixed-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-fixed-001.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-table-cell-001.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-table-cell-001.xht.ini
deleted file mode 100644
index 6fea2a4bc5e..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-table-cell-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[height-table-cell-001.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001.xht.ini
deleted file mode 100644
index 571ef76379b..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[height-width-inline-table-001.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001a.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001a.xht.ini
deleted file mode 100644
index 9f3b1bde264..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001a.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[height-width-inline-table-001a.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001b.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001b.xht.ini
deleted file mode 100644
index 7a2de295034..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001b.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[height-width-inline-table-001b.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001c.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001c.xht.ini
deleted file mode 100644
index 2be1f26fd63..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001c.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[height-width-inline-table-001c.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001d.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001d.xht.ini
deleted file mode 100644
index 2dab81e6017..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001d.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[height-width-inline-table-001d.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001e.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001e.xht.ini
deleted file mode 100644
index 7bf7416a30e..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-inline-table-001e.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[height-width-inline-table-001e.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001.xht.ini
deleted file mode 100644
index b8444d7a4ab..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[height-width-table-001.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001a.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001a.xht.ini
deleted file mode 100644
index c63f911ca04..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001a.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[height-width-table-001a.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001b.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001b.xht.ini
deleted file mode 100644
index 2ea213a18bf..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001b.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[height-width-table-001b.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001c.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001c.xht.ini
deleted file mode 100644
index c4df897dc76..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001c.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[height-width-table-001c.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001d.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001d.xht.ini
deleted file mode 100644
index 2634e6b790e..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/height-width-table-001d.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[height-width-table-001d.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/padding-applies-to-013a.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/padding-applies-to-013a.xht.ini
deleted file mode 100644
index a2a55d1df7c..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/padding-applies-to-013a.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[padding-applies-to-013a.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-003a.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-003a.xht.ini
deleted file mode 100644
index f0fb22d7cdb..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-003a.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[separated-border-model-003a.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-004a.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-004a.xht.ini
deleted file mode 100644
index 81b492ba93c..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-004a.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[separated-border-model-004a.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-004b.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-004b.xht.ini
deleted file mode 100644
index 4e9cd35b5aa..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-004b.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[separated-border-model-004b.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-004c.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-004c.xht.ini
deleted file mode 100644
index 66bf8eb7017..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/separated-border-model-004c.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[separated-border-model-004c.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/table-height-algorithm-008a.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/table-height-algorithm-008a.xht.ini
deleted file mode 100644
index c8bbd0b7d36..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/table-height-algorithm-008a.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[table-height-algorithm-008a.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/table-height-algorithm-008b.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/table-height-algorithm-008b.xht.ini
deleted file mode 100644
index 389f61f0eaf..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/table-height-algorithm-008b.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[table-height-algorithm-008b.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/tables/table-height-algorithm-008c.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/tables/table-height-algorithm-008c.xht.ini
deleted file mode 100644
index aa34e356889..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/tables/table-height-algorithm-008c.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[table-height-algorithm-008c.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/visuren/anonymous-boxes-001a.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/visuren/anonymous-boxes-001a.xht.ini
deleted file mode 100644
index 48932cc679e..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/visuren/anonymous-boxes-001a.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[anonymous-boxes-001a.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/visuren/anonymous-boxes-001b.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/visuren/anonymous-boxes-001b.xht.ini
deleted file mode 100644
index 67b06807a43..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/visuren/anonymous-boxes-001b.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[anonymous-boxes-001b.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/visuren/left-offset-position-fixed-001.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/visuren/left-offset-position-fixed-001.xht.ini
deleted file mode 100644
index e677cc5d42e..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/visuren/left-offset-position-fixed-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[left-offset-position-fixed-001.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/visuren/right-offset-position-fixed-001.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/visuren/right-offset-position-fixed-001.xht.ini
deleted file mode 100644
index da7eafa8db7..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/visuren/right-offset-position-fixed-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[right-offset-position-fixed-001.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-001.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-001.xht.ini
deleted file mode 100644
index be45426fd17..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-001.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-002.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-002.xht.ini
deleted file mode 100644
index c070fd97625..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-002.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-002.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-003.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-003.xht.ini
deleted file mode 100644
index e5d8191c167..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-003.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-003.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-004.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-004.xht.ini
deleted file mode 100644
index 13ca78d3a73..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-004.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-004.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-005.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-005.xht.ini
deleted file mode 100644
index 7e40839160d..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-005.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-005.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-006.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-006.xht.ini
deleted file mode 100644
index b745a9e3a11..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-006.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-006.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-007.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-007.xht.ini
deleted file mode 100644
index ecc9686181b..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-007.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-007.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-008.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-008.xht.ini
deleted file mode 100644
index 31bdee6f0aa..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-008.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-008.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-009.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-009.xht.ini
deleted file mode 100644
index 9f81df5a055..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-009.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-009.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-010.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-010.xht.ini
deleted file mode 100644
index 96a53382b48..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-010.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-010.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-011.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-011.xht.ini
deleted file mode 100644
index b3bfadfe8d8..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-011.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-011.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-012.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-012.xht.ini
deleted file mode 100644
index 3dfc42df0f4..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-012.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-012.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-014.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-014.xht.ini
deleted file mode 100644
index ec47f89df87..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-014.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-014.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-018.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-018.xht.ini
deleted file mode 100644
index 96ee3b9a4bc..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-018.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-018.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-019.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-019.xht.ini
deleted file mode 100644
index 74c4c6da678..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-019.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-019.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-001.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-001.xht.ini
deleted file mode 100644
index b04bdf766b2..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-abspos-001.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-002.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-002.xht.ini
deleted file mode 100644
index bb6273f48e0..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-002.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-abspos-002.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-003.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-003.xht.ini
deleted file mode 100644
index 815ea4bba35..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-003.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-abspos-003.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-004.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-004.xht.ini
deleted file mode 100644
index d5769066030..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-004.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-abspos-004.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-005.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-005.xht.ini
deleted file mode 100644
index 7c066ff8ff6..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-005.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-abspos-005.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-007.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-007.xht.ini
deleted file mode 100644
index 855e9980a3d..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-abspos-007.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-abspos-007.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-dynamic-001.xht.ini b/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-dynamic-001.xht.ini
deleted file mode 100644
index 28cc8b1f425..00000000000
--- a/tests/wpt/meta-legacy-layout/css/CSS2/zindex/z-index-dynamic-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-dynamic-001.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini b/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini
deleted file mode 100644
index 5496474410b..00000000000
--- a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[mix-blend-mode-animation.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-blended-element-interposed.html.ini b/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-blended-element-interposed.html.ini
deleted file mode 100644
index f4ba42ba597..00000000000
--- a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-blended-element-interposed.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[mix-blend-mode-blended-element-interposed.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-blended-element-with-transparent-pixels.html.ini b/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-blended-element-with-transparent-pixels.html.ini
deleted file mode 100644
index e969ccfd9ae..00000000000
--- a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-blended-element-with-transparent-pixels.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[mix-blend-mode-blended-element-with-transparent-pixels.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-blending-with-sibling.html.ini b/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-blending-with-sibling.html.ini
deleted file mode 100644
index 51bd95228fb..00000000000
--- a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-blending-with-sibling.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[mix-blend-mode-blending-with-sibling.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-canvas-parent.html.ini b/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-canvas-parent.html.ini
deleted file mode 100644
index 3bca294ac5f..00000000000
--- a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-canvas-parent.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[mix-blend-mode-canvas-parent.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-canvas-sibling.html.ini b/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-canvas-sibling.html.ini
deleted file mode 100644
index 2bc23c0b9b2..00000000000
--- a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-canvas-sibling.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[mix-blend-mode-canvas-sibling.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-mask.html.ini b/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-mask.html.ini
deleted file mode 100644
index 1f039c2f7aa..00000000000
--- a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-mask.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[mix-blend-mode-mask.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-overflowing-child-of-blended-element.html.ini b/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-overflowing-child-of-blended-element.html.ini
deleted file mode 100644
index e628a53f56c..00000000000
--- a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-overflowing-child-of-blended-element.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[mix-blend-mode-overflowing-child-of-blended-element.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-parent-with-3D-transform.html.ini b/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-parent-with-3D-transform.html.ini
deleted file mode 100644
index 3260cfddf6f..00000000000
--- a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-parent-with-3D-transform.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[mix-blend-mode-parent-with-3D-transform.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-script.html.ini b/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-script.html.ini
deleted file mode 100644
index d9d62c6cff4..00000000000
--- a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-script.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[mix-blend-mode-script.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-simple.html.ini b/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-simple.html.ini
deleted file mode 100644
index b75b4a3d3e2..00000000000
--- a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-simple.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[mix-blend-mode-simple.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-stacking-context-creates-isolation.html.ini b/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-stacking-context-creates-isolation.html.ini
deleted file mode 100644
index 8e3c2a518e1..00000000000
--- a/tests/wpt/meta-legacy-layout/css/compositing/mix-blend-mode/mix-blend-mode-stacking-context-creates-isolation.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[mix-blend-mode-stacking-context-creates-isolation.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-block-in-inline.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-block-in-inline.html.ini
new file mode 100644
index 00000000000..f46e4cb70e6
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-block-in-inline.html.ini
@@ -0,0 +1,3 @@
+[justify-self-block-in-inline.html]
+ [.block-in-inline 1]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-ltr-htb.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-ltr-htb.html.ini
new file mode 100644
index 00000000000..09cc50092f7
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-ltr-htb.html.ini
@@ -0,0 +1,42 @@
+[justify-self-htb-ltr-htb.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 4]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 6]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 14]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-ltr-vlr.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-ltr-vlr.html.ini
new file mode 100644
index 00000000000..91b531b8c25
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-ltr-vlr.html.ini
@@ -0,0 +1,42 @@
+[justify-self-htb-ltr-vlr.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 4]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 6]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 14]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-ltr-vrl.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-ltr-vrl.html.ini
new file mode 100644
index 00000000000..f67f288e230
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-ltr-vrl.html.ini
@@ -0,0 +1,42 @@
+[justify-self-htb-ltr-vrl.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 4]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 6]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 14]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-rtl-htb.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-rtl-htb.html.ini
new file mode 100644
index 00000000000..2af8e82e17e
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-rtl-htb.html.ini
@@ -0,0 +1,48 @@
+[justify-self-htb-rtl-htb.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 4]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 6]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 14]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-rtl-vlr.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-rtl-vlr.html.ini
new file mode 100644
index 00000000000..8071549b828
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-rtl-vlr.html.ini
@@ -0,0 +1,48 @@
+[justify-self-htb-rtl-vlr.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 4]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 6]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 14]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-rtl-vrl.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-rtl-vrl.html.ini
new file mode 100644
index 00000000000..094060065b4
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-htb-rtl-vrl.html.ini
@@ -0,0 +1,48 @@
+[justify-self-htb-rtl-vrl.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 4]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 6]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 14]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-text-align.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-text-align.html.ini
new file mode 100644
index 00000000000..b36a5fb8ed4
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-text-align.html.ini
@@ -0,0 +1,2 @@
+[justify-self-text-align.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-ltr-htb.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-ltr-htb.html.ini
new file mode 100644
index 00000000000..b38f53318d0
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-ltr-htb.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vlr-ltr-htb.html]
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-ltr-vlr.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-ltr-vlr.html.ini
new file mode 100644
index 00000000000..37b818bb55c
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-ltr-vlr.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vlr-ltr-vlr.html]
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-ltr-vrl.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-ltr-vrl.html.ini
new file mode 100644
index 00000000000..48c1ba8a1b6
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-ltr-vrl.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vlr-ltr-vrl.html]
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-rtl-htb.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-rtl-htb.html.ini
new file mode 100644
index 00000000000..709462abe4c
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-rtl-htb.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vlr-rtl-htb.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-rtl-vlr.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-rtl-vlr.html.ini
new file mode 100644
index 00000000000..fd35b46c0ff
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-rtl-vlr.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vlr-rtl-vlr.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-rtl-vrl.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-rtl-vrl.html.ini
new file mode 100644
index 00000000000..314903bde97
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vlr-rtl-vrl.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vlr-rtl-vrl.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-ltr-htb.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-ltr-htb.html.ini
new file mode 100644
index 00000000000..a98c58250da
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-ltr-htb.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vrl-ltr-htb.html]
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-ltr-vlr.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-ltr-vlr.html.ini
new file mode 100644
index 00000000000..0ec20a987e3
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-ltr-vlr.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vrl-ltr-vlr.html]
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-ltr-vrl.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-ltr-vrl.html.ini
new file mode 100644
index 00000000000..52777ae4ce1
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-ltr-vrl.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vrl-ltr-vrl.html]
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-rtl-htb.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-rtl-htb.html.ini
new file mode 100644
index 00000000000..7db58fdd46c
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-rtl-htb.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vrl-rtl-htb.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-rtl-vlr.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-rtl-vlr.html.ini
new file mode 100644
index 00000000000..73f7ce69cb5
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-rtl-vlr.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vrl-rtl-vlr.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-rtl-vrl.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-rtl-vrl.html.ini
new file mode 100644
index 00000000000..dec1e8471d0
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/blocks/justify-self-vrl-rtl-vrl.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vrl-rtl-vrl.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-align/self-alignment/self-align-start-end-flex-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/self-alignment/self-align-start-end-flex-001.html.ini
new file mode 100644
index 00000000000..d21891e9591
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-align/self-alignment/self-align-start-end-flex-001.html.ini
@@ -0,0 +1,2 @@
+[self-align-start-end-flex-001.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-backgrounds/background-origin/origin-border-box_with_position.html.ini b/tests/wpt/meta-legacy-layout/css/css-backgrounds/background-origin/origin-border-box_with_position.html.ini
deleted file mode 100644
index 69809075f65..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-backgrounds/background-origin/origin-border-box_with_position.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[origin-border-box_with_position.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-017.xht.ini b/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-017.xht.ini
deleted file mode 100644
index 091af4e43ac..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-017.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[border-image-017.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-018.xht.ini b/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-018.xht.ini
deleted file mode 100644
index 1533dcab1d9..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-018.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[border-image-018.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-019.xht.ini b/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-019.xht.ini
deleted file mode 100644
index e59752d6970..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-019.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[border-image-019.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-020.xht.ini b/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-020.xht.ini
deleted file mode 100644
index ef25e605a6c..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-020.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[border-image-020.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-001.xht.ini b/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-001.xht.ini
deleted file mode 100644
index 781997400f1..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[border-image-slice-001.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-002.xht.ini b/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-002.xht.ini
deleted file mode 100644
index e1d1dda7b85..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-002.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[border-image-slice-002.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-fill-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-fill-001.html.ini
deleted file mode 100644
index 6fc15684d17..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-fill-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[border-image-slice-fill-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-fill-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-fill-002.html.ini
deleted file mode 100644
index 3641d4be80e..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-slice-fill-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[border-image-slice-fill-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-backgrounds/box-shadow-029.html.ini b/tests/wpt/meta-legacy-layout/css/css-backgrounds/box-shadow-029.html.ini
deleted file mode 100644
index 87db5369217..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-backgrounds/box-shadow-029.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[box-shadow-029.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-backgrounds/css3-background-origin-border-box.html.ini b/tests/wpt/meta-legacy-layout/css/css-backgrounds/css3-background-origin-border-box.html.ini
deleted file mode 100644
index e64df69484c..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-backgrounds/css3-background-origin-border-box.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[css3-background-origin-border-box.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-backgrounds/css3-box-shadow.html.ini b/tests/wpt/meta-legacy-layout/css/css-backgrounds/css3-box-shadow.html.ini
deleted file mode 100644
index af8d19779df..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-backgrounds/css3-box-shadow.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[css3-box-shadow.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-color/color-layers-no-blend-mode.html.ini b/tests/wpt/meta-legacy-layout/css/css-color/color-layers-no-blend-mode.html.ini
new file mode 100644
index 00000000000..ec39818f3a5
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-color/color-layers-no-blend-mode.html.ini
@@ -0,0 +1,2 @@
+[color-layers-no-blend-mode.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-color/composited-filters-under-opacity.html.ini b/tests/wpt/meta-legacy-layout/css/css-color/composited-filters-under-opacity.html.ini
deleted file mode 100644
index 448888c84b3..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-color/composited-filters-under-opacity.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[composited-filters-under-opacity.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-color/filters-under-will-change-opacity.html.ini b/tests/wpt/meta-legacy-layout/css/css-color/filters-under-will-change-opacity.html.ini
deleted file mode 100644
index 0cef7437bdb..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-color/filters-under-will-change-opacity.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filters-under-will-change-opacity.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-color/parsing/color-valid-color-layers-function.html.ini b/tests/wpt/meta-legacy-layout/css/css-color/parsing/color-valid-color-layers-function.html.ini
new file mode 100644
index 00000000000..2ce154821fb
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-color/parsing/color-valid-color-layers-function.html.ini
@@ -0,0 +1,510 @@
+[color-valid-color-layers-function.html]
+ [e.style['color'\] = "color-layers(red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-color/t32-opacity-offscreen-b.xht.ini b/tests/wpt/meta-legacy-layout/css/css-color/t32-opacity-offscreen-b.xht.ini
deleted file mode 100644
index 91dfd27c243..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-color/t32-opacity-offscreen-b.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[t32-opacity-offscreen-b.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-color/t32-opacity-offscreen-with-alpha-c.xht.ini b/tests/wpt/meta-legacy-layout/css/css-color/t32-opacity-offscreen-with-alpha-c.xht.ini
deleted file mode 100644
index 3fec1698024..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-color/t32-opacity-offscreen-with-alpha-c.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[t32-opacity-offscreen-with-alpha-c.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-color/t32-opacity-zorder-c.xht.ini b/tests/wpt/meta-legacy-layout/css/css-color/t32-opacity-zorder-c.xht.ini
deleted file mode 100644
index 9d759c70124..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-color/t32-opacity-zorder-c.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[t32-opacity-zorder-c.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/abspos/dynamic-align-self-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/abspos/dynamic-align-self-001.html.ini
deleted file mode 100644
index 14f97016c84..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/abspos/dynamic-align-self-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[dynamic-align-self-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/auto-margins-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/auto-margins-002.html.ini
deleted file mode 100644
index a4ec3062b8d..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/auto-margins-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[auto-margins-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/column-flex-child-with-max-width.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/column-flex-child-with-max-width.html.ini
new file mode 100644
index 00000000000..d483cb795db
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-flexbox/column-flex-child-with-max-width.html.ini
@@ -0,0 +1,2 @@
+[column-flex-child-with-max-width.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-001.html.ini
deleted file mode 100644
index 9a99c2d9f53..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-aspect-ratio-img-column-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-002.html.ini
deleted file mode 100644
index 05c4e939a7e..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-aspect-ratio-img-column-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-003.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-003.html.ini
deleted file mode 100644
index 80178352808..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-aspect-ratio-img-column-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-006.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-006.html.ini
deleted file mode 100644
index bdb33aa2cb1..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-006.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-aspect-ratio-img-column-006.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-007.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-007.html.ini
deleted file mode 100644
index f86dca39bce..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-007.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-aspect-ratio-img-column-007.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-009.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-009.html.ini
deleted file mode 100644
index f4822d75dbf..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-column-009.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-aspect-ratio-img-column-009.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-001.html.ini
deleted file mode 100644
index 7f333e7a815..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-aspect-ratio-img-row-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-002.html.ini
deleted file mode 100644
index 7921013f970..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-aspect-ratio-img-row-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-003.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-003.html.ini
deleted file mode 100644
index a332d9850a1..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-aspect-ratio-img-row-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-014.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-014.html.ini
deleted file mode 100644
index 3aa7af3fdf0..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-014.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-aspect-ratio-img-row-014.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-017.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-017.html.ini
deleted file mode 100644
index 9f79dce3b30..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-aspect-ratio-img-row-017.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-aspect-ratio-img-row-017.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-basis-item-margins-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-basis-item-margins-001.html.ini
deleted file mode 100644
index 7a02e9f3f91..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-basis-item-margins-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-basis-item-margins-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-box-wrap.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-box-wrap.html.ini
deleted file mode 100644
index 53be7c3c03c..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-box-wrap.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-box-wrap.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-item-contains-size-layout-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-item-contains-size-layout-001.html.ini
deleted file mode 100644
index 29a7e6a84f0..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-item-contains-size-layout-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-item-contains-size-layout-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-item-z-ordering-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-item-z-ordering-002.html.ini
new file mode 100644
index 00000000000..eeff0c9e725
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-item-z-ordering-002.html.ini
@@ -0,0 +1,2 @@
+[flex-item-z-ordering-002.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-001.xht.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-001.xht.ini
deleted file mode 100644
index a62eef500f4..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-height-flex-items-001.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-002.xht.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-002.xht.ini
deleted file mode 100644
index ce42094fb6e..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-002.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-height-flex-items-002.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-004.xht.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-004.xht.ini
deleted file mode 100644
index ac4180f61a7..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-004.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-height-flex-items-004.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-005.xht.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-005.xht.ini
deleted file mode 100644
index 52f582f657f..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-005.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-height-flex-items-005.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-006.xht.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-006.xht.ini
deleted file mode 100644
index c177bfb4870..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-006.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-height-flex-items-006.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-007.xht.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-007.xht.ini
deleted file mode 100644
index ca977d8203d..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-007.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-height-flex-items-007.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-008.xht.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-008.xht.ini
deleted file mode 100644
index 06b866be1a0..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-008.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-height-flex-items-008.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-011.xht.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-011.xht.ini
deleted file mode 100644
index 084c6d55e75..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-011.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-height-flex-items-011.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-015.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-015.html.ini
deleted file mode 100644
index 40d03e94e60..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-015.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-height-flex-items-015.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-019.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-019.html.ini
deleted file mode 100644
index 959661fa8c0..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-height-flex-items-019.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-height-flex-items-019.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-004.xht.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-004.xht.ini
deleted file mode 100644
index b10e3a296f7..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-004.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-width-flex-items-004.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-005.xht.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-005.xht.ini
deleted file mode 100644
index bc50397b145..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-005.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-width-flex-items-005.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-006.xht.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-006.xht.ini
deleted file mode 100644
index 263a73fd429..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-006.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-width-flex-items-006.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-007.xht.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-007.xht.ini
deleted file mode 100644
index 2c1490e4703..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-007.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-width-flex-items-007.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-008.xht.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-008.xht.ini
deleted file mode 100644
index 7bee9e4181d..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-008.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-width-flex-items-008.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-009.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-009.html.ini
deleted file mode 100644
index 85788b17c68..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-009.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-width-flex-items-009.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-010.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-010.html.ini
deleted file mode 100644
index f00699c82c1..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flex-minimum-width-flex-items-010.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flex-minimum-width-flex-items-010.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/flexbox-safe-overflow-position-006.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/flexbox-safe-overflow-position-006.html.ini
deleted file mode 100644
index 9edcdef8700..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/flexbox-safe-overflow-position-006.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[flexbox-safe-overflow-position-006.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/grandchild-span-height.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/grandchild-span-height.html.ini
deleted file mode 100644
index 8b96c02c2c7..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/grandchild-span-height.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[grandchild-span-height.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/grid-flex-item-006.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/grid-flex-item-006.html.ini
deleted file mode 100644
index 421335a944e..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/grid-flex-item-006.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[grid-flex-item-006.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/grid-flex-item-007.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/grid-flex-item-007.html.ini
deleted file mode 100644
index fc156ebc2b9..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/grid-flex-item-007.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[grid-flex-item-007.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/image-items-flake-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/image-items-flake-001.html.ini
deleted file mode 100644
index d39a1e859e4..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/image-items-flake-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[image-items-flake-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/intrinsic-size/row-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/intrinsic-size/row-001.html.ini
deleted file mode 100644
index d50aa31d5b5..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/intrinsic-size/row-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[row-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/stretch-obeys-min-max-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/stretch-obeys-min-max-001.html.ini
deleted file mode 100644
index 4c9cbcc8ff4..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/stretch-obeys-min-max-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[stretch-obeys-min-max-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/table-as-item-stretch-cross-size-4.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/table-as-item-stretch-cross-size-4.html.ini
deleted file mode 100644
index 31d7e2ddc74..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/table-as-item-stretch-cross-size-4.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[table-as-item-stretch-cross-size-4.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/table-as-item-wide-content.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/table-as-item-wide-content.html.ini
deleted file mode 100644
index f6def90a63b..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-flexbox/table-as-item-wide-content.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[table-as-item-wide-content.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-fonts/font-size-adjust-006.xht.ini b/tests/wpt/meta-legacy-layout/css/css-fonts/font-size-adjust-006.xht.ini
deleted file mode 100644
index 610def68822..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-fonts/font-size-adjust-006.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[font-size-adjust-006.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-fonts/font-size-adjust-007.xht.ini b/tests/wpt/meta-legacy-layout/css/css-fonts/font-size-adjust-007.xht.ini
deleted file mode 100644
index b77d39d8ddb..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-fonts/font-size-adjust-007.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[font-size-adjust-007.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-fonts/font-size-adjust-008.xht.ini b/tests/wpt/meta-legacy-layout/css/css-fonts/font-size-adjust-008.xht.ini
deleted file mode 100644
index 5d4ea97a3d9..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-fonts/font-size-adjust-008.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[font-size-adjust-008.xht]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-fonts/generic-family-keywords-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-fonts/generic-family-keywords-001.html.ini
index 3ae4884abe8..2841474c410 100644
--- a/tests/wpt/meta-legacy-layout/css/css-fonts/generic-family-keywords-001.html.ini
+++ b/tests/wpt/meta-legacy-layout/css/css-fonts/generic-family-keywords-001.html.ini
@@ -25,3 +25,6 @@
[@font-face matching for quoted and unquoted fantasy]
expected: FAIL
+
+ [@font-face matching for quoted and unquoted ui-monospace]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-absolute-positioned-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-absolute-positioned-001.html.ini
deleted file mode 100644
index ccd225b105f..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-absolute-positioned-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-absolute-positioned-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-absolute-positioned-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-absolute-positioned-002.html.ini
deleted file mode 100644
index 0451a3008b5..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-absolute-positioned-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-absolute-positioned-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-negative-values-003.html.ini b/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-negative-values-003.html.ini
deleted file mode 100644
index 6a19fd696dd..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-negative-values-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-negative-values-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-negative-values-004.html.ini b/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-negative-values-004.html.ini
deleted file mode 100644
index 9d244175f22..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-negative-values-004.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-negative-values-004.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-not-absolute-positioned-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-not-absolute-positioned-001.html.ini
deleted file mode 100644
index 57f7fa26349..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-not-absolute-positioned-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-not-absolute-positioned-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-not-absolute-positioned-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-not-absolute-positioned-002.html.ini
deleted file mode 100644
index 118d113a23f..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-not-absolute-positioned-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-not-absolute-positioned-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-not-absolute-positioned-004.html.ini b/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-not-absolute-positioned-004.html.ini
deleted file mode 100644
index 99b0e02d4a4..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-not-absolute-positioned-004.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-not-absolute-positioned-004.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-001.html.ini
deleted file mode 100644
index 72689548371..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-rect-auto-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-002.html.ini
deleted file mode 100644
index efd0b0a44cc..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-rect-auto-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-003.html.ini b/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-003.html.ini
deleted file mode 100644
index 9c6c3550d59..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-rect-auto-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-004.html.ini b/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-004.html.ini
deleted file mode 100644
index 0e7d3bb54b7..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-004.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-rect-auto-004.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-005.html.ini b/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-005.html.ini
deleted file mode 100644
index 51383ca800c..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-005.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-rect-auto-005.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-006.html.ini b/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-006.html.ini
deleted file mode 100644
index 077f8b4eb24..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-auto-006.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-rect-auto-006.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-comma-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-comma-001.html.ini
deleted file mode 100644
index b68c5587b4c..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-masking/clip/clip-rect-comma-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-rect-comma-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masonry/tentative/parsing/masonry-template-tracks-valid.html.ini b/tests/wpt/meta-legacy-layout/css/css-masonry/tentative/parsing/masonry-template-tracks-valid.html.ini
new file mode 100644
index 00000000000..55bfc15fea5
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-masonry/tentative/parsing/masonry-template-tracks-valid.html.ini
@@ -0,0 +1,69 @@
+[masonry-template-tracks-valid.html]
+ [e.style['masonry-template-tracks'\] = "auto" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "10px" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "20%" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "calc(-0.5em + 10px)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "calc(0.5em + 10px)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "calc(30% + 40vw)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "5FR" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "min-content" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "Max-Content" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "AuTo" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "1fr 2fr 1fr" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(10px, auto)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(20%, max-content)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(calc(-0.5em + 10px), min-content)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(calc(0.5em + 10px), 5fr)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(calc(30% + 40vw), 10px)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(min-content, 20%)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(max-content, calc(-0.5em + 10px))" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(auto, calc(0.5em + 10px))" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "repeat(5, auto)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "repeat(auto-fill, 25%)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "[\] 150px [\] 1fr [\]" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "repeat(1, [\] 10px [\])" should set the property value]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masonry/tentative/parsing/masonry-track-computed.html.ini b/tests/wpt/meta-legacy-layout/css/css-masonry/tentative/parsing/masonry-track-computed.html.ini
new file mode 100644
index 00000000000..d943bd2c153
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-masonry/tentative/parsing/masonry-track-computed.html.ini
@@ -0,0 +1,24 @@
+[masonry-track-computed.html]
+ [Property masonry-track-end value 'auto']
+ expected: FAIL
+
+ [Property masonry-track-start value 'auto']
+ expected: FAIL
+
+ [Property masonry-track-end value '_9']
+ expected: FAIL
+
+ [Property masonry-track-start value '-_π']
+ expected: FAIL
+
+ [Property masonry-track-end value '-44 Z']
+ expected: FAIL
+
+ [Property masonry-track-start value '+90 X']
+ expected: FAIL
+
+ [Property masonry-track-end value 'span 1 i']
+ expected: FAIL
+
+ [Property masonry-track-start value 'span 2']
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-masonry/tentative/parsing/masonry-track-valid.html.ini b/tests/wpt/meta-legacy-layout/css/css-masonry/tentative/parsing/masonry-track-valid.html.ini
new file mode 100644
index 00000000000..565d63daa9b
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-masonry/tentative/parsing/masonry-track-valid.html.ini
@@ -0,0 +1,24 @@
+[masonry-track-valid.html]
+ [e.style['masonry-track-end'\] = "AuTo" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-track-start'\] = "AuTo" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-track-end'\] = "a_3" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-track-start'\] = "-_π" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-track-end'\] = "Z -44" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-track-start'\] = "+90" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-track-end'\] = "SpAn i 2" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-track-start'\] = "2 i span" should set the property value]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-028.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-028.tentative.html.ini
new file mode 100644
index 00000000000..b7429acdd95
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-028.tentative.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-028.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-001.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-001.tentative.html.ini
new file mode 100644
index 00000000000..8cd613ec35d
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-001.tentative.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-auto-with-ruby-001.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-002.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-002.tentative.html.ini
new file mode 100644
index 00000000000..d4e5c0e3775
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-002.tentative.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-auto-with-ruby-002.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-003.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-003.tentative.html.ini
new file mode 100644
index 00000000000..a493dbf1b1a
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-003.tentative.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-auto-with-ruby-003.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-004.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-004.tentative.html.ini
new file mode 100644
index 00000000000..079554e3bfc
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-004.tentative.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-auto-with-ruby-004.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-005.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-005.tentative.html.ini
new file mode 100644
index 00000000000..38e08b5a70a
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-005.tentative.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-auto-with-ruby-005.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/overflow-clip-margin-010.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/overflow-clip-margin-010.html.ini
new file mode 100644
index 00000000000..e0edb6b19f3
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-overflow/overflow-clip-margin-010.html.ini
@@ -0,0 +1,2 @@
+[overflow-clip-margin-010.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/overflow-clip-margin-011.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/overflow-clip-margin-011.html.ini
deleted file mode 100644
index c607ff4cf56..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-overflow/overflow-clip-margin-011.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[overflow-clip-margin-011.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/overflow-hidden-resize-with-stacking-context-child.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/overflow-hidden-resize-with-stacking-context-child.html.ini
deleted file mode 100644
index 1bba9ccb0d5..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-overflow/overflow-hidden-resize-with-stacking-context-child.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[overflow-hidden-resize-with-stacking-context-child.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/overflow-recalc-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/overflow-recalc-001.html.ini
deleted file mode 100644
index 75b52c4b062..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-overflow/overflow-recalc-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[overflow-recalc-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-001.html.ini
deleted file mode 100644
index 5612fee91e6..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[scrollbar-gutter-fixedpos-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-002.html.ini
deleted file mode 100644
index 73801e313d7..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[scrollbar-gutter-fixedpos-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-003.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-003.html.ini
deleted file mode 100644
index 93552725ee8..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[scrollbar-gutter-fixedpos-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-004.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-004.html.ini
deleted file mode 100644
index 75ab360db1a..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-overflow/scrollbar-gutter-fixedpos-004.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[scrollbar-gutter-fixedpos-004.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/fixed-z-index-blend.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/fixed-z-index-blend.html.ini
deleted file mode 100644
index ad4f627622a..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/fixed-z-index-blend.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[fixed-z-index-blend.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/hypothetical-dynamic-change-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/hypothetical-dynamic-change-002.html.ini
deleted file mode 100644
index 5541b847967..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/hypothetical-dynamic-change-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[hypothetical-dynamic-change-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/hypothetical-dynamic-change-003.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/hypothetical-dynamic-change-003.html.ini
deleted file mode 100644
index 4a0fd015f02..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/hypothetical-dynamic-change-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[hypothetical-dynamic-change-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/position-absolute-dynamic-auto-overflow.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/position-absolute-dynamic-auto-overflow.html.ini
deleted file mode 100644
index 436ec4eb5f3..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/position-absolute-dynamic-auto-overflow.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-absolute-dynamic-auto-overflow.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/position-fixed-scroll-nested-fixed.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/position-fixed-scroll-nested-fixed.html.ini
deleted file mode 100644
index 2903ed8c405..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/position-fixed-scroll-nested-fixed.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-fixed-scroll-nested-fixed.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/position-fixed-scroll-overlap.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/position-fixed-scroll-overlap.html.ini
deleted file mode 100644
index 72f4362857b..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/position-fixed-scroll-overlap.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-fixed-scroll-overlap.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-bottom-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-bottom-002.html.ini
deleted file mode 100644
index 5364e331a89..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-bottom-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-sticky-bottom-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-escape-scroller-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-escape-scroller-001.html.ini
deleted file mode 100644
index 3018d79f1af..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-escape-scroller-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-sticky-escape-scroller-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-escape-scroller-003.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-escape-scroller-003.html.ini
deleted file mode 100644
index 990a7ae58c6..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-escape-scroller-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-sticky-escape-scroller-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-escape-scroller-004.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-escape-scroller-004.html.ini
deleted file mode 100644
index 7b98776c5e0..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-escape-scroller-004.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-sticky-escape-scroller-004.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-in-fixed-container.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-in-fixed-container.html.ini
deleted file mode 100644
index 2f88b15185a..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-in-fixed-container.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-sticky-in-fixed-container.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-left-004.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-left-004.html.ini
deleted file mode 100644
index e3ef49298f4..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-left-004.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-sticky-left-004.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-left-005.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-left-005.html.ini
deleted file mode 100644
index 91868adca01..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-left-005.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-sticky-left-005.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-left-006.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-left-006.html.ini
deleted file mode 100644
index 1696cf4515c..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-left-006.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-sticky-left-006.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-margins-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-margins-002.html.ini
deleted file mode 100644
index e3c81389f93..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-margins-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-sticky-margins-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-stacking-context-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-stacking-context-002.html.ini
deleted file mode 100644
index 931e3eabc35..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-stacking-context-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-sticky-stacking-context-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-top-004.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-top-004.html.ini
deleted file mode 100644
index 0672a9255fd..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-top-004.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-sticky-top-004.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-top-005.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-top-005.html.ini
deleted file mode 100644
index 305911de57c..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-top-005.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-sticky-top-005.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-top-006.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-top-006.html.ini
deleted file mode 100644
index 91c5661cd80..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/sticky/position-sticky-top-006.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[position-sticky-top-006.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-position/z-index-blend-will-change-overlapping-layers.html.ini b/tests/wpt/meta-legacy-layout/css/css-position/z-index-blend-will-change-overlapping-layers.html.ini
deleted file mode 100644
index 07353055bf7..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-position/z-index-blend-will-change-overlapping-layers.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[z-index-blend-will-change-overlapping-layers.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/block-aspect-ratio-042.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/block-aspect-ratio-042.html.ini
deleted file mode 100644
index 22341d7f6fe..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/block-aspect-ratio-042.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[block-aspect-ratio-042.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/block-aspect-ratio-056.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/block-aspect-ratio-056.html.ini
new file mode 100644
index 00000000000..62995938b8b
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/block-aspect-ratio-056.html.ini
@@ -0,0 +1,2 @@
+[block-aspect-ratio-056.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/block-aspect-ratio-057.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/block-aspect-ratio-057.tentative.html.ini
new file mode 100644
index 00000000000..86a6a3f8b68
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/block-aspect-ratio-057.tentative.html.ini
@@ -0,0 +1,2 @@
+[block-aspect-ratio-057.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-045.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-045.html.ini
new file mode 100644
index 00000000000..6fd626f6af9
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-045.html.ini
@@ -0,0 +1,2 @@
+[flex-aspect-ratio-045.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-046.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-046.html.ini
new file mode 100644
index 00000000000..e2141f5d2b3
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-046.html.ini
@@ -0,0 +1,2 @@
+[flex-aspect-ratio-046.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-047.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-047.html.ini
new file mode 100644
index 00000000000..4e5d114d306
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-047.html.ini
@@ -0,0 +1,2 @@
+[flex-aspect-ratio-047.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-048.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-048.html.ini
new file mode 100644
index 00000000000..d39463c18c5
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-048.html.ini
@@ -0,0 +1,2 @@
+[flex-aspect-ratio-048.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-049.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-049.html.ini
new file mode 100644
index 00000000000..38a533c6337
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-049.html.ini
@@ -0,0 +1,2 @@
+[flex-aspect-ratio-049.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-051.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-051.html.ini
new file mode 100644
index 00000000000..7fc97c88cfc
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-051.html.ini
@@ -0,0 +1,2 @@
+[flex-aspect-ratio-051.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-054.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-054.html.ini
new file mode 100644
index 00000000000..f0adaa43caf
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/flex-aspect-ratio-054.html.ini
@@ -0,0 +1,2 @@
+[flex-aspect-ratio-054.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/grid-aspect-ratio-023.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/grid-aspect-ratio-023.html.ini
deleted file mode 100644
index 7bca05d56ba..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-sizing/aspect-ratio/grid-aspect-ratio-023.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[grid-aspect-ratio-023.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/fit-content-contribution-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/fit-content-contribution-001.html.ini
deleted file mode 100644
index 2bbf2a8dc12..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-sizing/fit-content-contribution-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[fit-content-contribution-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-001.html.ini
deleted file mode 100644
index e4becddcbaf..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[extra-height-given-to-all-row-groups-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-002.html.ini
deleted file mode 100644
index 638183bef99..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[extra-height-given-to-all-row-groups-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-005.html.ini b/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-005.html.ini
deleted file mode 100644
index 01d00ac3ae1..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-005.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[extra-height-given-to-all-row-groups-005.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-003.html.ini b/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-003.html.ini
deleted file mode 100644
index 647991e6154..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[percentage-sizing-of-table-cell-children-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-004.html.ini b/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-004.html.ini
deleted file mode 100644
index 8acef654adb..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-004.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[percentage-sizing-of-table-cell-children-004.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-005.html.ini b/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-005.html.ini
deleted file mode 100644
index 7ad24333f42..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-005.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[percentage-sizing-of-table-cell-children-005.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-006.html.ini b/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-006.html.ini
deleted file mode 100644
index a8598ed3173..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-006.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[percentage-sizing-of-table-cell-children-006.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-tables/table-has-box-sizing-border-box-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-tables/table-has-box-sizing-border-box-002.html.ini
deleted file mode 100644
index 0887778d34e..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-tables/table-has-box-sizing-border-box-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[table-has-box-sizing-border-box-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-text-decor/text-emphasis-punctuation-3.html.ini b/tests/wpt/meta-legacy-layout/css/css-text-decor/text-emphasis-punctuation-3.html.ini
new file mode 100644
index 00000000000..ff425db0c29
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-text-decor/text-emphasis-punctuation-3.html.ini
@@ -0,0 +1,2 @@
+[text-emphasis-punctuation-3.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-text/hyphens/hyphens-auto-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-text/hyphens/hyphens-auto-002.html.ini
deleted file mode 100644
index 8d731c13b0c..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-text/hyphens/hyphens-auto-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[hyphens-auto-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-text/overflow-wrap/overflow-wrap-min-content-size-004.html.ini b/tests/wpt/meta-legacy-layout/css/css-text/overflow-wrap/overflow-wrap-min-content-size-004.html.ini
deleted file mode 100644
index 38e4b2dcd29..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-text/overflow-wrap/overflow-wrap-min-content-size-004.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[overflow-wrap-min-content-size-004.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-015.html.ini b/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-015.html.ini
deleted file mode 100644
index 89bdfca9200..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-015.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-intrinsic-size-015.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-016.html.ini b/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-016.html.ini
deleted file mode 100644
index cd83045f9ac..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-016.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-intrinsic-size-016.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-017.html.ini b/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-017.html.ini
deleted file mode 100644
index 1095373e38b..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-017.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-intrinsic-size-017.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-018.html.ini b/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-018.html.ini
deleted file mode 100644
index 368a69e07d3..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-018.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-intrinsic-size-018.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-019.html.ini b/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-019.html.ini
deleted file mode 100644
index 442e5e3ed26..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-019.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-intrinsic-size-019.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-020.html.ini b/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-020.html.ini
deleted file mode 100644
index e4d9505ebbc..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-text/white-space/white-space-intrinsic-size-020.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[white-space-intrinsic-size-020.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-transforms/css3-transform-scale-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-transforms/css3-transform-scale-002.html.ini
deleted file mode 100644
index 5d4b8a2ed6c..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-transforms/css3-transform-scale-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[css3-transform-scale-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-transforms/css3-transform-scale.html.ini b/tests/wpt/meta-legacy-layout/css/css-transforms/css3-transform-scale.html.ini
deleted file mode 100644
index 922a0492379..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-transforms/css3-transform-scale.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[css3-transform-scale.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-transforms/perspective-containing-block-dynamic-1a.html.ini b/tests/wpt/meta-legacy-layout/css/css-transforms/perspective-containing-block-dynamic-1a.html.ini
deleted file mode 100644
index 54107a36059..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-transforms/perspective-containing-block-dynamic-1a.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[perspective-containing-block-dynamic-1a.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-transforms/preserve3d-and-flattening-z-order-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-transforms/preserve3d-and-flattening-z-order-001.html.ini
deleted file mode 100644
index 658bba6a324..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-transforms/preserve3d-and-flattening-z-order-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[preserve3d-and-flattening-z-order-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-transforms/preserve3d-and-flattening-z-order-003.html.ini b/tests/wpt/meta-legacy-layout/css/css-transforms/preserve3d-and-flattening-z-order-003.html.ini
deleted file mode 100644
index 4a99a695cf1..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-transforms/preserve3d-and-flattening-z-order-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[preserve3d-and-flattening-z-order-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-transforms/scalex.html.ini b/tests/wpt/meta-legacy-layout/css/css-transforms/scalex.html.ini
deleted file mode 100644
index 231f8811cc1..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-transforms/scalex.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[scalex.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-transforms/scaley.html.ini b/tests/wpt/meta-legacy-layout/css/css-transforms/scaley.html.ini
deleted file mode 100644
index 8313d07ac97..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-transforms/scaley.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[scaley.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-transforms/transform-containing-block-dynamic-1a.html.ini b/tests/wpt/meta-legacy-layout/css/css-transforms/transform-containing-block-dynamic-1a.html.ini
deleted file mode 100644
index 4adb76773b3..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-transforms/transform-containing-block-dynamic-1a.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[transform-containing-block-dynamic-1a.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-transforms/transform-stacking-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-transforms/transform-stacking-002.html.ini
deleted file mode 100644
index 6d3f3ba7630..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-transforms/transform-stacking-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[transform-stacking-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-transforms/transform-stacking-003.html.ini b/tests/wpt/meta-legacy-layout/css/css-transforms/transform-stacking-003.html.ini
deleted file mode 100644
index bb420d68632..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-transforms/transform-stacking-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[transform-stacking-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-transforms/transform-stacking-004.html.ini b/tests/wpt/meta-legacy-layout/css/css-transforms/transform-stacking-004.html.ini
deleted file mode 100644
index 7689e6ab755..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-transforms/transform-stacking-004.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[transform-stacking-004.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-transforms/transform3d-sorting-006.html.ini b/tests/wpt/meta-legacy-layout/css/css-transforms/transform3d-sorting-006.html.ini
index aa048b104d2..96f892c1214 100644
--- a/tests/wpt/meta-legacy-layout/css/css-transforms/transform3d-sorting-006.html.ini
+++ b/tests/wpt/meta-legacy-layout/css/css-transforms/transform3d-sorting-006.html.ini
@@ -1,3 +1,4 @@
[transform3d-sorting-006.html]
type: reftest
bug: https://github.com/w3c/web-platform-tests/pull/5922
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-transforms/translate.html.ini b/tests/wpt/meta-legacy-layout/css/css-transforms/translate.html.ini
deleted file mode 100644
index 923f089c3a5..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-transforms/translate.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[translate.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-transforms/ttwf-css-3d-polygon-cycle.html.ini b/tests/wpt/meta-legacy-layout/css/css-transforms/ttwf-css-3d-polygon-cycle.html.ini
new file mode 100644
index 00000000000..5852735e9c3
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-transforms/ttwf-css-3d-polygon-cycle.html.ini
@@ -0,0 +1,2 @@
+[ttwf-css-3d-polygon-cycle.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-ui/box-sizing-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-ui/box-sizing-001.html.ini
deleted file mode 100644
index c3d20b4135e..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-ui/box-sizing-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[box-sizing-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-ui/box-sizing-026.html.ini b/tests/wpt/meta-legacy-layout/css/css-ui/box-sizing-026.html.ini
deleted file mode 100644
index 6fee176772e..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-ui/box-sizing-026.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[box-sizing-026.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-ui/text-overflow-007.html.ini b/tests/wpt/meta-legacy-layout/css/css-ui/text-overflow-007.html.ini
deleted file mode 100644
index b59be5c6fb6..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-ui/text-overflow-007.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[text-overflow-007.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/angle-units-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/angle-units-001.html.ini
deleted file mode 100644
index 75a5f056519..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-values/angle-units-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[angle-units-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/angle-units-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/angle-units-002.html.ini
deleted file mode 100644
index 6e2f2134294..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-values/angle-units-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[angle-units-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/angle-units-003.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/angle-units-003.html.ini
deleted file mode 100644
index 8c19d7b890d..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-values/angle-units-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[angle-units-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/angle-units-004.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/angle-units-004.html.ini
deleted file mode 100644
index 558a7393a89..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-values/angle-units-004.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[angle-units-004.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/angle-units-005.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/angle-units-005.html.ini
deleted file mode 100644
index 098c938f014..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-values/angle-units-005.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[angle-units-005.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/attr-all-types.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/attr-all-types.html.ini
index b78185da0c1..7b12c5359c8 100644
--- a/tests/wpt/meta-legacy-layout/css/css-values/attr-all-types.html.ini
+++ b/tests/wpt/meta-legacy-layout/css/css-values/attr-all-types.html.ini
@@ -166,3 +166,9 @@
[CSS Values and Units Test: attr 72]
expected: FAIL
+
+ [CSS Values and Units Test: attr 15]
+ expected: FAIL
+
+ [CSS Values and Units Test: attr 30]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-positive-fraction-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-positive-fraction-001.html.ini
deleted file mode 100644
index a0f0ecd6d11..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-values/calc-positive-fraction-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[calc-positive-fraction-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/calc-size-height-interpolation.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/calc-size-height-interpolation.html.ini
index 82f26f67c1e..1ff5d2a7b72 100644
--- a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/calc-size-height-interpolation.html.ini
+++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/calc-size-height-interpolation.html.ini
@@ -3490,3 +3490,309 @@
[Web Animations: property <height> from [calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(auto, size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2)\] to [calc-size(auto, size * 3)\] at (1.5) should be [calc-size(auto, size * 3)\]]
expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [60px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [120px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [180px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [60px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [120px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [180px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [60px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [120px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [180px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [60px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [120px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [180px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0.5) should be [125px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (1) should be [200px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0.5) should be [125px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (1) should be [200px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0.5) should be [125px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (1) should be [200px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0.5) should be [125px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (1) should be [200px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-behavior:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (-0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-behavior:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-behavior:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-behavior:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-behavior:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.6) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-behavior:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-behavior:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (-0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.6) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (-0.3) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.3) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.6) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (-0.3) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.3) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.6) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (-0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.6) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (-0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.6) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0.5) should be [75px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0.5) should be [75px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0.5) should be [75px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0.5) should be [75px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (1) should be [100px\]]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html.ini
index 92c2f421196..c948860b7a6 100644
--- a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html.ini
+++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html.ini
@@ -22,3 +22,15 @@
[value at progress 0.75 in animation of "height" from "auto" to "calc-size(any, 0px)"]
expected: FAIL
+
+ [value at progress 0.75 in animation of "width" from "calc-size(50%, size)" to "calc-size(calc-size(45%, (size * 2)), size + 20px)"]
+ expected: FAIL
+
+ [value at progress 0.75 in animation of "width" from "calc-size(40%, size)" to "calc-size(calc-size(10px, (size * 2)), size + 20px)"]
+ expected: FAIL
+
+ [value at progress 0.75 in animation of "width" from "calc-size(80px, size)" to "calc-size(calc-size(10px, (size * 2)), size + 20px)"]
+ expected: FAIL
+
+ [value at progress 0.75 in animation of "width" from "calc-size(80px, size)" to "calc-size(calc-size(any, 20px), size + 20px)"]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-aspect-ratio-003.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-aspect-ratio-003.html.ini
new file mode 100644
index 00000000000..b3cbfa9b272
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-aspect-ratio-003.html.ini
@@ -0,0 +1,2 @@
+[calc-size-aspect-ratio-003.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-aspect-ratio-004.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-aspect-ratio-004.html.ini
new file mode 100644
index 00000000000..75d54d26b78
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-aspect-ratio-004.html.ini
@@ -0,0 +1,2 @@
+[calc-size-aspect-ratio-004.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-aspect-ratio-005.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-aspect-ratio-005.html.ini
new file mode 100644
index 00000000000..7a161a873c2
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-aspect-ratio-005.html.ini
@@ -0,0 +1,2 @@
+[calc-size-aspect-ratio-005.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-001.html.ini
new file mode 100644
index 00000000000..0304e998ba1
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-001.html.ini
@@ -0,0 +1,2 @@
+[calc-size-flex-001.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-002.html.ini
new file mode 100644
index 00000000000..8a589733d2a
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-002.html.ini
@@ -0,0 +1,2 @@
+[calc-size-flex-002.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-003.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-003.html.ini
new file mode 100644
index 00000000000..b1e3f9e8585
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-003.html.ini
@@ -0,0 +1,2 @@
+[calc-size-flex-003.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-004.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-004.html.ini
new file mode 100644
index 00000000000..a891aaec844
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-004.html.ini
@@ -0,0 +1,2 @@
+[calc-size-flex-004.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-005.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-005.html.ini
new file mode 100644
index 00000000000..afa59e4a84b
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-005.html.ini
@@ -0,0 +1,2 @@
+[calc-size-flex-005.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-006.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-006.html.ini
new file mode 100644
index 00000000000..6785cd6fec4
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-flex-006.html.ini
@@ -0,0 +1,2 @@
+[calc-size-flex-006.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-grid-repeat.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-grid-repeat.html.ini
new file mode 100644
index 00000000000..9c81daf1767
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-grid-repeat.html.ini
@@ -0,0 +1,2 @@
+[calc-size-grid-repeat.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-height.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-height.html.ini
index 31265aa3279..295ccdc66bf 100644
--- a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-height.html.ini
+++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-height.html.ini
@@ -91,3 +91,9 @@
[resolved height for height in definite height container: calc-size(auto, size * 1.5)]
expected: FAIL
+
+ [resolved height for height in auto height container: calc-size(calc-size(any, 300px), size * 2)]
+ expected: FAIL
+
+ [resolved height for height in definite height container: calc-size(calc-size(any, 300px), size * 2)]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-parsing.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-parsing.html.ini
index 92f07e5b5b0..01f0b734aa4 100644
--- a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-parsing.html.ini
+++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/calc-size-parsing.html.ini
@@ -124,3 +124,9 @@
[e.style['flex-basis'\] = "calc-size(content, size)" should set the property value]
expected: FAIL
+
+ [e.style['width'\] = "calc-size(calc-size(any, 30px), size)" should set the property value]
+ expected: FAIL
+
+ [e.style['width'\] = "calc-size(0px, 0px)" should set the property value]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/min-max-percentage-length-interpolation.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/min-max-percentage-length-interpolation.html.ini
deleted file mode 100644
index d59c7b30211..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-values/min-max-percentage-length-interpolation.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[min-max-percentage-length-interpolation.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/q-unit-case-insensitivity-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/q-unit-case-insensitivity-001.html.ini
deleted file mode 100644
index 0a4b494b07f..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-values/q-unit-case-insensitivity-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[q-unit-case-insensitivity-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/css-values/q-unit-case-insensitivity-002.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/q-unit-case-insensitivity-002.html.ini
deleted file mode 100644
index 591cc3814fd..00000000000
--- a/tests/wpt/meta-legacy-layout/css/css-values/q-unit-case-insensitivity-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[q-unit-case-insensitivity-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/cssom-view/scrollWidthHeight-negative-margin-001.html.ini b/tests/wpt/meta-legacy-layout/css/cssom-view/scrollWidthHeight-negative-margin-001.html.ini
new file mode 100644
index 00000000000..4955e1dd3dc
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/cssom-view/scrollWidthHeight-negative-margin-001.html.ini
@@ -0,0 +1,12 @@
+[scrollWidthHeight-negative-margin-001.html]
+ [scrollWidth/Height with negative margins: overflow: visible;]
+ expected: FAIL
+
+ [scrollWidth/Height with negative margins: overflow: hidden;]
+ expected: FAIL
+
+ [scrollWidth/Height with negative margins: overflow: auto;]
+ expected: FAIL
+
+ [scrollWidth/Height with negative margins: ]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/cssom-view/scrollWidthHeight-negative-margin-002.html.ini b/tests/wpt/meta-legacy-layout/css/cssom-view/scrollWidthHeight-negative-margin-002.html.ini
new file mode 100644
index 00000000000..b159d372838
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/cssom-view/scrollWidthHeight-negative-margin-002.html.ini
@@ -0,0 +1,433 @@
+[scrollWidthHeight-negative-margin-002.html]
+ expected: ERROR
+ [scrollWidth with negative margins: display: block; overflow: visible; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: block; overflow: visible; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: block; overflow: hidden; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: block; overflow: hidden; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: block; overflow: auto; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: block; overflow: auto; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: block; overflow: scroll; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: block; overflow: scroll; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: block; overflow: visible; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: block; overflow: visible; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: block; overflow: hidden; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: block; overflow: hidden; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: block; overflow: auto; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: block; overflow: auto; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: block; overflow: scroll; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: block; overflow: scroll; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: ltr; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: rtl; flex-direction: row;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: ltr; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: ltr; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: ltr; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: ltr; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: ltr; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: ltr; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: ltr; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: ltr; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: rtl; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: rtl; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: rtl; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: rtl; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: rtl; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: rtl; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: rtl; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: rtl; flex-flow: wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: ltr; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: ltr; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: ltr; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: ltr; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: ltr; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: ltr; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: ltr; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: ltr; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: rtl; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: rtl; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: rtl; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: rtl; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: rtl; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: rtl; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: rtl; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: rtl; flex-direction: row-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: ltr; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: ltr; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: ltr; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: ltr; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: ltr; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: ltr; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: ltr; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: ltr; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: rtl; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: rtl; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: rtl; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: rtl; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: rtl; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: rtl; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: rtl; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: rtl; flex-flow: row-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: ltr; flex-direction: column;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: ltr; flex-direction: column;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: ltr; flex-direction: column;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: ltr; flex-direction: column;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: ltr; flex-direction: column;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: ltr; flex-direction: column;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: ltr; flex-direction: column;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: ltr; flex-direction: column;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: rtl; flex-direction: column;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: rtl; flex-direction: column;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: rtl; flex-direction: column;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: rtl; flex-direction: column;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: rtl; flex-direction: column;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: rtl; flex-direction: column;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: rtl; flex-direction: column;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: rtl; flex-direction: column;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: ltr; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: ltr; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: ltr; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: ltr; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: ltr; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: ltr; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: ltr; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: ltr; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: rtl; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: rtl; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: rtl; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: rtl; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: rtl; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: rtl; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: rtl; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: rtl; flex-flow: column wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: ltr; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: ltr; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: ltr; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: ltr; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: ltr; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: ltr; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: ltr; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: ltr; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: rtl; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: rtl; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: rtl; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: rtl; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: rtl; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: rtl; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: rtl; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: rtl; flex-direction: column-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: ltr; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: ltr; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: ltr; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: ltr; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: ltr; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: ltr; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: ltr; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: ltr; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: visible; direction: rtl; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: visible; direction: rtl; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: hidden; direction: rtl; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: hidden; direction: rtl; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: auto; direction: rtl; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: auto; direction: rtl; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: flex; overflow: scroll; direction: rtl; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: flex; overflow: scroll; direction: rtl; flex-flow: column-reverse wrap-reverse;]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/backdrop-filter-backdrop-root-filter.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/backdrop-filter-backdrop-root-filter.html.ini
deleted file mode 100644
index 025a99e41fa..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/backdrop-filter-backdrop-root-filter.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[backdrop-filter-backdrop-root-filter.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/backdrop-filter-backdrop-root-mix-blend-mode.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/backdrop-filter-backdrop-root-mix-blend-mode.html.ini
deleted file mode 100644
index 5852be841d6..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/backdrop-filter-backdrop-root-mix-blend-mode.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[backdrop-filter-backdrop-root-mix-blend-mode.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/backdrop-filter-backdrop-root-opacity.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/backdrop-filter-backdrop-root-opacity.html.ini
deleted file mode 100644
index 95f299d8274..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/backdrop-filter-backdrop-root-opacity.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[backdrop-filter-backdrop-root-opacity.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/clip-under-filter-001.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/clip-under-filter-001.html.ini
deleted file mode 100644
index fbb017e55bc..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/clip-under-filter-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-under-filter-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/clip-under-filter-002.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/clip-under-filter-002.html.ini
deleted file mode 100644
index c4275b0c058..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/clip-under-filter-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-under-filter-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/clip-under-filter-003.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/clip-under-filter-003.html.ini
deleted file mode 100644
index daccafb1807..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/clip-under-filter-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[clip-under-filter-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/drop-shadow-currentcolor-dynamic-001.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/drop-shadow-currentcolor-dynamic-001.html.ini
deleted file mode 100644
index 501a9ea8576..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/drop-shadow-currentcolor-dynamic-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[drop-shadow-currentcolor-dynamic-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/dynamic-filter-changes-001.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/dynamic-filter-changes-001.html.ini
deleted file mode 100644
index c9211c1a7bd..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/dynamic-filter-changes-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[dynamic-filter-changes-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-cb-dynamic-1a.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filter-cb-dynamic-1a.html.ini
deleted file mode 100644
index e5bd2744e11..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-cb-dynamic-1a.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filter-cb-dynamic-1a.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-cb-dynamic-1b.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filter-cb-dynamic-1b.html.ini
deleted file mode 100644
index 072654fe989..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-cb-dynamic-1b.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filter-cb-dynamic-1b.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-contrast-001.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filter-contrast-001.html.ini
deleted file mode 100644
index d81da2a712f..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-contrast-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filter-contrast-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-contrast-002.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filter-contrast-002.html.ini
deleted file mode 100644
index 17ba6e16529..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-contrast-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filter-contrast-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-contrast-003.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filter-contrast-003.html.ini
deleted file mode 100644
index 82435c18dd6..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-contrast-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filter-contrast-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-001.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-001.html.ini
deleted file mode 100644
index e3820b86f8f..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filter-grayscale-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-002.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-002.html.ini
deleted file mode 100644
index 5ea2ed37ed0..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filter-grayscale-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-003.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-003.html.ini
deleted file mode 100644
index 4998f9b9013..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filter-grayscale-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-004.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-004.html.ini
deleted file mode 100644
index 9c1abbe7d17..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-004.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filter-grayscale-004.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-005.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-005.html.ini
deleted file mode 100644
index 523a42c4dcb..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-grayscale-005.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filter-grayscale-005.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-hue_rotate-001-test.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filter-hue_rotate-001-test.html.ini
deleted file mode 100644
index f8c63d40f6b..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-hue_rotate-001-test.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filter-hue_rotate-001-test.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-invert-001-test.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filter-invert-001-test.html.ini
deleted file mode 100644
index 459698ef47f..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-invert-001-test.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filter-invert-001-test.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-invert-002-test.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filter-invert-002-test.html.ini
deleted file mode 100644
index ae3843c73bc..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-invert-002-test.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filter-invert-002-test.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-saturate-001-test.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filter-saturate-001-test.html.ini
deleted file mode 100644
index 4d0b2f4e507..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filter-saturate-001-test.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filter-saturate-001-test.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-drop-shadow-001.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filters-drop-shadow-001.html.ini
deleted file mode 100644
index 180e39f034b..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-drop-shadow-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filters-drop-shadow-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-drop-shadow-003.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filters-drop-shadow-003.html.ini
deleted file mode 100644
index 911a1dd84cb..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-drop-shadow-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filters-drop-shadow-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-grayscale-001-test.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filters-grayscale-001-test.html.ini
deleted file mode 100644
index adb94eb5068..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-grayscale-001-test.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filters-grayscale-001-test.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-opacity-001-test.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filters-opacity-001-test.html.ini
deleted file mode 100644
index d336aa817a0..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-opacity-001-test.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filters-opacity-001-test.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-sepia-001-test.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filters-sepia-001-test.html.ini
deleted file mode 100644
index a3bdfaf9d4e..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-sepia-001-test.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filters-sepia-001-test.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-test-brightness-001.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filters-test-brightness-001.html.ini
deleted file mode 100644
index 2b7766b5141..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-test-brightness-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filters-test-brightness-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-test-brightness-002.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filters-test-brightness-002.html.ini
deleted file mode 100644
index 2715ff54ccf..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-test-brightness-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filters-test-brightness-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-test-brightness-003.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/filters-test-brightness-003.html.ini
deleted file mode 100644
index df5382158af..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/filters-test-brightness-003.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[filters-test-brightness-003.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/fixed-pos-filter-clip-001.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/fixed-pos-filter-clip-001.html.ini
deleted file mode 100644
index ee1318b3089..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/fixed-pos-filter-clip-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[fixed-pos-filter-clip-001.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/filter-effects/fixed-pos-filter-clip-002.html.ini b/tests/wpt/meta-legacy-layout/css/filter-effects/fixed-pos-filter-clip-002.html.ini
deleted file mode 100644
index 6e4c6f7b25c..00000000000
--- a/tests/wpt/meta-legacy-layout/css/filter-effects/fixed-pos-filter-clip-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[fixed-pos-filter-clip-002.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/css/selectors/user-invalid-form-submission-invalidation.html.ini b/tests/wpt/meta-legacy-layout/css/selectors/user-invalid-form-submission-invalidation.html.ini
new file mode 100644
index 00000000000..2122ec73662
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/selectors/user-invalid-form-submission-invalidation.html.ini
@@ -0,0 +1,2 @@
+[user-invalid-form-submission-invalidation.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/custom-elements/upgrading/upgrade-custom-element-error-event.html.ini b/tests/wpt/meta-legacy-layout/custom-elements/upgrading/upgrade-custom-element-error-event.html.ini
new file mode 100644
index 00000000000..5cfdd53de47
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/custom-elements/upgrading/upgrade-custom-element-error-event.html.ini
@@ -0,0 +1,12 @@
+[upgrade-custom-element-error-event.html]
+ [autonomous: exception thrown in constructor is reported to definition's global]
+ expected: FAIL
+
+ [autonomous: exception thrown by spec due to invalid element state is reported to definition's global]
+ expected: FAIL
+
+ [customized built-in: exception thrown in constructor is reported to definition's global]
+ expected: FAIL
+
+ [customized built-in: exception thrown by spec due to not returning the same value is reported to definition's global]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-event-target.any.js.ini b/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-event-target.any.js.ini
index 94327ea5e4c..2749f4a2401 100644
--- a/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-event-target.any.js.ini
+++ b/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-event-target.any.js.ini
@@ -8,6 +8,9 @@
[EventTarget Observables can multicast subscriptions for event handling]
expected: FAIL
+ [EventTarget.when() returns an Observable]
+ expected: FAIL
+
[observable-event-target.any.html]
[EventTarget.on() returns an Observable]
@@ -18,3 +21,6 @@
[EventTarget Observables can multicast subscriptions for event handling]
expected: FAIL
+
+ [EventTarget.when() returns an Observable]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/fetch/api/redirect/redirect-mode.any.js.ini b/tests/wpt/meta-legacy-layout/fetch/api/redirect/redirect-mode.any.js.ini
deleted file mode 100644
index 0d553db3737..00000000000
--- a/tests/wpt/meta-legacy-layout/fetch/api/redirect/redirect-mode.any.js.ini
+++ /dev/null
@@ -1,33 +0,0 @@
-[redirect-mode.any.worker.html]
- [cross-origin redirect 301 in manual redirect and no-cors mode]
- expected: FAIL
-
- [cross-origin redirect 302 in manual redirect and no-cors mode]
- expected: FAIL
-
- [cross-origin redirect 303 in manual redirect and no-cors mode]
- expected: FAIL
-
- [cross-origin redirect 307 in manual redirect and no-cors mode]
- expected: FAIL
-
- [cross-origin redirect 308 in manual redirect and no-cors mode]
- expected: FAIL
-
-
-[redirect-mode.any.html]
- [cross-origin redirect 301 in manual redirect and no-cors mode]
- expected: FAIL
-
- [cross-origin redirect 302 in manual redirect and no-cors mode]
- expected: FAIL
-
- [cross-origin redirect 303 in manual redirect and no-cors mode]
- expected: FAIL
-
- [cross-origin redirect 307 in manual redirect and no-cors mode]
- expected: FAIL
-
- [cross-origin redirect 308 in manual redirect and no-cors mode]
- expected: FAIL
-
diff --git a/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-font-face.sub.tentative.html.ini b/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-font-face.sub.tentative.html.ini
index 4dc5d2b0f6f..827af5f5244 100644
--- a/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-font-face.sub.tentative.html.ini
+++ b/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-font-face.sub.tentative.html.ini
@@ -23,8 +23,5 @@
[sec-fetch-user - Not sent to non-trustworthy same-origin destination]
expected: FAIL
- [sec-fetch-dest - Not sent to non-trustworthy same-site destination]
- expected: FAIL
-
[sec-fetch-dest - Not sent to non-trustworthy same-origin destination]
expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini
deleted file mode 100644
index 3e07e6b7d1f..00000000000
--- a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[empty-iframe-load-event.html]
- [Check execution order from nested timeout]
- expected: FAIL
-
- [Check execution order on load handler]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/filters/canvas-fillStyle-opacity.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/filters/canvas-fillStyle-opacity.html.ini
deleted file mode 100644
index afde27c68ff..00000000000
--- a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/filters/canvas-fillStyle-opacity.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[canvas-fillStyle-opacity.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/filters/canvas-globalAlpha.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/filters/canvas-globalAlpha.html.ini
deleted file mode 100644
index 835b71afb18..00000000000
--- a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/filters/canvas-globalAlpha.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[canvas-globalAlpha.html]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini
index 2a534fa2875..c94490ae5ee 100644
--- a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini
+++ b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini
@@ -1,5 +1,5 @@
[createImageBitmap-drawImage.html]
- expected: TIMEOUT
+ expected: ERROR
[createImageBitmap from an OffscreenCanvas resized, and drawImage on the created ImageBitmap]
expected: NOTRUN
@@ -164,4 +164,3 @@
[createImageBitmap from a vector HTMLImageElement scaled up, and drawImage on the created ImageBitmap]
expected: FAIL
-
diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html.ini
index 8daf97ba765..673fc1e4ffd 100644
--- a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html.ini
+++ b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html.ini
@@ -1,5 +1,5 @@
[createImageBitmap-invalid-args.html]
- expected: TIMEOUT
+ expected: ERROR
[createImageBitmap with a vector HTMLImageElement source and sw set to 0]
expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/html/rendering/replaced-elements/the-select-element/select-1-block-size.html.ini b/tests/wpt/meta-legacy-layout/html/rendering/replaced-elements/the-select-element/select-1-block-size.html.ini
new file mode 100644
index 00000000000..706aff5771a
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/html/rendering/replaced-elements/the-select-element/select-1-block-size.html.ini
@@ -0,0 +1,2 @@
+[select-1-block-size.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-adopt-lazy-iframe-from-script-disabled-document.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-adopt-lazy-iframe-from-script-disabled-document.html.ini
new file mode 100644
index 00000000000..6ce0847ab9a
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-adopt-lazy-iframe-from-script-disabled-document.html.ini
@@ -0,0 +1,3 @@
+[iframe-loading-lazy-adopt-lazy-iframe-from-script-disabled-document.html]
+ [Test lazy loading iframe remains lazy loading originally createdin a script-disabled document, then got adopted to a regular document]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-nav-location-assign.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-nav-location-assign.html.ini
new file mode 100644
index 00000000000..68a30137729
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-nav-location-assign.html.ini
@@ -0,0 +1,3 @@
+[iframe-loading-lazy-nav-location-assign.html]
+ [Navigating iframe loading='lazy' before it is loaded: location.assign]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
index e5994e21efc..2d3fbf0f308 100644
--- a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
+++ b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
@@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-1.html]
type: testharness
- expected: CRASH
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
index fe55ddae3f1..eacbe5794ea 100644
--- a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
+++ b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
@@ -1,4 +1,5 @@
[iframe_sandbox_popups_escaping-3.html]
type: testharness
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini
index 49e3449f144..6bec7a732b8 100644
--- a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini
+++ b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini
@@ -1,4 +1,4 @@
[iframe_sandbox_popups_nonescaping-2.html]
type: testharness
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/html/semantics/forms/historical.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/forms/historical.html.ini
deleted file mode 100644
index 5d8289307cc..00000000000
--- a/tests/wpt/meta-legacy-layout/html/semantics/forms/historical.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[historical.html]
- [<input name=isindex> should not be supported]
- expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-even-less-good-value-rendering.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-even-less-good-value-rendering.html.ini
new file mode 100644
index 00000000000..a2c63dbc379
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-even-less-good-value-rendering.html.ini
@@ -0,0 +1,2 @@
+[meter-appearance-none-even-less-good-value-rendering.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-optimum-value-rendering.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-optimum-value-rendering.html.ini
new file mode 100644
index 00000000000..d9fbcd92b97
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-optimum-value-rendering.html.ini
@@ -0,0 +1,2 @@
+[meter-appearance-none-optimum-value-rendering.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-rendering.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-rendering.html.ini
new file mode 100644
index 00000000000..6c44a772c80
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-rendering.html.ini
@@ -0,0 +1,2 @@
+[meter-appearance-none-rendering.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-suboptimum-value-rendering.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-suboptimum-value-rendering.html.ini
new file mode 100644
index 00000000000..d2e3a48dcb8
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/html/semantics/forms/the-meter-element/meter-appearance-none-suboptimum-value-rendering.html.ini
@@ -0,0 +1,2 @@
+[meter-appearance-none-suboptimum-value-rendering.html]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/html/webappapis/update-rendering/child-document-raf-order.html.ini b/tests/wpt/meta-legacy-layout/html/webappapis/update-rendering/child-document-raf-order.html.ini
new file mode 100644
index 00000000000..312c6689170
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/html/webappapis/update-rendering/child-document-raf-order.html.ini
@@ -0,0 +1,3 @@
+[child-document-raf-order.html]
+ [Ordering of steps in "Update the Rendering" - child document requestAnimationFrame order]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/dom/ranges/Range-isPointInRange-shadowdom.tentative.html.ini b/tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Range-isPointInRange.html.ini
index f7d05f3cb47..d406bfaf706 100644
--- a/tests/wpt/meta-legacy-layout/dom/ranges/Range-isPointInRange-shadowdom.tentative.html.ini
+++ b/tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Range-isPointInRange.html.ini
@@ -1,4 +1,4 @@
-[Range-isPointInRange-shadowdom.tentative.html]
+[Range-isPointInRange.html]
[isPointInRange() test for collapsed selection]
expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Selection-collapse-and-extend.html.ini b/tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Selection-collapse-and-extend.html.ini
new file mode 100644
index 00000000000..a3cd198ca4d
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Selection-collapse-and-extend.html.ini
@@ -0,0 +1,12 @@
+[Selection-collapse-and-extend.html]
+ [collapse can set selection to a node inside a shadow tree]
+ expected: FAIL
+
+ [collapse abort steps when called with a disconnected node inside a shadow tree]
+ expected: FAIL
+
+ [extend can set selection to a node inside a shadow tree]
+ expected: FAIL
+
+ [extend abort steps when called with a disconnected node inside a shadow tree]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Selection-getComposedRanges-collapsed.html.ini b/tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Selection-getComposedRanges-collapsed.html.ini
new file mode 100644
index 00000000000..0ff0a234b15
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Selection-getComposedRanges-collapsed.html.ini
@@ -0,0 +1,6 @@
+[Selection-getComposedRanges-collapsed.html]
+ [Setting the range to nodes that aren't in the same tree collapses both composed and non-composed ranges.]
+ expected: FAIL
+
+ [Setting the range to nodes in different shadow trees collapses ordinary ranges, but does not collapse composed ranges.]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Selection-getComposedRanges.html.ini b/tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Selection-getComposedRanges.html.ini
new file mode 100644
index 00000000000..4710aa44101
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Selection-getComposedRanges.html.ini
@@ -0,0 +1,36 @@
+[Selection-getComposedRanges.html]
+ [getComposedRanges returns an empty sequence when there is no selection]
+ expected: FAIL
+
+ [getComposedRanges should fail if argument is not a shadow root]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range when there is a forward-direction selection in the document tree]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range when there is a backward-direction selection in the document tree]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range pointing to a shadaw tree when there is a selection in the shadow tree and the shadow tree is specified as an argument]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range pointing to the shadow host when there is a selection in a shadow tree and the shadow tree is not specified as an argument]
+ expected: FAIL
+
+ [getComposedRanges a sequence with a static range pointing to the shadow host when there is a forward selection that crosses shadow boundaries and the shadow tree is not specified as an argument]
+ expected: FAIL
+
+ [getComposedRanges a sequence with a static range that crosses shadow boundaries when there is a forward selection that crosses shadow boundaries and the shadow tree is specified as an argument]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range pointing to the outer shadow host when there is a selection in an inner shadow tree and no shadow tree is specified as an argument]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range pointing to the inner shadow tree when there is a selection in an inner shadow tree and the inner shadow tree is specified as an argument]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range pointing to the outer shadow tree when there is a selection in an inner shadow tree and the outer shadow tree is specified as an argument]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range without rescoping when there is a selection in an outer shadow tree and the inner shadow tree is specified as an argument]
+ expected: FAIL
diff --git a/tests/wpt/meta/selection/shadow-dom/select-later-become-slotted-content.tentative.html.ini b/tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Selection-later-become-slotted-content.html.ini
index 1a6fbc450ce..56d8909ef26 100644
--- a/tests/wpt/meta/selection/shadow-dom/select-later-become-slotted-content.tentative.html.ini
+++ b/tests/wpt/meta-legacy-layout/selection/shadow-dom/tentative/Selection-later-become-slotted-content.html.ini
@@ -1,3 +1,3 @@
-[select-later-become-slotted-content.tentative.html]
+[Selection-later-become-slotted-content.html]
[test to select a light DOM element and it becomes a slotted content after the selection]
expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/xhr/responsexml-non-well-formed.htm.ini b/tests/wpt/meta-legacy-layout/xhr/responsexml-non-well-formed.htm.ini
index 37d30ce3a22..64516816368 100644
--- a/tests/wpt/meta-legacy-layout/xhr/responsexml-non-well-formed.htm.ini
+++ b/tests/wpt/meta-legacy-layout/xhr/responsexml-non-well-formed.htm.ini
@@ -18,3 +18,5 @@
[XMLHttpRequest: responseXML non well-formed tests 6]
expected: FAIL
+ [XMLHttpRequest: responseXML non well-formed tests]
+ expected: FAIL
diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json
index 5ac00821557..b8aeddc1bb2 100644
--- a/tests/wpt/meta/MANIFEST.json
+++ b/tests/wpt/meta/MANIFEST.json
@@ -357,6 +357,13 @@
{}
]
],
+ "missing-parent-map.html": [
+ "a6de311b5fbac56212c79e7e6115a04850777b8f",
+ [
+ null,
+ {}
+ ]
+ ],
"missing-parent-multi-col.html": [
"5899e98ba284d475fc0893cbf51dd092bf7cd8c0",
[
@@ -6380,6 +6387,13 @@
{}
]
],
+ "replace-document-root-and-refocus-window.html": [
+ "b2923054684382aa5c78d936008e4a7029ec3891",
+ [
+ null,
+ {}
+ ]
+ ],
"replace-document-root-with-object-and-mo.html": [
"bdad541422833382c831de19bc0c1973006448c1",
[
@@ -10756,6 +10770,13 @@
}
},
"console": {
+ "console-count-logging-manual.html": [
+ "640729f1a2164ed2ab7258481341ce4109b19726",
+ [
+ null,
+ {}
+ ]
+ ],
"console-countReset-logging-manual.html": [
"f0a9358fba5d74b82bb39000d5d42f18d6ea2795",
[
@@ -11844,7 +11865,7 @@
]
],
"deletion-manual.html": [
- "4f6b0d7feb76d4fc21f6cf18c74b8adf849e6a9d",
+ "e94c0d076cd4f2a0776ea746009579beb04f3225",
[
null,
{}
@@ -12061,7 +12082,7 @@
]
],
"insertion-manual.html": [
- "7b5fd8098512174207ed5118d84392a42fc9d780",
+ "65956ef13c0f58774cc197c04a341b1caaec07db",
[
null,
{}
@@ -12124,7 +12145,7 @@
]
],
"mark-manual.html": [
- "8373fa133da91bc635082589a6b8e3e974256abd",
+ "c7c1909a8fb29e557c2ca83e5544af8a30abfff1",
[
null,
{}
@@ -12396,6 +12417,20 @@
{}
]
],
+ "sectionfooter-manual.html": [
+ "f007f8b116d6bf4cc86ae3877f4f3d13db75c243",
+ [
+ null,
+ {}
+ ]
+ ],
+ "sectionheader-manual.html": [
+ "24504622d6d22e52d7f67ce570f8052f7d079965",
+ [
+ null,
+ {}
+ ]
+ ],
"separator_focusable-manual.html": [
"67bf48919dd3b6b386b4caeeec0041d48eea8905",
[
@@ -12446,7 +12481,7 @@
]
],
"suggestion-manual.html": [
- "f31bcab8defbb01a592ef78403a0645c72fabb03",
+ "75ec9828925f30e258c9fff7284d2e0c6c285257",
[
null,
{}
@@ -122443,6 +122478,45 @@
],
{}
]
+ ],
+ "justify-self-auto-margins-1.html": [
+ "b54eb775114808ff22b82a858426e764a623e432",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "justify-self-auto-margins-2.html": [
+ "33c98d6c1dfb43ff29f5c63472f041add65faff1",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "justify-self-text-align.html": [
+ "71d1f5b94cf4cd7959426c673fea6b9d176e6d9a",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
]
},
"content-distribution": {
@@ -139015,6 +139089,19 @@
{}
]
],
+ "single-line-column-flex-fragmentation-071.html": [
+ "8cea4b75112389b0f69d26ca4afa4c0bbc338fd1",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"single-line-row-flex-fragmentation-001.html": [
"379327a4aff584192f076d3f9d8f3ead232c0f5c",
[
@@ -146771,6 +146858,35 @@
{}
]
],
+ "color-layers-no-blend-mode.html": [
+ "2ee8d46c6376a331b157cbe84c4c435a65787aae",
+ [
+ null,
+ [
+ [
+ "/css/css-color/color-layers-no-blend-mode-ref.html",
+ "=="
+ ]
+ ],
+ {
+ "fuzzy": [
+ [
+ null,
+ [
+ [
+ 0,
+ 3
+ ],
+ [
+ 0,
+ 127500
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ ],
"color-mix-basic-001.html": [
"c69a292159003c578918bd1be9e495c6cbdb094e",
[
@@ -181076,7 +181192,7 @@
]
],
"variation-sequences.html": [
- "91e46a84d71cc873e006bd59c328d54c8c614b52",
+ "c1f69a5be5875556b5c64e962169aa9efca19ade",
[
null,
[
@@ -198525,7 +198641,7 @@
},
"text-box-trim": {
"text-box-trim-accumulation-001.html": [
- "08eedbdbfebc3263bcaefb2ce25727eceb1e91e7",
+ "5ff9c7181f88ad93df1aab71b53ad89734ee44d0",
[
null,
[
@@ -198538,7 +198654,7 @@
]
],
"text-box-trim-atomic-inline-001.html": [
- "5f2d01c7dc723981a832fb802992083ccbf96c6b",
+ "e81a072445bdc877bf045c9a66229225796ca6aa",
[
null,
[
@@ -198551,7 +198667,7 @@
]
],
"text-box-trim-block-in-inline-end-001.html": [
- "7b008a21f04396b8a1703e540d44600538f301aa",
+ "37d5ff0bb82b1f6d4e99c4862fd2776ce36d75c3",
[
null,
[
@@ -198564,7 +198680,7 @@
]
],
"text-box-trim-block-in-inline-end-002.html": [
- "a1711e309cc61efe0cde5b8c0058a1f72c7eb223",
+ "78f461d6355c9b5dee280387d645da315bb0b728",
[
null,
[
@@ -198577,7 +198693,7 @@
]
],
"text-box-trim-block-in-inline-end-003.html": [
- "8ace67f78f60df6cf5fd4f53613d9d21cb4e0ba0",
+ "03faacbdbb2c68d4cf1cd51daeec43ddf0c1ea3b",
[
null,
[
@@ -198590,7 +198706,7 @@
]
],
"text-box-trim-block-in-inline-end-004.html": [
- "3c682a211f9ae45c2478876135a2c4e8a86b999a",
+ "7e5b03c15f0151812a3346a88cf077d318a996ac",
[
null,
[
@@ -198603,7 +198719,7 @@
]
],
"text-box-trim-block-in-inline-start-001.html": [
- "9d14a08bc2ab509955cf5be11cc797ff9f59e48c",
+ "312265b41e8d04312497360d82953b94867fe483",
[
null,
[
@@ -198616,7 +198732,7 @@
]
],
"text-box-trim-block-in-inline-start-002.html": [
- "67bfa343781cf35b3ce74297b35ee09c0f89fc05",
+ "c3fa558e548209eab4ed914cc8ac3e5cf25b093b",
[
null,
[
@@ -198629,7 +198745,7 @@
]
],
"text-box-trim-block-in-inline-start-003.html": [
- "5227a4d13aa4bc6513516da4dd963f1891bb3a3b",
+ "507a558d3086481e33d3b83fc1c7a5f9d6ded6a6",
[
null,
[
@@ -198642,7 +198758,7 @@
]
],
"text-box-trim-dynamic-001.html": [
- "5cd25060934ef6a73aa0d01141adde8296103c08",
+ "363fed4b039353daeeddbffb093175f840c7420f",
[
null,
[
@@ -198655,7 +198771,7 @@
]
],
"text-box-trim-dynamic-002.html": [
- "a921d4d0caa06c2974b7e1a3386c1100a97dae40",
+ "f07b39302868a79a4e85043b6ec17700123c1eee",
[
null,
[
@@ -198668,7 +198784,7 @@
]
],
"text-box-trim-end-001.html": [
- "0bca8de808803effcb766c52bc235f95c985d78c",
+ "dbd44c814b63bc6399ab4c70ef575aa22bd2e32b",
[
"css/css-inline/text-box-trim/text-box-trim-end-001.html?class=alphabetic",
[
@@ -198680,10 +198796,10 @@
{}
],
[
- "css/css-inline/text-box-trim/text-box-trim-end-001.html?class=leading",
+ "css/css-inline/text-box-trim/text-box-trim-end-001.html?class=auto",
[
[
- "/css/css-inline/text-box-trim/text-box-trim-end-001-ref.html?class=leading",
+ "/css/css-inline/text-box-trim/text-box-trim-end-001-ref.html?class=auto",
"=="
]
],
@@ -198700,30 +198816,30 @@
{}
],
[
- "css/css-inline/text-box-trim/text-box-trim-end-001.html?class=vlr,cap",
+ "css/css-inline/text-box-trim/text-box-trim-end-001.html?class=vlr,auto",
[
[
- "/css/css-inline/text-box-trim/text-box-trim-end-001-ref.html?class=vlr,cap",
+ "/css/css-inline/text-box-trim/text-box-trim-end-001-ref.html?class=vlr,auto",
"=="
]
],
{}
],
[
- "css/css-inline/text-box-trim/text-box-trim-end-001.html?class=vlr,ex",
+ "css/css-inline/text-box-trim/text-box-trim-end-001.html?class=vlr,cap",
[
[
- "/css/css-inline/text-box-trim/text-box-trim-end-001-ref.html?class=vlr,ex",
+ "/css/css-inline/text-box-trim/text-box-trim-end-001-ref.html?class=vlr,cap",
"=="
]
],
{}
],
[
- "css/css-inline/text-box-trim/text-box-trim-end-001.html?class=vlr,leading",
+ "css/css-inline/text-box-trim/text-box-trim-end-001.html?class=vlr,ex",
[
[
- "/css/css-inline/text-box-trim/text-box-trim-end-001-ref.html?class=vlr,leading",
+ "/css/css-inline/text-box-trim/text-box-trim-end-001-ref.html?class=vlr,ex",
"=="
]
],
@@ -198750,10 +198866,10 @@
{}
],
[
- "css/css-inline/text-box-trim/text-box-trim-end-001.html?class=vrl,leading",
+ "css/css-inline/text-box-trim/text-box-trim-end-001.html?class=vrl,auto",
[
[
- "/css/css-inline/text-box-trim/text-box-trim-end-001-ref.html?class=vrl,leading",
+ "/css/css-inline/text-box-trim/text-box-trim-end-001-ref.html?class=vrl,auto",
"=="
]
],
@@ -198771,7 +198887,7 @@
]
],
"text-box-trim-end-empty-line-001.html": [
- "30061b208d6b6b51bd917da180a9a44608392f1c",
+ "e9f8613e44fe20df0a1bfadd16e674b036e11991",
[
null,
[
@@ -198784,7 +198900,7 @@
]
],
"text-box-trim-float-clear-br-001.html": [
- "985ae60c46db62bb01f8c886b11e4cb3289b48bc",
+ "6694d98421d015445c0efc61afa34fa75a97738d",
[
null,
[
@@ -198797,7 +198913,20 @@
]
],
"text-box-trim-float-clear-br-002.html": [
- "5798525e476447347d36030319c024fcdc2db820",
+ "883a1de3a352063c483576781f5d6dd428774e9f",
+ [
+ null,
+ [
+ [
+ "/css/css-inline/text-box-trim/text-box-trim-float-clear-br-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "text-box-trim-float-clear-br-003.html": [
+ "e04d18ec1095449337837461f315868835542da4",
[
null,
[
@@ -198810,7 +198939,7 @@
]
],
"text-box-trim-float-start-001.html": [
- "99e4736baf09257d4f14577598f4f8d531c7c681",
+ "3d87a82d7dbf8cfd5c77e188e61f5479206ae5fb",
[
null,
[
@@ -198823,7 +198952,7 @@
]
],
"text-box-trim-half-leading-block-box-001.html": [
- "92ec181c51ffc2d88088a8456003ab423ffffbba",
+ "4eda7e48827591f8824ca2b62f30d0bf1c5952b4",
[
null,
[
@@ -198836,7 +198965,7 @@
]
],
"text-box-trim-half-leading-block-box-002.html": [
- "e095a2d49c20bf89f719038d8048eb06ab3c028f",
+ "62c734405a0e14e7dd7070173c846bb58921c130",
[
null,
[
@@ -198849,7 +198978,20 @@
]
],
"text-box-trim-half-leading-block-box-003.html": [
- "916afde8905767f6b3a17949f5809ff440ebeb14",
+ "dc5e3204c98e9e0553de6d9739f16533201f234a",
+ [
+ null,
+ [
+ [
+ "/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-003-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "text-box-trim-half-leading-block-box-004.html": [
+ "3e24919fd7f36d070d3430d0ff5f482785a0d30b",
[
null,
[
@@ -198861,8 +199003,34 @@
{}
]
],
+ "text-box-trim-half-leading-block-box-005.html": [
+ "fd6b18d052b3c582044320bea022c4dc64a5d6a6",
+ [
+ null,
+ [
+ [
+ "/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "text-box-trim-half-leading-block-box-006.html": [
+ "ad6059ed7d89bbd75f6b7e563f9539f6cd0a0818",
+ [
+ null,
+ [
+ [
+ "/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-003-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"text-box-trim-height-001.html": [
- "d732592e51ad1d55b77fb295b9ba66dab8287ada",
+ "e240f2343a96bb5966f44c3dfa5a9c9f55a2df71",
[
null,
[
@@ -198875,7 +199043,7 @@
]
],
"text-box-trim-height-002.html": [
- "1249627f8385832598b1e4e5549eb1445b098b47",
+ "113dabc83f063360f434f2855a3b171cb62991ec",
[
null,
[
@@ -198888,7 +199056,7 @@
]
],
"text-box-trim-initial-letter-end-001.html": [
- "809666ee0d07e6b4cc4dc6a9509d188392d59ded",
+ "473b9e6bf09d2a7bf59bccc12aceb3025503e482",
[
null,
[
@@ -198901,7 +199069,7 @@
]
],
"text-box-trim-initial-letter-start-001.html": [
- "4f8d3a33e5b4e0200db0c89ff7902fea266a4843",
+ "ad7442d4b47102ec99876eec64200360d47a729e",
[
null,
[
@@ -198914,7 +199082,7 @@
]
],
"text-box-trim-line-clamp-001.html": [
- "e0af246db0e53665c5a54d3ad1a2064f52b61462",
+ "88cd7454c5427bf9966d5bc30fcf96ef8e1f2fda",
[
null,
[
@@ -198927,7 +199095,7 @@
]
],
"text-box-trim-multicol-001.html": [
- "69323e0aeffd2fb641cc0bbd1ef952103ed171ab",
+ "80f897aa4b696a6e3ea615fdb9d5c5ebe89da4fa",
[
null,
[
@@ -198940,7 +199108,7 @@
]
],
"text-box-trim-multicol-002.html": [
- "dbba108b16deac3c868cd47851337b7065ef7a18",
+ "f15746d3d6a00c1076e1cdf2b9f76b29b131efdc",
[
null,
[
@@ -198953,7 +199121,7 @@
]
],
"text-box-trim-ruby-end-001.html": [
- "5d0229fa373943ccebb7f0f7efc2a9dbc8b76a4c",
+ "5494b00d17ef08ec8dd8ea2a0d7c334b94524b5e",
[
null,
[
@@ -198966,7 +199134,7 @@
]
],
"text-box-trim-ruby-start-001.html": [
- "d673d0ab02d9e4d03567389ca3d4044cdc35a84c",
+ "b64c5c49e0c7bb9ecb5a1f0f4615f495e1ea5dbf",
[
null,
[
@@ -198979,7 +199147,7 @@
]
],
"text-box-trim-ruby-start-002.html": [
- "9fd8be7dfc584e911d63a0bc791a291ddb2d8b9d",
+ "c4430278adad806895cb7688b084bd9da16f8579",
[
null,
[
@@ -198992,32 +199160,32 @@
]
],
"text-box-trim-start-001.html": [
- "35ac848aa6291db0508fd4df3f0bf2e7f2f43e07",
+ "106f027688c6941a0fbd95cab29698358995456a",
[
- "css/css-inline/text-box-trim/text-box-trim-start-001.html?class=cap",
+ "css/css-inline/text-box-trim/text-box-trim-start-001.html?class=auto",
[
[
- "/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html?class=cap",
+ "/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html?class=auto",
"=="
]
],
{}
],
[
- "css/css-inline/text-box-trim/text-box-trim-start-001.html?class=ex",
+ "css/css-inline/text-box-trim/text-box-trim-start-001.html?class=cap",
[
[
- "/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html?class=ex",
+ "/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html?class=cap",
"=="
]
],
{}
],
[
- "css/css-inline/text-box-trim/text-box-trim-start-001.html?class=leading",
+ "css/css-inline/text-box-trim/text-box-trim-start-001.html?class=ex",
[
[
- "/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html?class=leading",
+ "/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html?class=ex",
"=="
]
],
@@ -199044,10 +199212,10 @@
{}
],
[
- "css/css-inline/text-box-trim/text-box-trim-start-001.html?class=vlr,leading",
+ "css/css-inline/text-box-trim/text-box-trim-start-001.html?class=vlr,auto",
[
[
- "/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html?class=vlr,leading",
+ "/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html?class=vlr,auto",
"=="
]
],
@@ -199064,30 +199232,30 @@
{}
],
[
- "css/css-inline/text-box-trim/text-box-trim-start-001.html?class=vrl,cap",
+ "css/css-inline/text-box-trim/text-box-trim-start-001.html?class=vrl,auto",
[
[
- "/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html?class=vrl,cap",
+ "/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html?class=vrl,auto",
"=="
]
],
{}
],
[
- "css/css-inline/text-box-trim/text-box-trim-start-001.html?class=vrl,ex",
+ "css/css-inline/text-box-trim/text-box-trim-start-001.html?class=vrl,cap",
[
[
- "/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html?class=vrl,ex",
+ "/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html?class=vrl,cap",
"=="
]
],
{}
],
[
- "css/css-inline/text-box-trim/text-box-trim-start-001.html?class=vrl,leading",
+ "css/css-inline/text-box-trim/text-box-trim-start-001.html?class=vrl,ex",
[
[
- "/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html?class=vrl,leading",
+ "/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html?class=vrl,ex",
"=="
]
],
@@ -199105,7 +199273,7 @@
]
],
"text-box-trim-tall-line-001.html": [
- "9a86e394cc05abff0eea25262f32e7589ef3b59e",
+ "3534d36e0b4797c06ba928b14b2cf23542dae6ca",
[
null,
[
@@ -199117,13 +199285,13 @@
{}
]
],
- "text-box-trim-text-emphasis-start-001.html": [
- "2c38611ee32eea85a2fa2f7d27ded1d491dfc9cb",
+ "text-box-trim-text-emphasis-001.html": [
+ "174472365e6a5bfe0e0d84062e67992ae12d040f",
[
null,
[
[
- "/css/css-inline/text-box-trim/text-box-trim-text-emphasis-start-001-ref.html",
+ "/css/css-inline/text-box-trim/text-box-trim-text-emphasis-001-ref.html",
"=="
]
],
@@ -215776,6 +215944,19 @@
{}
]
],
+ "line-clamp-028.tentative.html": [
+ "b8fa48025b692c325f66e7e5e7685cf461fcf94d",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-028-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"line-clamp-auto-001.tentative.html": [
"02d8479736d4d6fd7e26df53611624e7a75d0989",
[
@@ -216218,6 +216399,71 @@
{}
]
],
+ "line-clamp-auto-with-ruby-001.tentative.html": [
+ "5f69cc1b71e9eaeceacbbb87140349b5d7590a8c",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-auto-with-ruby-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-auto-with-ruby-002.tentative.html": [
+ "62fe4814bda517297a4ddd5fa3525a8a9d72026f",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/webkit-line-clamp-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-auto-with-ruby-003.tentative.html": [
+ "4a3b83093dd592c009b53c5b1f68fe7fcdc8c8fc",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-auto-with-ruby-003-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-auto-with-ruby-004.tentative.html": [
+ "6b93203de4d898f9c654baa07c7a2a93f709caa7",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/webkit-line-clamp-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-auto-with-ruby-005.tentative.html": [
+ "af2a19d6fb043c85ead2a185c8ff955e90c9c21c",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-auto-with-ruby-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"line-clamp-with-abspos-001.tentative.html": [
"79667f23fbdc3d941484c343b2cf0a04ec34363f",
[
@@ -227876,6 +228122,84 @@
{}
]
],
+ "host-has-001.html": [
+ "79c89874c63af3b2fa14ed64e0711b006a8032dc",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "host-has-002.html": [
+ "33a705672aeb07fdaae71eb7fac583396f20d450",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "host-has-003.html": [
+ "58f1482564b0b29afd2a1c5dea7a7640d6b74a72",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "host-has-internal-001.tentative.html": [
+ "c2082de0ac306be835d1913e4b011b5503eac186",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "host-has-internal-002.tentative.html": [
+ "217ed9596c411a6d20b2cda5d972728a8e4da8eb",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "host-has-internal-003.tentative.html": [
+ "9c0a724834596d29f397a5434a83b5bbba658d46",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"host-is-001.html": [
"16d0dd76691362ee963e386a2fd238783c096243",
[
@@ -229028,6 +229352,19 @@
{}
]
],
+ "scrollbar-gutter-scroll-into-view.html": [
+ "a619d1aa3e42a703021e254be2bbfd4d6a06d283",
+ [
+ null,
+ [
+ [
+ "/css/css-scrollbars/scrollbar-gutter-scroll-into-view-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"scrollbar-width-paint-001.html": [
"320af264644e36c21caa92e0ff7e467612c5a752",
[
@@ -230517,6 +230854,19 @@
],
{}
]
+ ],
+ "shape-image-029.html": [
+ "3c8d58607cbc3cef483d1bd7fd607d29d477ac28",
+ [
+ null,
+ [
+ [
+ "/css/css-shapes/shape-outside/shape-image/reference/shape-image-000-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
]
},
"supported-shapes": {
@@ -233257,7 +233607,7 @@
]
],
"block-aspect-ratio-042.html": [
- "3f76d42b97125d793637f0477394b16f4ef848f0",
+ "63c3b1abc9bc1d58d971e953508b1c56b12c367b",
[
null,
[
@@ -233270,7 +233620,7 @@
]
],
"block-aspect-ratio-043.html": [
- "98fd3697dc3e68b9a102b74bf70e8c4075792bb5",
+ "da63c050320cc9aa5b8f3d91afc1f4dafe88525f",
[
null,
[
@@ -233425,6 +233775,32 @@
{}
]
],
+ "block-aspect-ratio-056.html": [
+ "c12f8082a3660c1ac38efc794256057c3c4b83c1",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "block-aspect-ratio-057.tentative.html": [
+ "e183c7ec0a3932dfc9c2c57554ecc6498f6ca123",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"block-aspect-ratio-with-margin-collapsing-001.html": [
"78a0418fe285da58030cdd863460add0533e6af5",
[
@@ -234049,6 +234425,136 @@
{}
]
],
+ "flex-aspect-ratio-045.html": [
+ "e5381df7cc157973e9f6e1b29193fbb227557196",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-aspect-ratio-046.html": [
+ "e6ac10a32b4ddc75f40b528ed56fbd3a08c820cf",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-aspect-ratio-047.html": [
+ "06fa3ba23723a666483f5d811b41a8131e91ccb0",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-aspect-ratio-048.html": [
+ "8d00a08f04a25248ac8fbb646ee678b8b58a0eaf",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-aspect-ratio-049.html": [
+ "c69950742e33682fda26a178495bafb3f06fc3e8",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-aspect-ratio-050.html": [
+ "c7e74e699c1684af98a8f4e5f1469eb7601172a4",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-aspect-ratio-051.html": [
+ "0556c1c1ff31729de2c8fb5bffacac4a812ecb63",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-aspect-ratio-052.html": [
+ "c046c2ed129e19ae3a3d8ad03980cdae6268bc76",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-aspect-ratio-053.html": [
+ "05b9874798c2c4532b73e7933f907a3ac7b7da23",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-aspect-ratio-054.html": [
+ "5e2cd7a4f764ab8119cbb558a859b22f40c3ad3f",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"floats-aspect-ratio-001.html": [
"53627d2134aacff311142d5513a5a662264143de",
[
@@ -260999,6 +261505,45 @@
{}
]
],
+ "text-emphasis-punctuation-1.html": [
+ "f965566c0d7109bc442d867a76d391b9626646e3",
+ [
+ null,
+ [
+ [
+ "/css/css-text-decor/text-emphasis-punctuation-1-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "text-emphasis-punctuation-2.html": [
+ "1a48f9d32cb27be5cf2cd77832569e402d489b6f",
+ [
+ null,
+ [
+ [
+ "/css/css-text-decor/text-emphasis-punctuation-2-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "text-emphasis-punctuation-3.html": [
+ "4c0d81cb5f6aa2a110c14a71bad0f49d902d8c7c",
+ [
+ null,
+ [
+ [
+ "/css/css-text-decor/text-emphasis-punctuation-3-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"text-emphasis-ruby-001.html": [
"03f562bc8db13c7a6ade9724878c937cded47837",
[
@@ -287390,6 +287935,149 @@
{}
]
],
+ "calc-size-aspect-ratio-003.html": [
+ "3a91792fbd246b6590159f757e4958dca4d21143",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "calc-size-aspect-ratio-004.html": [
+ "f4f0b66b1eaec4a8a476ca75cf19893fb83aae65",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "calc-size-aspect-ratio-005.html": [
+ "70f0ffe9a3f633be154f287eecab0e77a74200a9",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "calc-size-flex-001.html": [
+ "22aa9d90bb5e9c72e2e8a1a0c2b84896677ab3f8",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "calc-size-flex-002.html": [
+ "0b93341fc0be5300fe01550b95f3121db080db70",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "calc-size-flex-003.html": [
+ "22858da47357ab66228d0f01d446ff8c7dc16e10",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "calc-size-flex-004.html": [
+ "759fc326859b790fae2c4c7429edb5464ef241c4",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "calc-size-flex-005.html": [
+ "01f142e16e147784d8a0f6ca81887d246fd1fba4",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "calc-size-flex-006.html": [
+ "02e9f993bd9e91b2c8e59f4f884b7667afb3e137",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "calc-size-flex-007.html": [
+ "987764e7213bed8703c57db1c2e356846e7d859a",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "calc-size-grid-repeat.html": [
+ "a6526507aabac3999f056c537217f93e3fa9758c",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"calc-size-min-max-sizes-001.html": [
"d64a1fdc24d25d345b9f1214b7fcb8dc8690a741",
[
@@ -290860,6 +291548,19 @@
}
]
],
+ "active-view-transition-on-non-root.html": [
+ "9870b15cca958d0e7c5080cebe24c463ad7a33ca",
+ [
+ null,
+ [
+ [
+ "/css/css-view-transitions/view-transition-types-one-green-square-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"active-view-transition-pseudo-class-match.html": [
"534c144ecf0c3b7dc14fd915782f8daeef93a18c",
[
@@ -290873,6 +291574,19 @@
{}
]
],
+ "active-view-transition-type-on-non-root.html": [
+ "f4225485b860b09fc0fca560fbc7f33c270dbf05",
+ [
+ null,
+ [
+ [
+ "/css/css-view-transitions/view-transition-types-one-green-square-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"animating-new-content-subset.html": [
"d5a342c572041f8ef30efef4cfca703636a9266f",
[
@@ -293161,7 +293875,7 @@
]
],
"contain-direct.tentative.html": [
- "f4b5cf659cdb0021cb2c3c037093653130495e1b",
+ "8cc856883df16410730d40da72d3ef4cc35562be",
[
null,
[
@@ -293190,7 +293904,7 @@
]
],
"contain-nested.tentative.html": [
- "34d100800b0b576326a7fa4ab12bcfc56047072b",
+ "643aad7b6db97b890ecd7fcb9e650915426d3520",
[
null,
[
@@ -293219,7 +293933,7 @@
]
],
"contain-on-self.tentative.html": [
- "bc5e5b49f27d946c8c0817138f0521687e568984",
+ "f8662850bb94b64e27448b9e1187f7c4a5e788d6",
[
null,
[
@@ -293248,7 +293962,7 @@
]
],
"nearest-direct.tentative.html": [
- "bc49ef8d2647ca0e6646d88e2ed517dfca2d5583",
+ "a42e5a847c053b2b248208df64be87512b24716e",
[
null,
[
@@ -293277,7 +293991,7 @@
]
],
"nearest-ignores-nearest-name.tentative.html": [
- "0afa170eaec84a2ebd18ce1625889ff138c215b6",
+ "ddae634f87a0ace4216ea66cbb72bc7734df3e10",
[
null,
[
@@ -293306,7 +294020,7 @@
]
],
"nearest-nested.tentative.html": [
- "1c4f153427d5cf67995ef4f3fd1fabd91e283662",
+ "9ec3e8f95ffe3194e85cdbe455ee3b3a3d723211",
[
null,
[
@@ -293393,7 +294107,7 @@
]
],
"nested-group-in-pseudo-basic.tentative.html": [
- "2cacf7a759c6a8d23fce677c8aeab37ab8261133",
+ "77241d06b73217a9a99f46aa9838f3ebb7507732",
[
null,
[
@@ -295228,6 +295942,45 @@
{}
]
],
+ "shadow-part-with-class-inside-shadow-important.html": [
+ "34d98be1fa4210694c63c8600b63139a5a12ce8c",
+ [
+ null,
+ [
+ [
+ "/css/css-view-transitions/names-are-tree-scoped-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "shadow-part-with-class-inside-shadow.html": [
+ "ad89ce230b541909921bad47d1031f3555117dd2",
+ [
+ null,
+ [
+ [
+ "/css/css-view-transitions/names-are-tree-scoped-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "shadow-part-with-class.html": [
+ "090fceeb14bf4387d1f7f093846301127b5d7935",
+ [
+ null,
+ [
+ [
+ "/css/css-view-transitions/names-are-tree-scoped-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"shadow-part-with-name-nested.html": [
"e34903a4a2218a92fb782f34d0f5c20de4a0f37f",
[
@@ -295585,7 +296338,7 @@
]
],
"view-transition-types-matches.html": [
- "ef15d97fb997e1dd744bcc42108e68c750b74d68",
+ "c84819e8c724da84ffeb949d63f6725569022435",
[
null,
[
@@ -295611,7 +296364,7 @@
]
],
"view-transition-types-reserved-mutation.html": [
- "ba8b5e1e3c8899225a1d63a4b90900b189b247fb",
+ "c17cff92af66771452613a7fe220be7402e096fe",
[
null,
[
@@ -295624,7 +296377,7 @@
]
],
"view-transition-types-reserved.html": [
- "1dca3774aa4e1feb3fe0eb5d8d1a52aceebf86a7",
+ "871b4104d75803a14eddbd1fd3090cc31b95fa78",
[
null,
[
@@ -321668,6 +322421,19 @@
{}
]
],
+ "user-invalid-form-submission-invalidation.html": [
+ "578ea8d4c50d28bb6809aa3fc093f371ea3eeaa0",
+ [
+ null,
+ [
+ [
+ "/css/selectors/user-invalid-form-submission-invalidation-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"visited-inheritance.html": [
"1442307a9293ed0b26970dd25e70e8c57fef8ee8",
[
@@ -333680,6 +334446,58 @@
]
},
"the-meter-element": {
+ "meter-appearance-none-even-less-good-value-rendering.html": [
+ "07c0b89a067107bcd423e36de5dcde05795ceec3",
+ [
+ null,
+ [
+ [
+ "/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-even-less-good-value-rendering.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "meter-appearance-none-optimum-value-rendering.html": [
+ "7ed863d6085ce4c1b33f4b1351284909390525ca",
+ [
+ null,
+ [
+ [
+ "/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-optimum-value-rendering.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "meter-appearance-none-rendering.html": [
+ "2b0227892abdbfbd6e7833c5511d5986cf53ff02",
+ [
+ null,
+ [
+ [
+ "/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-rendering-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "meter-appearance-none-suboptimum-value-rendering.html": [
+ "80cefe102701098bb6471455a7a2de424c7dbb7e",
+ [
+ null,
+ [
+ [
+ "/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-suboptimum-value-rendering-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
"meter-min-rendering.html": [
"ca83fc9565bc2245f9525ce78d48496022bc51e5",
[
@@ -333817,6 +334635,19 @@
],
{}
]
+ ],
+ "select-size-multiple-new-content.tentative.html": [
+ "169f1096255ce35a64eafa15e45cb9b555071710",
+ [
+ null,
+ [
+ [
+ "/html/semantics/forms/the-select-element/stylable-select/select-size-multiple-new-content-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
]
}
},
@@ -344295,6 +345126,19 @@
{}
]
],
+ "non-scaling-stroke-004.html": [
+ "32c745a4e2ecff16d94161539c1f88daba1f6102",
+ [
+ null,
+ [
+ [
+ "/svg/painting/reftests/green-100x100.svg",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"paint-context-001.svg": [
"7be33cb20fb257496cb1357a5481edecf364bc59",
[
@@ -350657,7 +351501,7 @@
[]
],
"support.js": [
- "5036e50466578be3ec9e4f9596cb4146cf481cf8",
+ "1d5d8df5ca3a0d3f3a7b93408c83eba47aa4e046",
[]
]
},
@@ -396660,6 +397504,10 @@
"7610a6f1911aecb33cedf7fad16c48977a5d14ba",
[]
],
+ "color-layers-no-blend-mode-ref.html": [
+ "7e45ac4f8b7ffd5c4085afe441e05c7c856408d5",
+ []
+ ],
"color-mix-basic-001-ref.html": [
"7296d17fba3bd7b45769cbed12e954509ee85eac",
[]
@@ -412921,7 +413769,11 @@
"e9a2fc218b369825c991e3109986481a922e671f",
[]
],
- "resources": {
+ "support": {
+ "MetricsTestFont.css": [
+ "5b69d96e4acc7e759f78e95d988400a901d06096",
+ []
+ ],
"README.md": [
"e00b13c17dcab532a2075b87a97a3573d4d9c55e",
[]
@@ -412936,63 +413788,75 @@
]
},
"text-box-trim-atomic-inline-001-ref.html": [
- "7614329e2e5bd97b0334541b760b0a10138dfef4",
+ "8df342743460ad2b4c4372c17892844591192a7a",
[]
],
"text-box-trim-block-in-inline-end-001-ref.html": [
- "ef0c90d6644afc9c6b57f5cfdb8adf4e6360d069",
+ "6eff49558ecb7b64dfa4e991132e726a792c786e",
[]
],
"text-box-trim-block-in-inline-start-001-ref.html": [
- "dd288036917d9a4a4e85e968b4b7486b0f22a039",
+ "450744a61f7604d2c1cd94792b8a3b0daf490089",
[]
],
"text-box-trim-dynamic-001-ref.html": [
- "8f089635faebf04c4acde22bb60ec532661a1eba",
+ "5a759de72be9f21e8f7c641b4897b26889f94f45",
[]
],
"text-box-trim-end-001-ref.html": [
- "433670fda11201f97ec517456b0e0d58654ad2f2",
+ "fb31970c5cde2d10ffd12a6c232dbbe972e29496",
[]
],
"text-box-trim-end-empty-line-001-ref.html": [
- "5c0dd61f7a4d3ffbdf7d1695cbadd4dc59af2447",
+ "8f281b5c730d049c50a7d90e351fcbeb123532ac",
[]
],
"text-box-trim-float-clear-br-001-ref.html": [
- "dd66e5a732d9fc849e5a2aeb9e155bb09ff2a525",
+ "f928601d7534655c62f53f583599e7583a8db98f",
[]
],
"text-box-trim-float-clear-br-002-ref.html": [
- "d4275a8df5fdd158c06c2e5acb618865f8b98d63",
+ "e97c45026c1138e42763a13964561600786653cd",
+ []
+ ],
+ "text-box-trim-float-clear-br-003-ref.html": [
+ "8c14770034a782f0f557a4b282d6155fbc47a7ce",
[]
],
"text-box-trim-float-start-001-ref.html": [
- "1b1941c96f15a76a8a6d38b17ac31e4e60fa94dc",
+ "9032be6178e3b2c1d5c44dae48ebd1122de9ba84",
[]
],
"text-box-trim-half-leading-block-box-001-ref.html": [
- "fac58768281ca90a877bb524253bdda5f4cd848f",
+ "4aaf3375abbdfcd9c79738d63285486011e2ffcc",
[]
],
"text-box-trim-half-leading-block-box-002-ref.html": [
- "8c10a8037064a09d8a0c04357315ad8498e3a31d",
+ "c6b6f0e16bd5e678e11846fba3e30fe13eb35385",
+ []
+ ],
+ "text-box-trim-half-leading-block-box-003-ref.html": [
+ "176526e55b2586beb80693a48cabba0f5448f24a",
[]
],
"text-box-trim-height-001-ref.html": [
- "9bd12cb0bdf9669d21e13ecec857a3bc31010add",
+ "7564a8c1b789e376c9b5f1bc79435b70d95a4da8",
+ []
+ ],
+ "text-box-trim-height-002-ref.html": [
+ "61378327c75323b74d5d6454ae14a2fbf2d8044f",
[]
],
"text-box-trim-initial-letter-end-001-ref.html": [
- "f6f227e11d066f5bb036391dffd8a183a1acbe2c",
+ "9d12d38d572159cd1076c1bedd0c3bd60eef5487",
[]
],
"text-box-trim-initial-letter-start-001-ref.html": [
- "84a80e160c7ea0eb105a224bdfe5d8e3a491b954",
+ "7a3adc8b7e2082ab9c3fc3ef7abf2e4cb3996cc7",
[]
],
"text-box-trim-line-clamp-001-ref.html": [
- "e8d6ba60b18ef9efc24e11560114f1525aed9a11",
+ "31b11cb6843a36361cbb95e96e9401d43b82763e",
[]
],
"text-box-trim-multicol-001-ref.html": [
@@ -413000,19 +413864,19 @@
[]
],
"text-box-trim-ruby-start-001-ref.html": [
- "dc1115d3bf8e42b47561d9a139aff77aa97671bb",
+ "8abe7616ec4d2935fca8f37e3ab61e9b489597cc",
[]
],
"text-box-trim-start-001-ref.html": [
- "40067cc592504c4622ded772b545a3e3a29e57dd",
+ "a03255c46b61a7d963bbdfbda750fd252d9a234b",
[]
],
"text-box-trim-tall-line-001-ref.html": [
"dc0d31e2f60533e6880ef8ee3e21ec4425ed2926",
[]
],
- "text-box-trim-text-emphasis-start-001-ref.html": [
- "96e0c5a32083082422335f53d67d2fefec3c156a",
+ "text-box-trim-text-emphasis-001-ref.html": [
+ "f34c29f491a5b072a4b1ef6b5abd3070adb1d240",
[]
]
}
@@ -414535,6 +415399,12 @@
]
}
},
+ "css-masonry": {
+ "WEB_FEATURES.yml": [
+ "30261400cebef7dec6e367919ed9f7c7421885a3",
+ []
+ ]
+ },
"css-multicol": {
"META.yml": [
"cc95000ec53ea8daef06251ad5a9f20c5b06a281",
@@ -415710,6 +416580,10 @@
"01ed862e0a27147bf6be4b2c88e81f897b6ce34a",
[]
],
+ "line-clamp-028-ref.html": [
+ "21ec61f5c77f2791c34b220b48ffd4b1f07e58f5",
+ []
+ ],
"line-clamp-auto-002-ref.html": [
"fe0a8dbd588a8a56c8ac0488713a061ef83474f9",
[]
@@ -415778,6 +416652,18 @@
"8fae3b278c124db00b8f79eb0cd0b91cb8752217",
[]
],
+ "line-clamp-auto-with-ruby-001-ref.html": [
+ "03d12b9c722c8c160830cc01997baa3ee4cf88c3",
+ []
+ ],
+ "line-clamp-auto-with-ruby-003-ref.html": [
+ "0b6a569dc8eb2b3faa3ccd3a1fb80a014b853f61",
+ []
+ ],
+ "line-clamp-auto-with-ruby-005-ref.html": [
+ "dca5f1b120cdb930680f2228156cb3a901d7da42",
+ []
+ ],
"line-clamp-with-abspos-001-ref.html": [
"d756162dde0c54bd52646597b01bbff8a80f5fd8",
[]
@@ -419388,6 +420274,10 @@
"045619823547041d72b8b6349ac67945c7540bb6",
[]
],
+ "scrollbar-gutter-scroll-into-view-ref.html": [
+ "72cadd8eab58601e7500359de14eee579613e82b",
+ []
+ ],
"scrollbar-width-paint-001-mis-ref.html": [
"5f7d95bc6f567b2737dc9b810d1a9e7bd2a5a908",
[]
@@ -425900,6 +426790,18 @@
"b19d776410cd1ea443a912974bcfdf671a7269fc",
[]
],
+ "text-emphasis-punctuation-1-ref.html": [
+ "8d77455c4dbb64a8af342a102f7cedff74490186",
+ []
+ ],
+ "text-emphasis-punctuation-2-ref.html": [
+ "503e999788c55edf915b1e54ed8627fd22f39c41",
+ []
+ ],
+ "text-emphasis-punctuation-3-ref.html": [
+ "f73638a1ea612873a8683d8b02bb15b7ccb3ffcc",
+ []
+ ],
"text-emphasis-ruby-001-ref.html": [
"6b1d6bd2f0e11f74b0065f39ef4ad0a73a434755",
[]
@@ -430357,7 +431259,7 @@
],
"resources": {
"compute-common.css": [
- "762300d04fab146403f438fc6fdd3ad72351d9f8",
+ "20337ccce5f3387e7e70e6fb219544369b74aa06",
[]
],
"compute-test.js": [
@@ -430713,7 +431615,7 @@
[]
],
"view-transition-types-matches-ref.html": [
- "80b1c6a1000fbc5f0bc06ec78b9523a6722c8b37",
+ "7f697364c29f30dc18f0a94310a58fc43a409ea1",
[]
],
"view-transition-types-one-green-square-ref.html": [
@@ -430721,7 +431623,7 @@
[]
],
"view-transition-types-reserved-ref.html": [
- "9195d0811477c7cfe74f83d66901e926a505a5df",
+ "774500481fe9c5108d7c54066ebf34b404a47072",
[]
],
"web-animations-api-ref.html": [
@@ -435824,6 +436726,10 @@
"703cc99bb863b7a1bb79dd6a7a218308892c66ca",
[]
],
+ "user-invalid-form-submission-invalidation-ref.html": [
+ "1d1933b827a7d9b37543c4a7f29241d40d9243bd",
+ []
+ ],
"visited-inheritance-ref.html": [
"64300b13f4291f416eac17f70ff62e2febf604fe",
[]
@@ -449815,7 +450721,7 @@
[]
],
"utils.js": [
- "8a9a537e96df89a2944d62dcc2915b8a51796fd5",
+ "944ef86d8ff71b46d431856fa2017119a61bf2a4",
[]
]
}
@@ -456223,7 +457129,25 @@
"meter-min-rendering-ref.html": [
"f253945968e49902d1f2c2d60d9d8cd230166c6b",
[]
- ]
+ ],
+ "reference": {
+ "meter-appearance-auto-even-less-good-value-rendering.html": [
+ "854ec5d5e750d84b5fcf29e74be482e986e9cce2",
+ []
+ ],
+ "meter-appearance-auto-optimum-value-rendering.html": [
+ "4b0b819f95b6324cdf9114f34db95dc348da6388",
+ []
+ ],
+ "meter-appearance-auto-rendering-ref.html": [
+ "44e80ae81506a27b26899964165cfa6809fadec6",
+ []
+ ],
+ "meter-appearance-auto-suboptimum-value-rendering-ref.html": [
+ "bbffd4cf3aca01f67d5fc2c07360117fff04ad89",
+ []
+ ]
+ }
},
"the-option-element": {
"dynamic-content-change-rendering-ref.html": [
@@ -456286,6 +457210,10 @@
"select-option-images-ref.html": [
"814e01f8d8f8373ca776e679d37ba4e77619f984",
[]
+ ],
+ "select-size-multiple-new-content-ref.html": [
+ "dccff7311d1c8c425ca4a199c5fb1e4ed6181a6e",
+ []
]
}
},
@@ -461510,7 +462438,7 @@
"webdriver": {
"bidi": {
"subscription.html.ini": [
- "c357f765ab9c54e35c2df824b84dfad3c3c3f2c6",
+ "7c3127d167a740cde300cc36786532484e0c3d25",
[]
]
},
@@ -465648,7 +466576,7 @@
},
"mimesniff": {
"META.yml": [
- "fd41c87fad8ebd7d86c6f5d8be47eaa61953a777",
+ "739628b80458dd0b869a2a62165df7b60ebc3e81",
[]
],
"README.md": [
@@ -466596,6 +467524,42 @@
[]
]
},
+ "partitioned-popins": {
+ "META.yml": [
+ "b9d43340c8af62e294a2ecd89ccaa870f51405d9",
+ []
+ ],
+ "resources": {
+ "get_cookies.py": [
+ "78c3f0c2433400d1765eee3ffa14af4ead511ccd",
+ []
+ ],
+ "partitioned-popins.cookies-iframe.html": [
+ "43ef731278e0ceb83a41615b9783d2112dbe3c48",
+ []
+ ],
+ "partitioned-popins.cookies-popin.py": [
+ "db48e781b9419bd73f602286d78d06a81895b4fa",
+ []
+ ],
+ "partitioned-popins.cookies-window.html": [
+ "66880c3255d51299f64585f6cdd06f1a6128a246",
+ []
+ ],
+ "partitioned-popins.localStorage-iframe.html": [
+ "d2833c71852c42ccbe65b7173661b7cf16b455ec",
+ []
+ ],
+ "partitioned-popins.localStorage-popin.html": [
+ "87a6ab95fa26d92e870a8c886139850c7a2ae1af",
+ []
+ ],
+ "partitioned-popins.localStorage-window.html": [
+ "1d5106e05092f6d7230430bb0f081b0e56af5a51",
+ []
+ ]
+ }
+ },
"payment-handler": {
"META.yml": [
"eff7624d054f6fbc6feac2aa106d166587f0b3eb",
@@ -474123,6 +475087,14 @@
[]
]
},
+ "reference-target": {
+ "tentative": {
+ "README.md": [
+ "5c43d245d8a9474f7af4e75ebce9a0a54543cfb0",
+ []
+ ]
+ }
+ },
"resources": {
"Document-prototype-currentScript-helper.js": [
"c25693cdb9ce5a030b106a3b061e3665f02c2d60",
@@ -488591,7 +489563,7 @@
[]
],
"executorchrome.py": [
- "153e2cb72c14c0ead2f5382ad2e5b4f33efffb31",
+ "d972a0eea5f3ff021c16d262764730b5400cf9ee",
[]
],
"executoredge.py": [
@@ -490148,11 +491120,11 @@
},
"url": {
"META.yml": [
- "094b266b64b61b97966f2fa88d78dfdf5a00b573",
+ "415bd0f094c6b9f3348e0320e2644bf94f98fadd",
[]
],
"README.md": [
- "9b48384756847a2f9bd04105b26aef81063fe9cf",
+ "50227bc4b330ef8790eb8d6a2b0af15c2e08123e",
[]
],
"WEB_FEATURES.yml": [
@@ -490764,7 +491736,7 @@
"animation-model": {
"animation-types": {
"property-list.js": [
- "2e5e876204be276ea6df70e92b960d94695be84b",
+ "ee791e884c57a4b9bf95359da174c1f675c1b21d",
[]
],
"property-types.js": [
@@ -493397,7 +494369,7 @@
[]
],
"utils_validation.js": [
- "da5786ca86bb52adb2c3d82c20c935de4d4a32b8",
+ "856eea6cb3fc16f1e9316e795d4ad8485d2871b3",
[]
]
}
@@ -493537,6 +494509,22 @@
"cc9dee42ac98211bee90b51bd9dc129122d549fd",
[]
],
+ "RTCRtpScriptTransform-encoded-transform-drop-frames-worker.js": [
+ "617dd47f97d32f94a548cc4b1c1e65625a066c24",
+ []
+ ],
+ "RTCRtpScriptTransform-encoded-transform-no-write-worker.js": [
+ "b98b857ad1c05f6b3b3ed9346d48f4f068799be4",
+ []
+ ],
+ "RTCRtpScriptTransform-encoded-transform-worker.js": [
+ "3faafd26673819ca0850f26d9793a056f8cc2d2f",
+ []
+ ],
+ "RTCRtpScriptTransform-sender-worker-single-frame.js": [
+ "06fa607635a68aa0e866cbb83b47dc0b0ddf6f86",
+ []
+ ],
"helper.js": [
"d4cec39ffce0f58b76da653c78dc384f22ffa43d",
[]
@@ -499248,7 +500236,7 @@
]
],
"back-forward-cache-open-connection.window.js": [
- "db51daa121c0b3f9271ce2439a6c545870d0b99e",
+ "d3355f2a733ee213f11c4368b1f027b97b19e37a",
[
"IndexedDB/back-forward-cache-open-connection.window.html",
{
@@ -499287,7 +500275,7 @@
]
],
"back-forward-cache-open-transaction.window.js": [
- "50d3c1f0d121d75604deb12433b28525679aa64f",
+ "fca9cb2fb7895d4f363150af8bf64269023ba3ce",
[
"IndexedDB/back-forward-cache-open-transaction.window.html",
{
@@ -500508,39 +501496,83 @@
}
]
],
- "idbcursor_delete_objectstore.htm": [
- "f79206295a6a7b01ed028c877a17d94ba6cbe0be",
+ "idbcursor_delete_objectstore.any.js": [
+ "0aad5dcfb7737808f3f00219f5fc5612d9e25e4d",
[
- null,
- {}
- ]
- ],
- "idbcursor_delete_objectstore2.htm": [
- "ef3c1e57a250767f90f7301a1b0ca1332639dee2",
- [
- null,
- {}
- ]
- ],
- "idbcursor_delete_objectstore3.htm": [
- "4a4ea736c41077d5fc4ed1ab86c4e80be67d5fec",
+ "IndexedDB/idbcursor_delete_objectstore.any.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "title",
+ "IDBCursor.delete() - object store"
+ ],
+ [
+ "script",
+ "resources/support.js"
+ ]
+ ]
+ }
+ ],
[
- null,
- {}
- ]
- ],
- "idbcursor_delete_objectstore4.htm": [
- "5ecdb4bf1790b8e7ec19548012b8f1e652948c4a",
+ "IndexedDB/idbcursor_delete_objectstore.any.serviceworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "title",
+ "IDBCursor.delete() - object store"
+ ],
+ [
+ "script",
+ "resources/support.js"
+ ]
+ ]
+ }
+ ],
[
- null,
- {}
- ]
- ],
- "idbcursor_delete_objectstore5.htm": [
- "e17ade88f5769c7b1f810a16f8273cb36297cc9f",
+ "IndexedDB/idbcursor_delete_objectstore.any.sharedworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "title",
+ "IDBCursor.delete() - object store"
+ ],
+ [
+ "script",
+ "resources/support.js"
+ ]
+ ]
+ }
+ ],
[
- null,
- {}
+ "IndexedDB/idbcursor_delete_objectstore.any.worker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "title",
+ "IDBCursor.delete() - object store"
+ ],
+ [
+ "script",
+ "resources/support.js"
+ ]
+ ]
+ }
]
],
"idbcursor_iterating.htm": [
@@ -502169,32 +503201,83 @@
}
]
],
- "idbobjectstore_count.htm": [
- "6466d580416d3e3dcbe89a9db6825121995f33e4",
+ "idbobjectstore_count.any.js": [
+ "c28ba5caf8188a87858f8cf4741dc67f16eb95a7",
[
- null,
- {}
- ]
- ],
- "idbobjectstore_count2.htm": [
- "6152eaf76e3f536f008b466c921aead78c32e31c",
+ "IndexedDB/idbobjectstore_count.any.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "title",
+ "IDBObjectStore.count()"
+ ],
+ [
+ "script",
+ "resources/support.js"
+ ]
+ ]
+ }
+ ],
[
- null,
- {}
- ]
- ],
- "idbobjectstore_count3.htm": [
- "3d5fd17a2267948d5c7d647361bad35deb552b35",
+ "IndexedDB/idbobjectstore_count.any.serviceworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "title",
+ "IDBObjectStore.count()"
+ ],
+ [
+ "script",
+ "resources/support.js"
+ ]
+ ]
+ }
+ ],
[
- null,
- {}
- ]
- ],
- "idbobjectstore_count4.htm": [
- "c328a91e33c193850973661b24e0a1393199d8bd",
+ "IndexedDB/idbobjectstore_count.any.sharedworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "title",
+ "IDBObjectStore.count()"
+ ],
+ [
+ "script",
+ "resources/support.js"
+ ]
+ ]
+ }
+ ],
[
- null,
- {}
+ "IndexedDB/idbobjectstore_count.any.worker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "title",
+ "IDBObjectStore.count()"
+ ],
+ [
+ "script",
+ "resources/support.js"
+ ]
+ ]
+ }
]
],
"idbobjectstore_createIndex.any.js": [
@@ -512844,7 +513927,7 @@
]
],
"comp_name_from_content.html": [
- "e14c153f71db45b7cfe81ac7ef6686107c64027f",
+ "32a9a7b3c43b0f25fc09045c1a630a71c784b265",
[
null,
{
@@ -512853,7 +513936,7 @@
]
],
"comp_name_from_content.tentative.html": [
- "bcaf8db7471e3441f684e21725c3dd9a7a02dadf",
+ "d069652bba78b7e3c4379d218b375d42deccf860",
[
null,
{
@@ -525133,15 +526216,6 @@
}
},
"console": {
- "console-count-logging.html": [
- "4cdd607b7f2242652502c1f4123e7d161d95b179",
- [
- null,
- {
- "testdriver": true
- }
- ]
- ],
"console-is-a-namespace.any.js": [
"1756ba6bc1b27d6b9398b4ce078a891b4a4540f5",
[
@@ -535297,6 +536371,139 @@
null,
{}
]
+ ],
+ "justify-self-block-in-inline.html": [
+ "3a326016bc15914958600156c3a72b5bb77e41b8",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-htb-ltr-htb.html": [
+ "6a285d84203bb72803e5400a4456bffb778b6045",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-htb-ltr-vlr.html": [
+ "b77e7e900136381b2d5594e63567ac94a5223e07",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-htb-ltr-vrl.html": [
+ "e8404b3e658ed86914968370f33c2f5ac377577b",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-htb-rtl-htb.html": [
+ "2c7c46b4f40514ea9563253b98942b263b419133",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-htb-rtl-vlr.html": [
+ "cedc61e9bd94cdc82ea431e237a1ac1d6229beee",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-htb-rtl-vrl.html": [
+ "7da8c4170e8332c21b92697f3916acca35bfb62f",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-vlr-ltr-htb.html": [
+ "be5716b19a2315cbfeb4c27a613af4c98d544c45",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-vlr-ltr-vlr.html": [
+ "69e96ba4e90dc8697f88c989faecb28a679ddba8",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-vlr-ltr-vrl.html": [
+ "9c02b0f11303b7b6989d6312af11d9cf463ddabf",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-vlr-rtl-htb.html": [
+ "fcd1a8124a27d35f764d061c08e48510bcbda0d0",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-vlr-rtl-vlr.html": [
+ "480107d2f84aa8d938c4d62e89d24aed4732fc8f",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-vlr-rtl-vrl.html": [
+ "ecd7bc958b4c68b6f7b5367c0fc7c5e1c475ec99",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-vrl-ltr-htb.html": [
+ "167c813a54c1e2695d24514c31dfa7d05949458f",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-vrl-ltr-vlr.html": [
+ "cc303dda455f0025630bc67d1add472ec062ab47",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-vrl-ltr-vrl.html": [
+ "4ffc861a2879f8d89035dcaf0cb4cdbf935916d1",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-vrl-rtl-htb.html": [
+ "276b3bb1fd4ba785c2f62059468399675f4ec77e",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-vrl-rtl-vlr.html": [
+ "9f923772a56d4fae5553068e3dca8a57bc02d50e",
+ [
+ null,
+ {}
+ ]
+ ],
+ "justify-self-vrl-rtl-vrl.html": [
+ "7131bc30db9c1ebbe5f3a9a30a1a95eb8491e22e",
+ [
+ null,
+ {}
+ ]
]
},
"content-distribution": {
@@ -540910,6 +542117,13 @@
{}
]
],
+ "color-invalid-color-layers-function.html": [
+ "2f8879c4eade3ee89f593318444ed38bd0498a3b",
+ [
+ null,
+ {}
+ ]
+ ],
"color-invalid-color-mix-function.html": [
"2f815f814007e6035dd2616e152722ad5343bda3",
[
@@ -540987,6 +542201,13 @@
{}
]
],
+ "color-valid-color-layers-function.html": [
+ "3d579983d43774491c046723f6f60289f172e254",
+ [
+ null,
+ {}
+ ]
+ ],
"color-valid-color-mix-function.html": [
"1f7c7728ab5b48d30b02e48fb9f318f9b5c5b8ba",
[
@@ -551156,43 +552377,87 @@
]
},
"text-box-trim": {
- "inheritance.html": [
- "a37a40e976da17c1fb7f7326d91141db434bcf59",
- [
- null,
- {}
- ]
- ],
- "text-box-edge-computed.html": [
- "50a963297ce430fd0b6c81db1f76e73a3c8aa36e",
- [
- null,
- {}
- ]
- ],
- "text-box-edge-invalid.html": [
- "401f8c61a39346a1438eefafc2d811fc87ca32b3",
- [
- null,
- {}
- ]
- ],
- "text-box-edge-valid.html": [
- "36f37715b9947b8195de1f036e880d8a96d30bfa",
- [
- null,
- {}
+ "parsing": {
+ "inheritance.html": [
+ "4cfb7f4164305f1ec2e64fd449cdf417f0164d8d",
+ [
+ null,
+ {}
+ ]
+ ],
+ "text-box-computed.html": [
+ "406a1639f789500c1b5ef854d499cf9c50fa34bb",
+ [
+ null,
+ {}
+ ]
+ ],
+ "text-box-edge-computed.html": [
+ "b5b6f0c5cf737d0bdc3fc7b1b8ced1ec2a759f62",
+ [
+ null,
+ {}
+ ]
+ ],
+ "text-box-edge-invalid.html": [
+ "0c1e2d19a3b7cb416a9b32a4aa336564cc2e39f6",
+ [
+ null,
+ {}
+ ]
+ ],
+ "text-box-edge-valid.html": [
+ "27917c02922a2ad171f6edf740482d04d52b7599",
+ [
+ null,
+ {}
+ ]
+ ],
+ "text-box-invalid.html": [
+ "b874c3148fe260620cb5610f5eeee42272fa98fe",
+ [
+ null,
+ {}
+ ]
+ ],
+ "text-box-shorthand.html": [
+ "46c05163c3b131feff6a2a76368a9955f08c62c5",
+ [
+ null,
+ {}
+ ]
+ ],
+ "text-box-trim-computed.html": [
+ "dbc30fede26003ffe25665b7885ebff07712371e",
+ [
+ null,
+ {}
+ ]
+ ],
+ "text-box-trim-invalid.html": [
+ "d0bc05459eea8f8907540c84f2e0f37484127339",
+ [
+ null,
+ {}
+ ]
+ ],
+ "text-box-trim-valid.html": [
+ "0f93b3f36de8d97cad897309c470717dba189d9f",
+ [
+ null,
+ {}
+ ]
+ ],
+ "text-box-valid.html": [
+ "67894ca71f94967e6c235df54441adfd0e4dd4f2",
+ [
+ null,
+ {}
+ ]
]
- ],
+ },
"text-box-trim-om-001.html": [
- "da66de0055546ef7e8a71bc115ffd170bc53f061",
- [
- null,
- {}
- ]
- ],
- "text-box-trim-valid.html": [
- "61622774f6f33054ad97e74dde0b020619eb1d02",
+ "4184dcb638883a948b91b5800e32a2bc0bb6272e",
[
null,
{}
@@ -552469,6 +553734,47 @@
]
}
},
+ "css-masonry": {
+ "tentative": {
+ "parsing": {
+ "masonry-template-tracks-invalid.html": [
+ "df690851b1456a9b41be1b82295c7c8ea0c25a57",
+ [
+ null,
+ {}
+ ]
+ ],
+ "masonry-template-tracks-valid.html": [
+ "7397760e7beee1e2ee5d152268242139244549b9",
+ [
+ null,
+ {}
+ ]
+ ],
+ "masonry-track-computed.html": [
+ "a2d6e54dcce53415b17fa47ae8adbda80bef16de",
+ [
+ null,
+ {}
+ ]
+ ],
+ "masonry-track-invalid.html": [
+ "589b837ce685723a4a42763a6ad08f66580463d0",
+ [
+ null,
+ {}
+ ]
+ ],
+ "masonry-track-valid.html": [
+ "edf94c285f374a2c4e293f25f65f33f1a7f51162",
+ [
+ null,
+ {}
+ ]
+ ]
+ }
+ }
+ },
"css-multicol": {
"animation": {
"column-count-interpolation.html": [
@@ -557659,8 +558965,15 @@
{}
]
],
+ "grouping-with-checked.html": [
+ "e7620b6f932b8d145dea9917784d35018f373491",
+ [
+ null,
+ {}
+ ]
+ ],
"grouping-with-disabled.html": [
- "187b40ba3b50ec9df0a91fde5ce79e80e0b3f002",
+ "8e479e66911b708190937ce36a846b904cdb4f79",
[
null,
{}
@@ -568070,7 +569383,7 @@
]
},
"attr-all-types.html": [
- "4e9dd9a6bd99395b60d546f2ae01b4cd80e56346",
+ "9418ed0865d1d04b638ea9c6011355295410c955",
[
null,
{}
@@ -568261,7 +569574,7 @@
"calc-size": {
"animation": {
"calc-size-height-interpolation.html": [
- "b37b57bf26dea390448746d20e92ba66b4ccc920",
+ "2126bd8faed1c263c0d3d4132f2c61664bf4fbb3",
[
null,
{
@@ -568270,7 +569583,7 @@
]
],
"calc-size-interpolation-expansion.html": [
- "b761cb0466168474f2cb1e60af578ae4e45fa5a9",
+ "354d108f1daa5a020aa4499933bf1d965dd6573b",
[
null,
{}
@@ -568413,14 +569726,14 @@
]
],
"calc-size-height.html": [
- "f2232943bd31b207a650e29e5e228487ffe381a5",
+ "540280c872a6c99063a14bed87d8208677e54382",
[
null,
{}
]
],
"calc-size-parsing.html": [
- "0cc34923dd3df9ba534a2e121c44da5bb8629c28",
+ "6db2635e5ef7a841c84ba1ccf379bddb12192da7",
[
null,
{}
@@ -572911,6 +574224,20 @@
{}
]
],
+ "scrollWidthHeight-negative-margin-001.html": [
+ "057854d98e7e66fadce236edac44ec099a05a8af",
+ [
+ null,
+ {}
+ ]
+ ],
+ "scrollWidthHeight-negative-margin-002.html": [
+ "cd5964f5c1aa421f63921d8e414c6ed18fef546d",
+ [
+ null,
+ {}
+ ]
+ ],
"scrollWidthHeight.xht": [
"18930517670c20e2a68b5d6f20a320b60c9eaf83",
[
@@ -576905,6 +578232,13 @@
{}
]
],
+ "upgrade-custom-element-error-event.html": [
+ "4803443644e6a443f76ec888060b3465270b8d00",
+ [
+ null,
+ {}
+ ]
+ ],
"upgrading-enqueue-reactions.html": [
"8238eee624afee25f19356b4de244713b5047038",
[
@@ -577135,6 +578469,13 @@
]
},
"digital-credentials": {
+ "digital-credentials-static-methods.tentative.https.html": [
+ "5e00861124fd1755f90f4107824c4f3aae3bf5b0",
+ [
+ null,
+ {}
+ ]
+ ],
"identity-get.tentative.https.html": [
"15597ed594a2409dbdcf6a10fee21d145833fa76",
[
@@ -577794,6 +579135,13 @@
{}
]
],
+ "Event-dispatch-throwing-multiple-globals.html": [
+ "a56fdf6af865812e387fc36c4fba94e6118b335a",
+ [
+ null,
+ {}
+ ]
+ ],
"Event-dispatch-throwing.html": [
"7d1c0d94a0845b5351c50f5255bcff381cee17a6",
[
@@ -578857,6 +580205,93 @@
null,
{}
]
+ ],
+ "wheel-event-transactions-basic.html": [
+ "1b9df69ec77f883685166ef7963b0c8a1911fd73",
+ [
+ "dom/events/scrolling/wheel-event-transactions-basic.html?include=scroll-over-scrollable-child",
+ {
+ "testdriver": true
+ }
+ ],
+ [
+ "dom/events/scrolling/wheel-event-transactions-basic.html?include=target-basic",
+ {
+ "testdriver": true
+ }
+ ],
+ [
+ "dom/events/scrolling/wheel-event-transactions-basic.html?include=transaction-not-bound-to-scroll-frame",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "wheel-event-transactions-multiple-action-chains.html": [
+ "3b46b2f99a9c994864e53b9ea0d5fa9cbc9921a4",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "wheel-event-transactions-target-display-change.html": [
+ "6ca3c78b74cefe8b82735d32d9aee2688f10f208",
+ [
+ "dom/events/scrolling/wheel-event-transactions-target-display-change.html?include=contents",
+ {
+ "testdriver": true
+ }
+ ],
+ [
+ "dom/events/scrolling/wheel-event-transactions-target-display-change.html?include=none",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "wheel-event-transactions-target-elements.html": [
+ "0109b7b6b18b92404868b20c89cc69d8ee142985",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "wheel-event-transactions-target-move.html": [
+ "a739d1cd5479ad5c414ff7bb2169911678bea8e1",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "wheel-event-transactions-target-removal.html": [
+ "f81efd22e22b92d732a785146b8d37de44f744b4",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "wheel-event-transactions-target-resize.html": [
+ "eb7431fca475db37f0ff217f37c132f5b1c251f2",
+ [
+ "dom/events/scrolling/wheel-event-transactions-target-resize.html?include=passive-false",
+ {
+ "testdriver": true
+ }
+ ],
+ [
+ "dom/events/scrolling/wheel-event-transactions-target-resize.html?include=passive-true",
+ {
+ "testdriver": true
+ }
+ ]
]
},
"shadow-relatedTarget.html": [
@@ -581009,12 +582444,30 @@
}
]
],
+ "pointer-events.html": [
+ "a5d34fe40051d934a0b2792b8b7a3c9132cdf5c5",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"popover-preserve.html": [
"5487bd4aec51e37eb0fb54e3e63d8a510b0f923c",
[
null,
{}
]
+ ],
+ "selection-preserve.html": [
+ "04b81c9a0563894c68ad498b49352e7de9e01049",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
]
}
},
@@ -581082,7 +582535,7 @@
]
],
"observable-constructor.window.js": [
- "d2b597c819054f2b4c186d24f1e908bf5d46d2a2",
+ "878fc456c102873b0985fbfb9b34a98ce9ed6438",
[
"dom/observable/tentative/observable-constructor.window.html",
{}
@@ -581100,7 +582553,7 @@
]
],
"observable-event-target.any.js": [
- "0f7ace2acc0794a96dae575f33a23a47cb287d8b",
+ "9f5d5541a039c4dce5ebdebc8b9b17c3a130c61f",
[
"dom/observable/tentative/observable-event-target.any.html",
{}
@@ -581111,7 +582564,7 @@
]
],
"observable-event-target.window.js": [
- "77a137a3622e8dbbfb4c3f177f512c0cd509b509",
+ "fa3ae1d3b020e1f626e130fb62dbd9ff820c526e",
[
"dom/observable/tentative/observable-event-target.window.html",
{}
@@ -581191,7 +582644,7 @@
]
],
"observable-from.any.js": [
- "80408ddced7ef5dd6c81855e6d26f0326d413226",
+ "900362d8c3aceef35596815999caae5eb6123bf9",
[
"dom/observable/tentative/observable-from.any.html",
{}
@@ -581202,7 +582655,7 @@
]
],
"observable-inspect.any.js": [
- "8aff741d2670db26a7a355fdd747e70082479a43",
+ "2b67dd9f3d3a830028643cc1bce4e881b687fc16",
[
"dom/observable/tentative/observable-inspect.any.html",
{}
@@ -581529,13 +582982,6 @@
}
]
],
- "Range-isPointInRange-shadowdom.tentative.html": [
- "e6768693ff1c5f4ba4204337822e9f49a4208526",
- [
- null,
- {}
- ]
- ],
"Range-isPointInRange.html": [
"80db97e844cafc49d83aeca3f12134e9db0cd15f",
[
@@ -585317,6 +586763,15 @@
{}
]
],
+ "no-beforeinput-when-no-selection.html": [
+ "098a95863a606393502d4e2fc517fcb8ad144d35",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"non-html-document.html": [
"ffd2e6f59464c56fac6694856978192ed03a199c",
[
@@ -586425,7 +587880,7 @@
]
],
"undo-redo.html": [
- "391349eeef464c2324025f120a9876515bb5ca7d",
+ "0cb20754d7188065f37eccd91761d76cae68db38",
[
null,
{
@@ -602595,7 +604050,7 @@
]
],
"notify-event-prevent-caching.https.html": [
- "ad2d01151313a09446a563bac91359f73f0b62c9",
+ "a3824aa411052c9e182a9ca4f5543a3e3d8a6e6e",
[
null,
{
@@ -674581,6 +676036,13 @@
{}
]
],
+ "iframe-loading-lazy-adopt-lazy-iframe-from-script-disabled-document.html": [
+ "724e8c1708d9dfc717b0287566f97cbaf0d07493",
+ [
+ null,
+ {}
+ ]
+ ],
"iframe-loading-lazy-base-url-2.html": [
"8782f3d315e47b2937f3e09154f63f1f7eb0cfbf",
[
@@ -676916,6 +678378,13 @@
null,
{}
]
+ ],
+ "not-broken-while-load-task-scheduled.html": [
+ "82b860a4700cbbf3c4ed78e2eb5abd6896c4f709",
+ [
+ null,
+ {}
+ ]
]
},
"update-the-source-set.html": [
@@ -678971,11 +680440,12 @@
]
],
"control-active-with-multiple-clicks.html": [
- "1b5c6a3b9398bb708a8445c579b3bf95140760a5",
+ "a14249ee8162d4e779be7bf1c4932e7a1efecb5e",
[
null,
{
- "testdriver": true
+ "testdriver": true,
+ "timeout": "long"
}
]
],
@@ -679409,8 +680879,26 @@
}
]
],
+ "select-disabled.tentative.html": [
+ "60530b417d59bd0891f820e76b31d1992cbecc3d",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "select-fallback-datalist-animations.tentative.html": [
+ "2fd4f99cd184aee6ed25b6ab4471860a57fd420f",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"select-keyboard-behavior.tentative.html": [
- "ff27aeb3a99ba150809d47fdf92a7bbd143a1701",
+ "54dba61af4c1a8cc46d971d0c4adac21a758966c",
[
null,
{
@@ -695728,6 +697216,13 @@
]
]
},
+ "background-image-set-image.html": [
+ "4dbb97c7f5eb918ef33ffa8f6a8bba1de779cc54",
+ [
+ null,
+ {}
+ ]
+ ],
"broken-image-icon.html": [
"be27e34e6ac9274276b26f239e7f69a168d2e849",
[
@@ -697753,7 +699248,7 @@
]
],
"loaf-source-location-redirect.html": [
- "c0bb96b1ec5bd982c0266d2c0da26060e2ccc2e5",
+ "6a2068523c3993c168c3a457a8de3faef18cd50b",
[
null,
{
@@ -700502,7 +701997,7 @@
},
"mediacapture-extensions": {
"GUM-backgroundBlur.https.html": [
- "5383e088a62abc8e9f5abbbf0f941c3d460a30c6",
+ "4fba3692f6a61030ed537e2ff6bd49e8901d2bab",
[
null,
{}
@@ -708508,6 +710003,44 @@
]
]
},
+ "partitioned-popins": {
+ "partitioned-popins.cookies.tentative.sub.https.window.js": [
+ "d98e08a73969610e9eb3fbd878b2624c42520593",
+ [
+ "partitioned-popins/partitioned-popins.cookies.tentative.sub.https.window.html",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "/resources/testdriver.js"
+ ],
+ [
+ "script",
+ "/resources/testdriver-vendor.js"
+ ]
+ ]
+ }
+ ]
+ ],
+ "partitioned-popins.localStorage.tentative.sub.https.window.js": [
+ "d8444604c9eb1d52da7111a33c9b009641b3d534",
+ [
+ "partitioned-popins/partitioned-popins.localStorage.tentative.sub.https.window.html",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "/resources/testdriver.js"
+ ],
+ [
+ "script",
+ "/resources/testdriver-vendor.js"
+ ]
+ ]
+ }
+ ]
+ ]
+ },
"payment-handler": {
"can-make-payment-event-constructor.https.html": [
"6892f01aa95c805b04446e1eb0a867bb060761be",
@@ -727573,6 +729106,13 @@
}
]
],
+ "internal-resources-not-counted.html": [
+ "a746e2adfa32bee823a9b9607a73e68c0665e84f",
+ [
+ null,
+ {}
+ ]
+ ],
"link-sequence-of-events.html": [
"be9db32cd92968a210f54a26ae14b6e93a8e836c",
[
@@ -732193,13 +733733,43 @@
]
],
"shadow-dom": {
- "select-later-become-slotted-content.tentative.html": [
- "d44930479d4d7c1aee1de804c66865e9aefd8afe",
- [
- null,
- {}
+ "tentative": {
+ "Range-isPointInRange.html": [
+ "e6768693ff1c5f4ba4204337822e9f49a4208526",
+ [
+ null,
+ {}
+ ]
+ ],
+ "Selection-collapse-and-extend.html": [
+ "3d0bc5009d5ff06043a17364d06061f2c17ae375",
+ [
+ null,
+ {}
+ ]
+ ],
+ "Selection-getComposedRanges-collapsed.html": [
+ "99ab82eb39cf44ac19cc32b42bd50eb1eef1b93a",
+ [
+ null,
+ {}
+ ]
+ ],
+ "Selection-getComposedRanges.html": [
+ "a69188a62ee9210cc53138f6c29d901b75f1bac6",
+ [
+ null,
+ {}
+ ]
+ ],
+ "Selection-later-become-slotted-content.html": [
+ "d44930479d4d7c1aee1de804c66865e9aefd8afe",
+ [
+ null,
+ {}
+ ]
]
- ]
+ }
},
"stringifier.tentative.html": [
"f4cae7eb5d4bd2cce73db1dc1b1da6ce5f753cef",
@@ -736693,7 +738263,7 @@
]
],
"grid-order-with-display-contents.html": [
- "022ec3aa31ed2aaeefabf7627af8a787768bf5cd",
+ "b69f3d20799abdd562cff016818252818ceac8bc",
[
null,
{
@@ -736712,7 +738282,7 @@
]
],
"grid-order-with-nested-grids.html": [
- "5daabefd7ff6638fa49595406d8aadd8255ac90d",
+ "990dbac846b53e027501c2b3567c24c3be625612",
[
null,
{
@@ -736914,6 +738484,64 @@
{}
]
],
+ "reference-target": {
+ "tentative": {
+ "anchor.html": [
+ "d8c6f41460bd42b5ace34ee916e9e77c2df58490",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "aria-labelledby.html": [
+ "2ff154f97c6505ec3906b040cec70d73dc2b6fa4",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "label-descendant.html": [
+ "2b29efd648ab800b60cc1a9bd6ec2fb6f5500322",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "label-for.html": [
+ "06fab55abd293ae6aeba9a4d4150f82ccea9c5fc",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "popovertarget.html": [
+ "5b0619d4a67b4ddb304a7d94694045fab79a648b",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "property-reflection.html": [
+ "078eb28665d2114b22fa5f0fa2f0e75448415155",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ]
+ }
+ },
"scroll-to-the-fragment-in-shadow-tree.html": [
"b4ecc16a67daeb1160523e10cca057d0c9582d5c",
[
@@ -736921,13 +738549,6 @@
{}
]
],
- "selection-collapse-and-extend.tentative.html": [
- "3d0bc5009d5ff06043a17364d06061f2c17ae375",
- [
- null,
- {}
- ]
- ],
"selection-direction.tentative.html": [
"340711a8f0682d2736fa355efadab337189a6feb",
[
@@ -736937,20 +738558,6 @@
}
]
],
- "selection-getComposedRanges-collapsed.tentative.html": [
- "99ab82eb39cf44ac19cc32b42bd50eb1eef1b93a",
- [
- null,
- {}
- ]
- ],
- "selection-getComposedRanges.tentative.html": [
- "a69188a62ee9210cc53138f6c29d901b75f1bac6",
- [
- null,
- {}
- ]
- ],
"shadow-root-clonable.html": [
"a8d4a4ca5167549f89a1c154794befc5de706cd4",
[
@@ -776209,7 +777816,7 @@
]
],
"buffer.https.any.js": [
- "75992f5de85f36972285c1b37b62b0e3134261ee",
+ "31a33d9e70654d9c9a10baf7326e2bc86f015982",
[
"webnn/conformance_tests/buffer.https.any.html?cpu",
{
@@ -777133,7 +778740,7 @@
]
],
"clamp.https.any.js": [
- "5ccbe3b8e64b824ef26a96115e17b22188d8c9c6",
+ "115ddabc6d66d5161f547d16c94e54af5d32233d",
[
"webnn/conformance_tests/clamp.https.any.html?cpu",
{
@@ -781483,7 +783090,7 @@
]
],
"hard_sigmoid.https.any.js": [
- "a5c4d3d6dee97d0ec23b81ea094d87945023720c",
+ "4ab915958e1d044cd91b3c9e30aedc13bc0f43b2",
[
"webnn/conformance_tests/hard_sigmoid.https.any.html?cpu",
{
@@ -781702,7 +783309,7 @@
]
],
"hard_swish.https.any.js": [
- "5459e5662e4f982d07b230420427f2a9028c0ff8",
+ "480b696d77fad72f18771955c517b866160fa4e3",
[
"webnn/conformance_tests/hard_swish.https.any.html?cpu",
{
@@ -782578,7 +784185,7 @@
]
],
"leaky_relu.https.any.js": [
- "af4ac23e4444d2d654a04e062db602303e5e530c",
+ "f14489b1295a0722fc59642b329aa8756dd9c684",
[
"webnn/conformance_tests/leaky_relu.https.any.html?cpu",
{
@@ -783235,7 +784842,7 @@
]
],
"linear.https.any.js": [
- "1f092303d6a497b69d8bd3ff22b5dcbe158d6b0d",
+ "da4115bcfa62a0cf768382236efe04c55941446d",
[
"webnn/conformance_tests/linear.https.any.html?cpu",
{
@@ -783891,6 +785498,444 @@
}
]
],
+ "lstm.https.any.js": [
+ "8b6cf73715c5247bbdec8f215682244af438174d",
+ [
+ "webnn/conformance_tests/lstm.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test WebNN API lstm operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/conformance_tests/lstm.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test WebNN API lstm operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/conformance_tests/lstm.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test WebNN API lstm operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/conformance_tests/lstm.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test WebNN API lstm operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/conformance_tests/lstm.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test WebNN API lstm operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/conformance_tests/lstm.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test WebNN API lstm operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ]
+ ],
+ "lstm_cell.https.any.js": [
+ "9bc71a6224c937a04e2944f787ee9b2f17c4e02d",
+ [
+ "webnn/conformance_tests/lstm_cell.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test WebNN API lstmCell operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/conformance_tests/lstm_cell.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test WebNN API lstmCell operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/conformance_tests/lstm_cell.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test WebNN API lstmCell operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/conformance_tests/lstm_cell.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test WebNN API lstmCell operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/conformance_tests/lstm_cell.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test WebNN API lstmCell operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/conformance_tests/lstm_cell.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test WebNN API lstmCell operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ]
+ ],
"matmul.https.any.js": [
"58410a6046327f9f7741f57b5a6f82ed3be43d87",
[
@@ -785424,6 +787469,225 @@
}
]
],
+ "parallel-dispatch.https.any.js": [
+ "2ba1f6cf442bd0f6a36b135df7f8ed865ec98efe",
+ [
+ "webnn/conformance_tests/parallel-dispatch.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test parallel WebNN API dispatch calls"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/conformance_tests/parallel-dispatch.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test parallel WebNN API dispatch calls"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/conformance_tests/parallel-dispatch.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test parallel WebNN API dispatch calls"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/conformance_tests/parallel-dispatch.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test parallel WebNN API dispatch calls"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/conformance_tests/parallel-dispatch.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test parallel WebNN API dispatch calls"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/conformance_tests/parallel-dispatch.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "test parallel WebNN API dispatch calls"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ]
+ ],
"pooling.https.any.js": [
"9dfd6ba0ca4b4a2dbfd2448a947c9b13da4f00f6",
[
@@ -788491,7 +790755,7 @@
]
],
"relu.https.any.js": [
- "fb4726b4b3e9fcb19be7b50c11d5fbad9309fa39",
+ "45388383fffe1ec681fd581d7a717215d0921485",
[
"webnn/conformance_tests/relu.https.any.html?cpu",
{
@@ -789148,7 +791412,7 @@
]
],
"sigmoid.https.any.js": [
- "1aba9bbb10bcddb2a15488c1a89119e866473cc3",
+ "5bcdb39969c69231e964a7a5bee04203fa001322",
[
"webnn/conformance_tests/sigmoid.https.any.html?cpu",
{
@@ -790024,7 +792288,7 @@
]
],
"softplus.https.any.js": [
- "9c6698e6d05df4ce222aa627bbcaff6b15db270f",
+ "2b45700493edadf94acbfebcadae339f4dd5786f",
[
"webnn/conformance_tests/softplus.https.any.html?cpu",
{
@@ -790243,7 +792507,7 @@
]
],
"softsign.https.any.js": [
- "b146953bb6168460187e92f6efd2ec14f4f68d34",
+ "06560af48a5fb656c3eb8adbc2317e1da1a1573a",
[
"webnn/conformance_tests/softsign.https.any.html?cpu",
{
@@ -792275,9 +794539,9 @@
],
"validation_tests": {
"argMinMax.https.any.js": [
- "5d6806e5f4c41479a12ddb2b563e1220af684216",
+ "3d3f714871581f7e1f0814945a0032cbe6d98f93",
[
- "webnn/validation_tests/argMinMax.https.any.html",
+ "webnn/validation_tests/argMinMax.https.any.html?cpu",
{
"script_metadata": [
[
@@ -792289,6 +794553,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792296,7 +794572,7 @@
}
],
[
- "webnn/validation_tests/argMinMax.https.any.worker.html",
+ "webnn/validation_tests/argMinMax.https.any.html?gpu",
{
"script_metadata": [
[
@@ -792308,6 +794584,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/argMinMax.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API argMin/Max operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/argMinMax.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API argMin/Max operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/argMinMax.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API argMin/Max operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/argMinMax.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API argMin/Max operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792316,9 +794728,71 @@
]
],
"batchNormalization.https.any.js": [
- "2fec37dcbf513cbf2e018b8a68eee0432b6761be",
+ "6a884de3ee3301df229213a8c2be0821108fe458",
+ [
+ "webnn/validation_tests/batchNormalization.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API batchNormalization operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/batchNormalization.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API batchNormalization operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/batchNormalization.https.any.html",
+ "webnn/validation_tests/batchNormalization.https.any.html?npu",
{
"script_metadata": [
[
@@ -792330,6 +794804,49 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/batchNormalization.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API batchNormalization operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792337,7 +794854,7 @@
}
],
[
- "webnn/validation_tests/batchNormalization.https.any.worker.html",
+ "webnn/validation_tests/batchNormalization.https.any.worker.html?gpu",
{
"script_metadata": [
[
@@ -792349,6 +794866,49 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/batchNormalization.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API batchNormalization operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792357,9 +794917,9 @@
]
],
"build-more-than-once.https.any.js": [
- "d0d6800f682ad581eb82965cc03b323f7f79dd45",
+ "c4cbcae8f32d60b31060a46455a26fe842ce66a5",
[
- "webnn/validation_tests/build-more-than-once.https.any.html",
+ "webnn/validation_tests/build-more-than-once.https.any.html?cpu",
{
"script_metadata": [
[
@@ -792371,6 +794931,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792378,7 +794950,7 @@
}
],
[
- "webnn/validation_tests/build-more-than-once.https.any.worker.html",
+ "webnn/validation_tests/build-more-than-once.https.any.html?gpu",
{
"script_metadata": [
[
@@ -792390,6 +794962,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/build-more-than-once.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "ensure MLMLGraphBuilder may build at most one MLGraph"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/build-more-than-once.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "ensure MLMLGraphBuilder may build at most one MLGraph"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/build-more-than-once.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "ensure MLMLGraphBuilder may build at most one MLGraph"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/build-more-than-once.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "ensure MLMLGraphBuilder may build at most one MLGraph"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792398,9 +795106,133 @@
]
],
"cast.https.any.js": [
- "f616203a88b5f716e4c2e646049c641db3aef3dc",
+ "b20d8186900619f2cd053fa38b6e16c490b0e2f9",
+ [
+ "webnn/validation_tests/cast.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API cast operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/cast.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API cast operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/cast.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API cast operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/cast.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API cast operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/cast.https.any.html",
+ "webnn/validation_tests/cast.https.any.worker.html?gpu",
{
"script_metadata": [
[
@@ -792412,6 +795244,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792419,7 +795263,7 @@
}
],
[
- "webnn/validation_tests/cast.https.any.worker.html",
+ "webnn/validation_tests/cast.https.any.worker.html?npu",
{
"script_metadata": [
[
@@ -792431,6 +795275,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792439,9 +795295,9 @@
]
],
"clamp.https.any.js": [
- "5a347bd230eeaf2649fe26a14e366edd82942e48",
+ "8302961e2c481413e0a6e39e44fc4424562e030a",
[
- "webnn/validation_tests/clamp.https.any.html",
+ "webnn/validation_tests/clamp.https.any.html?cpu",
{
"script_metadata": [
[
@@ -792453,6 +795309,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792460,7 +795328,7 @@
}
],
[
- "webnn/validation_tests/clamp.https.any.worker.html",
+ "webnn/validation_tests/clamp.https.any.html?gpu",
{
"script_metadata": [
[
@@ -792472,6 +795340,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/clamp.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API clamp operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/clamp.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API clamp operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/clamp.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API clamp operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/clamp.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API clamp operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792480,9 +795484,9 @@
]
],
"compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.js": [
- "f7210e55d4538e3dce290d750955a8623e6aa8f8",
+ "65bd805c31f6b1f282b30b66da92cc7cc644181b",
[
- "webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.html",
+ "webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.html?cpu",
{
"script_metadata": [
[
@@ -792494,6 +795498,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "ensure WebNN MLContext.compute() rejecting detached buffers"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "ensure WebNN MLContext.compute() rejecting detached buffers"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "ensure WebNN MLContext.compute() rejecting detached buffers"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "ensure WebNN MLContext.compute() rejecting detached buffers"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792501,7 +795641,7 @@
}
],
[
- "webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.worker.html",
+ "webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.worker.html?npu",
{
"script_metadata": [
[
@@ -792513,6 +795653,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792521,9 +795673,40 @@
]
],
"concat.https.any.js": [
- "6fe22c02bcdcda15267ea52bb89ba9ccaad22425",
+ "4902caf6619c606aa7155111b9584aa4563fcfd7",
+ [
+ "webnn/validation_tests/concat.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API concat operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/concat.https.any.html",
+ "webnn/validation_tests/concat.https.any.html?gpu",
{
"script_metadata": [
[
@@ -792535,6 +795718,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792542,7 +795737,7 @@
}
],
[
- "webnn/validation_tests/concat.https.any.worker.html",
+ "webnn/validation_tests/concat.https.any.html?npu",
{
"script_metadata": [
[
@@ -792554,6 +795749,111 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/concat.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API concat operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/concat.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API concat operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/concat.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API concat operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792562,9 +795862,9 @@
]
],
"constant-changed-buffer.https.any.js": [
- "a6a24a0686585ff8b452d8f9bcd08a2286ea91f7",
+ "1a516c0b1d4f26dc87dc414a7c98d5579ea5a329",
[
- "webnn/validation_tests/constant-changed-buffer.https.any.html",
+ "webnn/validation_tests/constant-changed-buffer.https.any.html?cpu",
{
"script_metadata": [
[
@@ -792576,6 +795876,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792583,7 +795895,7 @@
}
],
[
- "webnn/validation_tests/constant-changed-buffer.https.any.worker.html",
+ "webnn/validation_tests/constant-changed-buffer.https.any.html?gpu",
{
"script_metadata": [
[
@@ -792595,6 +795907,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/constant-changed-buffer.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "ensure MLGraphBuilder.constant() handles buffers which change"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/constant-changed-buffer.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "ensure MLGraphBuilder.constant() handles buffers which change"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/constant-changed-buffer.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "ensure MLGraphBuilder.constant() handles buffers which change"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/constant-changed-buffer.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "ensure MLGraphBuilder.constant() handles buffers which change"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792603,9 +796051,40 @@
]
],
"constant.https.any.js": [
- "136f8bd764ef5d7314e2ea70010ad318e8a5d653",
+ "d101d92fb80970940ee10af169af584734f7bc83",
+ [
+ "webnn/validation_tests/constant.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API constant interface"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/constant.https.any.html",
+ "webnn/validation_tests/constant.https.any.html?gpu",
{
"script_metadata": [
[
@@ -792617,6 +796096,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792624,7 +796115,7 @@
}
],
[
- "webnn/validation_tests/constant.https.any.worker.html",
+ "webnn/validation_tests/constant.https.any.html?npu",
{
"script_metadata": [
[
@@ -792636,6 +796127,111 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/constant.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API constant interface"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/constant.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API constant interface"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/constant.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API constant interface"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792644,9 +796240,9 @@
]
],
"conv2d.https.any.js": [
- "cf8ed9a0d8f75139c94fae923786541c03114ac9",
+ "553de7af9668174ab6d2eb1f6e21e13688449130",
[
- "webnn/validation_tests/conv2d.https.any.html",
+ "webnn/validation_tests/conv2d.https.any.html?cpu",
{
"script_metadata": [
[
@@ -792658,6 +796254,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792665,7 +796273,7 @@
}
],
[
- "webnn/validation_tests/conv2d.https.any.worker.html",
+ "webnn/validation_tests/conv2d.https.any.html?gpu",
{
"script_metadata": [
[
@@ -792677,6 +796285,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/conv2d.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API conv2d operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/conv2d.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API conv2d operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/conv2d.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API conv2d operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/conv2d.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API conv2d operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792685,9 +796429,9 @@
]
],
"convTranspose2d.https.any.js": [
- "6028d51c6c8d2e185237260d00fb9eda2e3c3abd",
+ "b9704c208ccb47f1951e88ccbd734909b76b2ece",
[
- "webnn/validation_tests/convTranspose2d.https.any.html",
+ "webnn/validation_tests/convTranspose2d.https.any.html?cpu",
{
"script_metadata": [
[
@@ -792699,6 +796443,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792706,7 +796462,7 @@
}
],
[
- "webnn/validation_tests/convTranspose2d.https.any.worker.html",
+ "webnn/validation_tests/convTranspose2d.https.any.html?gpu",
{
"script_metadata": [
[
@@ -792718,6 +796474,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/convTranspose2d.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API convTranspose2d operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/convTranspose2d.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API convTranspose2d operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/convTranspose2d.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API convTranspose2d operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/convTranspose2d.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API convTranspose2d operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792726,9 +796618,9 @@
]
],
"createContext.https.any.js": [
- "52b99ff337d0e5cc579cdcee29f431e0811590c0",
+ "0357c88335ff01c978563456977838f3adf9513d",
[
- "webnn/validation_tests/createContext.https.any.html",
+ "webnn/validation_tests/createContext.https.any.html?cpu",
{
"script_metadata": [
[
@@ -792740,6 +796632,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792747,7 +796651,7 @@
}
],
[
- "webnn/validation_tests/createContext.https.any.worker.html",
+ "webnn/validation_tests/createContext.https.any.html?gpu",
{
"script_metadata": [
[
@@ -792759,6 +796663,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/createContext.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API createContext()"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/createContext.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API createContext()"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/createContext.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API createContext()"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/createContext.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API createContext()"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792767,9 +796807,73 @@
]
],
"destroyContext.https.any.js": [
- "9aa3dbf6753e8035e05a29770c5b05db3e4f6bbe",
+ "ba0661ae6f8e3da28d03ffbf1cdfdea97a7e2fd7",
+ [
+ "webnn/validation_tests/destroyContext.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "title",
+ "validation tests for WebNN API MLContext::destroy()"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/validation_tests/destroyContext.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "title",
+ "validation tests for WebNN API MLContext::destroy()"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
[
- "webnn/validation_tests/destroyContext.https.any.html",
+ "webnn/validation_tests/destroyContext.https.any.html?npu",
{
"script_metadata": [
[
@@ -792783,13 +796887,25 @@
[
"global",
"window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
]
],
"timeout": "long"
}
],
[
- "webnn/validation_tests/destroyContext.https.any.worker.html",
+ "webnn/validation_tests/destroyContext.https.any.worker.html?cpu",
{
"script_metadata": [
[
@@ -792803,6 +796919,82 @@
[
"global",
"window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/validation_tests/destroyContext.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "title",
+ "validation tests for WebNN API MLContext::destroy()"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/validation_tests/destroyContext.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "timeout",
+ "long"
+ ],
+ [
+ "title",
+ "validation tests for WebNN API MLContext::destroy()"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
]
],
"timeout": "long"
@@ -792810,9 +797002,9 @@
]
],
"elementwise-binary.https.any.js": [
- "369191dd7fd8e690e2b7fc727c0bc347eb5e3754",
+ "fc0616f569b3970a5b274017e676c180f4623b9a",
[
- "webnn/validation_tests/elementwise-binary.https.any.html",
+ "webnn/validation_tests/elementwise-binary.https.any.html?cpu",
{
"script_metadata": [
[
@@ -792824,6 +797016,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792831,7 +797035,7 @@
}
],
[
- "webnn/validation_tests/elementwise-binary.https.any.worker.html",
+ "webnn/validation_tests/elementwise-binary.https.any.html?gpu",
{
"script_metadata": [
[
@@ -792843,6 +797047,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elementwise-binary.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API element-wise binary operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elementwise-binary.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API element-wise binary operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elementwise-binary.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API element-wise binary operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elementwise-binary.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API element-wise binary operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792851,9 +797191,9 @@
]
],
"elementwise-logical.https.any.js": [
- "e5e5b5a5a81299c4d1faaeb95d383364437464e6",
+ "bada9e7648b1eb3bf80db4ba29146bed784db018",
[
- "webnn/validation_tests/elementwise-logical.https.any.html",
+ "webnn/validation_tests/elementwise-logical.https.any.html?cpu",
{
"script_metadata": [
[
@@ -792865,6 +797205,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792872,7 +797224,7 @@
}
],
[
- "webnn/validation_tests/elementwise-logical.https.any.worker.html",
+ "webnn/validation_tests/elementwise-logical.https.any.html?gpu",
{
"script_metadata": [
[
@@ -792884,6 +797236,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elementwise-logical.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API element-wise logical operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elementwise-logical.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API element-wise logical operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elementwise-logical.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API element-wise logical operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elementwise-logical.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API element-wise logical operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792892,9 +797380,9 @@
]
],
"elementwise-unary.https.any.js": [
- "9380c766960bb75904821422e09623b474d5c194",
+ "5de8cb19c9ec7c01de9a938295019e11f32f296e",
[
- "webnn/validation_tests/elementwise-unary.https.any.html",
+ "webnn/validation_tests/elementwise-unary.https.any.html?cpu",
{
"script_metadata": [
[
@@ -792906,6 +797394,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792913,7 +797413,7 @@
}
],
[
- "webnn/validation_tests/elementwise-unary.https.any.worker.html",
+ "webnn/validation_tests/elementwise-unary.https.any.html?gpu",
{
"script_metadata": [
[
@@ -792925,6 +797425,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elementwise-unary.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API element-wise unary operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elementwise-unary.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API element-wise unary operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elementwise-unary.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API element-wise unary operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elementwise-unary.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API element-wise unary operations"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792933,9 +797569,9 @@
]
],
"elu.https.any.js": [
- "a84848c2c39b6ef7e6beb8435a96d7109f9c0b84",
+ "4236925aed188ea4e09072d95dc54b0c6087841b",
[
- "webnn/validation_tests/elu.https.any.html",
+ "webnn/validation_tests/elu.https.any.html?cpu",
{
"script_metadata": [
[
@@ -792947,6 +797583,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792954,7 +797602,7 @@
}
],
[
- "webnn/validation_tests/elu.https.any.worker.html",
+ "webnn/validation_tests/elu.https.any.html?gpu",
{
"script_metadata": [
[
@@ -792966,6 +797614,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elu.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API elu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elu.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API elu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elu.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API elu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/elu.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API elu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792974,9 +797758,102 @@
]
],
"expand.https.any.js": [
- "b333b573ba14ba3fa071bdc34a67cb5c9781c4f0",
+ "12349a33f8cfb160b191ce9186c969963455f2f9",
+ [
+ "webnn/validation_tests/expand.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API expand operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/expand.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API expand operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/expand.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API expand operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/expand.https.any.html",
+ "webnn/validation_tests/expand.https.any.worker.html?cpu",
{
"script_metadata": [
[
@@ -792988,6 +797865,49 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/expand.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API expand operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -792995,7 +797915,7 @@
}
],
[
- "webnn/validation_tests/expand.https.any.worker.html",
+ "webnn/validation_tests/expand.https.any.worker.html?npu",
{
"script_metadata": [
[
@@ -793007,6 +797927,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793015,9 +797947,71 @@
]
],
"gather.https.any.js": [
- "74db3f15d0c4b031989fdc2bafc47f3f8ebf5b4f",
+ "ec728314a3c01cbac1542238c68fdf842c4a535e",
+ [
+ "webnn/validation_tests/gather.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gather operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gather.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gather operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/gather.https.any.html",
+ "webnn/validation_tests/gather.https.any.html?npu",
{
"script_metadata": [
[
@@ -793029,6 +798023,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793036,7 +798042,7 @@
}
],
[
- "webnn/validation_tests/gather.https.any.worker.html",
+ "webnn/validation_tests/gather.https.any.worker.html?cpu",
{
"script_metadata": [
[
@@ -793048,6 +798054,80 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gather.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gather operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gather.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gather operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793056,9 +798136,40 @@
]
],
"gelu.https.any.js": [
- "498dc509cee8f05dea94cedbf2f7634e936c27c2",
+ "c02c2923af49540d9da82819917e5d983eeedeee",
+ [
+ "webnn/validation_tests/gelu.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gelu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/gelu.https.any.html",
+ "webnn/validation_tests/gelu.https.any.html?gpu",
{
"script_metadata": [
[
@@ -793070,6 +798181,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793077,7 +798200,7 @@
}
],
[
- "webnn/validation_tests/gelu.https.any.worker.html",
+ "webnn/validation_tests/gelu.https.any.html?npu",
{
"script_metadata": [
[
@@ -793089,6 +798212,111 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gelu.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gelu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gelu.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gelu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gelu.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gelu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793097,9 +798325,102 @@
]
],
"gemm.https.any.js": [
- "117fd541a34f93fb8b844f2ce42d2078a00769cc",
+ "30cddcf5ec5e057711f0c0db3e3ca44acb89d5cd",
+ [
+ "webnn/validation_tests/gemm.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gemm operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gemm.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gemm operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gemm.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gemm operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/gemm.https.any.html",
+ "webnn/validation_tests/gemm.https.any.worker.html?cpu",
{
"script_metadata": [
[
@@ -793111,6 +798432,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793118,7 +798451,7 @@
}
],
[
- "webnn/validation_tests/gemm.https.any.worker.html",
+ "webnn/validation_tests/gemm.https.any.worker.html?gpu",
{
"script_metadata": [
[
@@ -793130,6 +798463,49 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gemm.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gemm operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793138,9 +798514,9 @@
]
],
"gru.https.any.js": [
- "ac69fcf83024c930c23cede97201491f786cd597",
+ "00a39e4d37d365977630a34a87f2ae4ab16ef684",
[
- "webnn/validation_tests/gru.https.any.html",
+ "webnn/validation_tests/gru.https.any.html?cpu",
{
"script_metadata": [
[
@@ -793152,6 +798528,49 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gru.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gru operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793159,7 +798578,7 @@
}
],
[
- "webnn/validation_tests/gru.https.any.worker.html",
+ "webnn/validation_tests/gru.https.any.html?npu",
{
"script_metadata": [
[
@@ -793171,6 +798590,111 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gru.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gru operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gru.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gru operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gru.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gru operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793179,9 +798703,102 @@
]
],
"gruCell.https.any.js": [
- "98ba3eec62c43c3b5a9687d19b96602715472ee0",
+ "02408da56e2427e95e743d23de74fb1c58a6737e",
+ [
+ "webnn/validation_tests/gruCell.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gruCell operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gruCell.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gruCell operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gruCell.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gruCell operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/gruCell.https.any.html",
+ "webnn/validation_tests/gruCell.https.any.worker.html?cpu",
{
"script_metadata": [
[
@@ -793193,6 +798810,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793200,7 +798829,7 @@
}
],
[
- "webnn/validation_tests/gruCell.https.any.worker.html",
+ "webnn/validation_tests/gruCell.https.any.worker.html?gpu",
{
"script_metadata": [
[
@@ -793212,6 +798841,49 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/gruCell.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API gruCell operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793220,9 +798892,9 @@
]
],
"hardSigmoid.https.any.js": [
- "154e82936f797caa0793fe84582afe24900ade72",
+ "b0104dfc2c2729c62fd732972bb07ad0a1542533",
[
- "webnn/validation_tests/hardSigmoid.https.any.html",
+ "webnn/validation_tests/hardSigmoid.https.any.html?cpu",
{
"script_metadata": [
[
@@ -793234,6 +798906,49 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/hardSigmoid.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API hardSigmoid operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793241,7 +798956,7 @@
}
],
[
- "webnn/validation_tests/hardSigmoid.https.any.worker.html",
+ "webnn/validation_tests/hardSigmoid.https.any.html?npu",
{
"script_metadata": [
[
@@ -793253,6 +798968,111 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/hardSigmoid.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API hardSigmoid operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/hardSigmoid.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API hardSigmoid operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/hardSigmoid.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API hardSigmoid operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793261,9 +799081,102 @@
]
],
"hardSwish.https.any.js": [
- "7bdf6eb1db341c95098af4660e43e28629fb2b8c",
+ "53c78c8c81df2af2b2f2759f646626d2de2b3c93",
+ [
+ "webnn/validation_tests/hardSwish.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API hardSwish operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/hardSwish.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API hardSwish operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/hardSwish.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API hardSwish operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/hardSwish.https.any.html",
+ "webnn/validation_tests/hardSwish.https.any.worker.html?cpu",
{
"script_metadata": [
[
@@ -793275,6 +799188,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793282,7 +799207,7 @@
}
],
[
- "webnn/validation_tests/hardSwish.https.any.worker.html",
+ "webnn/validation_tests/hardSwish.https.any.worker.html?gpu",
{
"script_metadata": [
[
@@ -793294,6 +799219,49 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/hardSwish.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API hardSwish operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793302,9 +799270,9 @@
]
],
"input.https.any.js": [
- "443cd829461faaa3e14c20926f1aa2313a4f1621",
+ "07d9185cee6bd22d89fb0ac9fcd3a5c2e6942570",
[
- "webnn/validation_tests/input.https.any.html",
+ "webnn/validation_tests/input.https.any.html?cpu",
{
"script_metadata": [
[
@@ -793316,6 +799284,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793323,7 +799303,7 @@
}
],
[
- "webnn/validation_tests/input.https.any.worker.html",
+ "webnn/validation_tests/input.https.any.html?gpu",
{
"script_metadata": [
[
@@ -793335,6 +799315,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/input.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API input interface"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/input.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API input interface"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/input.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API input interface"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/input.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API input interface"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793343,9 +799459,133 @@
]
],
"instanceNormalization.https.any.js": [
- "78094dd8816e424b0561abdccadfecffb1360477",
+ "0777d982f6d4faa1d4e24382217b760b0baa1443",
+ [
+ "webnn/validation_tests/instanceNormalization.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API instanceNormalization operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/instanceNormalization.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API instanceNormalization operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/instanceNormalization.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API instanceNormalization operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/instanceNormalization.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API instanceNormalization operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/instanceNormalization.https.any.html",
+ "webnn/validation_tests/instanceNormalization.https.any.worker.html?gpu",
{
"script_metadata": [
[
@@ -793357,6 +799597,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793364,7 +799616,7 @@
}
],
[
- "webnn/validation_tests/instanceNormalization.https.any.worker.html",
+ "webnn/validation_tests/instanceNormalization.https.any.worker.html?npu",
{
"script_metadata": [
[
@@ -793376,6 +799628,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793384,9 +799648,9 @@
]
],
"layerNormalization.https.any.js": [
- "3b3636ba11d8601bcbd9f499823c7b2c11c6d85a",
+ "50e48cca6e39bd41fce25082011859676100a0ec",
[
- "webnn/validation_tests/layerNormalization.https.any.html",
+ "webnn/validation_tests/layerNormalization.https.any.html?cpu",
{
"script_metadata": [
[
@@ -793398,6 +799662,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793405,7 +799681,7 @@
}
],
[
- "webnn/validation_tests/layerNormalization.https.any.worker.html",
+ "webnn/validation_tests/layerNormalization.https.any.html?gpu",
{
"script_metadata": [
[
@@ -793417,6 +799693,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/layerNormalization.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API layerNormalization operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/layerNormalization.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API layerNormalization operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/layerNormalization.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API layerNormalization operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/layerNormalization.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API layerNormalization operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793425,9 +799837,133 @@
]
],
"leakyRelu.https.any.js": [
- "3a8ac892b98d72e53d53b966d30f063cf48075bc",
+ "6766763cd749aa33a3dcc72e0409942b03cc15f8",
+ [
+ "webnn/validation_tests/leakyRelu.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API leakyRelu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/leakyRelu.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API leakyRelu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/leakyRelu.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API leakyRelu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/leakyRelu.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API leakyRelu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/leakyRelu.https.any.html",
+ "webnn/validation_tests/leakyRelu.https.any.worker.html?gpu",
{
"script_metadata": [
[
@@ -793439,6 +799975,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793446,7 +799994,7 @@
}
],
[
- "webnn/validation_tests/leakyRelu.https.any.worker.html",
+ "webnn/validation_tests/leakyRelu.https.any.worker.html?npu",
{
"script_metadata": [
[
@@ -793458,6 +800006,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793466,9 +800026,9 @@
]
],
"linear.https.any.js": [
- "05f88a34dc7cc4461809db9c7576b484e9071a65",
+ "936843374b992f9fa7703642448e93f0edc36187",
[
- "webnn/validation_tests/linear.https.any.html",
+ "webnn/validation_tests/linear.https.any.html?cpu",
{
"script_metadata": [
[
@@ -793480,6 +800040,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793487,7 +800059,7 @@
}
],
[
- "webnn/validation_tests/linear.https.any.worker.html",
+ "webnn/validation_tests/linear.https.any.html?gpu",
{
"script_metadata": [
[
@@ -793499,6 +800071,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/linear.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API linear operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/linear.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API linear operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/linear.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API linear operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/linear.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API linear operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793507,9 +800215,133 @@
]
],
"lstm.https.any.js": [
- "00f6b129dfa99827605a048d1cff84c52efd0d34",
+ "c0d1c5100f63cf6172dd7e76442a6a9de54384dd",
+ [
+ "webnn/validation_tests/lstm.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API lstm operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/lstm.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API lstm operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/lstm.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API lstm operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/lstm.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API lstm operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/lstm.https.any.html",
+ "webnn/validation_tests/lstm.https.any.worker.html?gpu",
{
"script_metadata": [
[
@@ -793521,6 +800353,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793528,7 +800372,7 @@
}
],
[
- "webnn/validation_tests/lstm.https.any.worker.html",
+ "webnn/validation_tests/lstm.https.any.worker.html?npu",
{
"script_metadata": [
[
@@ -793540,6 +800384,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793548,9 +800404,9 @@
]
],
"lstmCell.https.any.js": [
- "28a9cb8dd3f7f1b8f57cfba35b900feb5b760a76",
+ "eb00ace187fba904ac61fdd1bb02420b18521735",
[
- "webnn/validation_tests/lstmCell.https.any.html",
+ "webnn/validation_tests/lstmCell.https.any.html?cpu",
{
"script_metadata": [
[
@@ -793562,6 +800418,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793569,7 +800437,7 @@
}
],
[
- "webnn/validation_tests/lstmCell.https.any.worker.html",
+ "webnn/validation_tests/lstmCell.https.any.html?gpu",
{
"script_metadata": [
[
@@ -793581,6 +800449,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/lstmCell.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API lstmCell operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/lstmCell.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API lstmCell operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/lstmCell.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API lstmCell operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/lstmCell.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API lstmCell operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793589,9 +800593,133 @@
]
],
"matmul.https.any.js": [
- "c298c87388b954c599cfba6b4d7a29db801c513d",
+ "981d8f35708d8b731c753fc0f092d461fc61b30f",
+ [
+ "webnn/validation_tests/matmul.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API matmul operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/matmul.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API matmul operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/matmul.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API matmul operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/matmul.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API matmul operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/matmul.https.any.html",
+ "webnn/validation_tests/matmul.https.any.worker.html?gpu",
{
"script_metadata": [
[
@@ -793603,6 +800731,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793610,7 +800750,7 @@
}
],
[
- "webnn/validation_tests/matmul.https.any.worker.html",
+ "webnn/validation_tests/matmul.https.any.worker.html?npu",
{
"script_metadata": [
[
@@ -793622,6 +800762,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793630,9 +800782,9 @@
]
],
"pad.https.any.js": [
- "4971706e49db954e4ea07cc98ad3982a3865a5aa",
+ "3f5c30b84cb8e99fcdf92220afc8b9262470cc3a",
[
- "webnn/validation_tests/pad.https.any.html",
+ "webnn/validation_tests/pad.https.any.html?cpu",
{
"script_metadata": [
[
@@ -793644,6 +800796,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793651,7 +800815,7 @@
}
],
[
- "webnn/validation_tests/pad.https.any.worker.html",
+ "webnn/validation_tests/pad.https.any.html?gpu",
{
"script_metadata": [
[
@@ -793663,6 +800827,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/pad.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API pad operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/pad.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API pad operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/pad.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API pad operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/pad.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API pad operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793671,9 +800971,89 @@
]
],
"pooling-and-reduction-keep-dims.https.any.js": [
- "ca9632a5f728b85b65d300e38dcdd035f86e575b",
+ "5a30aaf02be49fd8843e6378f4ff90ceb5f0cea6",
+ [
+ "webnn/validation_tests/pooling-and-reduction-keep-dims.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for pooling and reduction operators keep dimensions"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/validation_tests/pooling-and-reduction-keep-dims.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for pooling and reduction operators keep dimensions"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
[
- "webnn/validation_tests/pooling-and-reduction-keep-dims.https.any.html",
+ "webnn/validation_tests/pooling-and-reduction-keep-dims.https.any.html?npu",
{
"script_metadata": [
[
@@ -793685,6 +801065,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils.js"
],
@@ -793701,7 +801093,7 @@
}
],
[
- "webnn/validation_tests/pooling-and-reduction-keep-dims.https.any.worker.html",
+ "webnn/validation_tests/pooling-and-reduction-keep-dims.https.any.worker.html?cpu",
{
"script_metadata": [
[
@@ -793713,6 +801105,98 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/validation_tests/pooling-and-reduction-keep-dims.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for pooling and reduction operators keep dimensions"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils.js"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ],
+ [
+ "timeout",
+ "long"
+ ]
+ ],
+ "timeout": "long"
+ }
+ ],
+ [
+ "webnn/validation_tests/pooling-and-reduction-keep-dims.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for pooling and reduction operators keep dimensions"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils.js"
],
@@ -793730,9 +801214,9 @@
]
],
"pooling.https.any.js": [
- "aca73de9488a61f6948fe7e427edef7c7ccb0088",
+ "119132cf638f564b4b388c22f0db81058cdb014e",
[
- "webnn/validation_tests/pooling.https.any.html",
+ "webnn/validation_tests/pooling.https.any.html?cpu",
{
"script_metadata": [
[
@@ -793744,6 +801228,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793751,7 +801247,7 @@
}
],
[
- "webnn/validation_tests/pooling.https.any.worker.html",
+ "webnn/validation_tests/pooling.https.any.html?gpu",
{
"script_metadata": [
[
@@ -793763,6 +801259,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/pooling.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API pooling operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/pooling.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API pooling operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/pooling.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API pooling operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/pooling.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API pooling operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793771,9 +801403,133 @@
]
],
"prelu.https.any.js": [
- "a07413007354f8715c28c9a798e583efc2f4acb0",
+ "5b1b95c70f110e5668696f63c96764c911261835",
+ [
+ "webnn/validation_tests/prelu.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API prelu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/prelu.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API prelu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/prelu.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API prelu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/prelu.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API prelu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/prelu.https.any.html",
+ "webnn/validation_tests/prelu.https.any.worker.html?gpu",
{
"script_metadata": [
[
@@ -793785,6 +801541,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793792,7 +801560,7 @@
}
],
[
- "webnn/validation_tests/prelu.https.any.worker.html",
+ "webnn/validation_tests/prelu.https.any.worker.html?npu",
{
"script_metadata": [
[
@@ -793804,6 +801572,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793812,9 +801592,9 @@
]
],
"reduction.https.any.js": [
- "0ffc9c309fd0721b67db0a2ea14a91bcb5f66c03",
+ "57931f3aec4751408f78108c3d0fdca66a11bfe9",
[
- "webnn/validation_tests/reduction.https.any.html",
+ "webnn/validation_tests/reduction.https.any.html?cpu",
{
"script_metadata": [
[
@@ -793826,6 +801606,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793833,7 +801625,7 @@
}
],
[
- "webnn/validation_tests/reduction.https.any.worker.html",
+ "webnn/validation_tests/reduction.https.any.html?gpu",
{
"script_metadata": [
[
@@ -793845,6 +801637,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/reduction.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API reduction operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/reduction.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API reduction operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/reduction.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API reduction operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/reduction.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API reduction operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793853,9 +801781,133 @@
]
],
"relu.https.any.js": [
- "caebba9b316a20be4036c1536b8daba032ae65cf",
+ "7bd61fe413b2a83eeadb8dca55c2595cb857cede",
+ [
+ "webnn/validation_tests/relu.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API relu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/relu.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API relu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/relu.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API relu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/relu.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API relu operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/relu.https.any.html",
+ "webnn/validation_tests/relu.https.any.worker.html?gpu",
{
"script_metadata": [
[
@@ -793867,6 +801919,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793874,7 +801938,7 @@
}
],
[
- "webnn/validation_tests/relu.https.any.worker.html",
+ "webnn/validation_tests/relu.https.any.worker.html?npu",
{
"script_metadata": [
[
@@ -793886,6 +801950,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793894,9 +801970,9 @@
]
],
"resample2d.https.any.js": [
- "9558e2bf5a9efba1b88805dc8f305adbbd6b6c4c",
+ "777c1fc6bb8bafe2cfad0c080495b334936fbc6f",
[
- "webnn/validation_tests/resample2d.https.any.html",
+ "webnn/validation_tests/resample2d.https.any.html?cpu",
{
"script_metadata": [
[
@@ -793908,6 +801984,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793915,7 +802003,7 @@
}
],
[
- "webnn/validation_tests/resample2d.https.any.worker.html",
+ "webnn/validation_tests/resample2d.https.any.html?gpu",
{
"script_metadata": [
[
@@ -793927,6 +802015,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/resample2d.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API resample2d operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/resample2d.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API resample2d operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/resample2d.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API resample2d operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/resample2d.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API resample2d operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793935,9 +802159,133 @@
]
],
"reshape.https.any.js": [
- "57a5dde2c9112b1bd3d297f415618a1b5b5a4373",
+ "7bf4a523c28f27603baf33af8146c7e7f636f9fb",
+ [
+ "webnn/validation_tests/reshape.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API reshape operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/reshape.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API reshape operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/reshape.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API reshape operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/reshape.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API reshape operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/reshape.https.any.html",
+ "webnn/validation_tests/reshape.https.any.worker.html?gpu",
{
"script_metadata": [
[
@@ -793949,6 +802297,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793956,7 +802316,7 @@
}
],
[
- "webnn/validation_tests/reshape.https.any.worker.html",
+ "webnn/validation_tests/reshape.https.any.worker.html?npu",
{
"script_metadata": [
[
@@ -793968,6 +802328,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793976,9 +802348,9 @@
]
],
"sigmoid.https.any.js": [
- "e76403eca3e154718a065a57c419537867efe645",
+ "271bef211169047249dac7ee51250fa0a72d23a1",
[
- "webnn/validation_tests/sigmoid.https.any.html",
+ "webnn/validation_tests/sigmoid.https.any.html?cpu",
{
"script_metadata": [
[
@@ -793990,6 +802362,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -793997,7 +802381,7 @@
}
],
[
- "webnn/validation_tests/sigmoid.https.any.worker.html",
+ "webnn/validation_tests/sigmoid.https.any.html?gpu",
{
"script_metadata": [
[
@@ -794009,6 +802393,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/sigmoid.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API sigmoid operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/sigmoid.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API sigmoid operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/sigmoid.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API sigmoid operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/sigmoid.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API sigmoid operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794017,9 +802537,71 @@
]
],
"slice.https.any.js": [
- "3eb308ad2b80611f021b28e0a043ac99e35e0ce8",
+ "d2ca2c678f06e612ab5fff573afdc191b6cd90bc",
+ [
+ "webnn/validation_tests/slice.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API slice operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/slice.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API slice operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/slice.https.any.html",
+ "webnn/validation_tests/slice.https.any.html?npu",
{
"script_metadata": [
[
@@ -794031,6 +802613,49 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/slice.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API slice operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794038,7 +802663,7 @@
}
],
[
- "webnn/validation_tests/slice.https.any.worker.html",
+ "webnn/validation_tests/slice.https.any.worker.html?gpu",
{
"script_metadata": [
[
@@ -794050,6 +802675,49 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/slice.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API slice operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794058,9 +802726,9 @@
]
],
"softmax.https.any.js": [
- "94695e69c6cc5dae85125bc71f597e321ce11858",
+ "8c9e65f6eee6880cdfaf8de691bec791c180fb44",
[
- "webnn/validation_tests/softmax.https.any.html",
+ "webnn/validation_tests/softmax.https.any.html?cpu",
{
"script_metadata": [
[
@@ -794072,6 +802740,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794079,7 +802759,7 @@
}
],
[
- "webnn/validation_tests/softmax.https.any.worker.html",
+ "webnn/validation_tests/softmax.https.any.html?gpu",
{
"script_metadata": [
[
@@ -794091,6 +802771,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/softmax.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API softmax operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/softmax.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API softmax operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/softmax.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API softmax operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/softmax.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API softmax operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794099,9 +802915,133 @@
]
],
"softplus.https.any.js": [
- "2196c895f3980ad57e58054ab68f0aa793b17833",
+ "72049573a48f12caf86181879a74a82a03db7474",
+ [
+ "webnn/validation_tests/softplus.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API softplus operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/softplus.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API softplus operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/softplus.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API softplus operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/softplus.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API softplus operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/softplus.https.any.html",
+ "webnn/validation_tests/softplus.https.any.worker.html?gpu",
{
"script_metadata": [
[
@@ -794113,6 +803053,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794120,7 +803072,7 @@
}
],
[
- "webnn/validation_tests/softplus.https.any.worker.html",
+ "webnn/validation_tests/softplus.https.any.worker.html?npu",
{
"script_metadata": [
[
@@ -794132,6 +803084,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794140,9 +803104,9 @@
]
],
"softsign.https.any.js": [
- "81b4b4fbe75b4a11c9d2b9fa112add96453bbe2c",
+ "59a0199a3fb75aca3f82a580a15af0230eeccc7e",
[
- "webnn/validation_tests/softsign.https.any.html",
+ "webnn/validation_tests/softsign.https.any.html?cpu",
{
"script_metadata": [
[
@@ -794154,6 +803118,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794161,7 +803137,7 @@
}
],
[
- "webnn/validation_tests/softsign.https.any.worker.html",
+ "webnn/validation_tests/softsign.https.any.html?gpu",
{
"script_metadata": [
[
@@ -794173,6 +803149,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/softsign.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API softsign operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/softsign.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API softsign operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/softsign.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API softsign operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/softsign.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API softsign operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794181,9 +803293,133 @@
]
],
"split.https.any.js": [
- "9946df34ed8c8545c3e93bf12e28886056dea7ac",
+ "31b0c449385fc1613b0949b5986fdacd01430168",
+ [
+ "webnn/validation_tests/split.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API split operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/split.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API split operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/split.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API split operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/split.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API split operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/split.https.any.html",
+ "webnn/validation_tests/split.https.any.worker.html?gpu",
{
"script_metadata": [
[
@@ -794195,6 +803431,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794202,7 +803450,7 @@
}
],
[
- "webnn/validation_tests/split.https.any.worker.html",
+ "webnn/validation_tests/split.https.any.worker.html?npu",
{
"script_metadata": [
[
@@ -794214,6 +803462,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794222,9 +803482,9 @@
]
],
"tanh.https.any.js": [
- "deb9f3614eb97faed2a5f86782207839a874822b",
+ "b7ddf461c52152a5c7969ebdf9771eb67dd42b95",
[
- "webnn/validation_tests/tanh.https.any.html",
+ "webnn/validation_tests/tanh.https.any.html?cpu",
{
"script_metadata": [
[
@@ -794236,6 +803496,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794243,7 +803515,7 @@
}
],
[
- "webnn/validation_tests/tanh.https.any.worker.html",
+ "webnn/validation_tests/tanh.https.any.html?gpu",
{
"script_metadata": [
[
@@ -794255,6 +803527,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/tanh.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API tanh operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/tanh.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API tanh operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/tanh.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API tanh operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/tanh.https.any.worker.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API tanh operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794263,9 +803671,9 @@
]
],
"transpose.https.any.js": [
- "be9c9bd8a6379baacdf2e7cc96b0d6891579cfd4",
+ "f9eda1d68b6c3bda5ccca08564f96c9ba6b98636",
[
- "webnn/validation_tests/transpose.https.any.html",
+ "webnn/validation_tests/transpose.https.any.html?cpu",
{
"script_metadata": [
[
@@ -794277,6 +803685,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/transpose.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API transpose operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/transpose.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API transpose operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/transpose.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API transpose operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/transpose.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API transpose operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794284,7 +803828,7 @@
}
],
[
- "webnn/validation_tests/transpose.https.any.worker.html",
+ "webnn/validation_tests/transpose.https.any.worker.html?npu",
{
"script_metadata": [
[
@@ -794296,6 +803840,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794304,9 +803860,9 @@
]
],
"triangular.https.any.js": [
- "b6e2802b7c5bbc8fe05b368ae7facd02479c7a73",
+ "320c4ab56592e1d4421b283569a2787c4a707f6d",
[
- "webnn/validation_tests/triangular.https.any.html",
+ "webnn/validation_tests/triangular.https.any.html?cpu",
{
"script_metadata": [
[
@@ -794318,6 +803874,142 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/triangular.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API triangular operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/triangular.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API triangular operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/triangular.https.any.worker.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API triangular operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/triangular.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API triangular operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794325,7 +804017,7 @@
}
],
[
- "webnn/validation_tests/triangular.https.any.worker.html",
+ "webnn/validation_tests/triangular.https.any.worker.html?npu",
{
"script_metadata": [
[
@@ -794337,6 +804029,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794345,9 +804049,102 @@
]
],
"where.https.any.js": [
- "f509971f69a3fbe5d1bf4c05594253098fb8e7db",
+ "884b4857317fb4d88f4de98ad198a35c4506c78b",
+ [
+ "webnn/validation_tests/where.https.any.html?cpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API where operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/where.https.any.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API where operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/where.https.any.html?npu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API where operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
[
- "webnn/validation_tests/where.https.any.html",
+ "webnn/validation_tests/where.https.any.worker.html?cpu",
{
"script_metadata": [
[
@@ -794359,6 +804156,49 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
+ "script",
+ "../resources/utils_validation.js"
+ ]
+ ]
+ }
+ ],
+ [
+ "webnn/validation_tests/where.https.any.worker.html?gpu",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "validation tests for WebNN API where operation"
+ ],
+ [
+ "global",
+ "window,dedicatedworker"
+ ],
+ [
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -794366,7 +804206,7 @@
}
],
[
- "webnn/validation_tests/where.https.any.worker.html",
+ "webnn/validation_tests/where.https.any.worker.html?npu",
{
"script_metadata": [
[
@@ -794378,6 +804218,18 @@
"window,dedicatedworker"
],
[
+ "variant",
+ "?cpu"
+ ],
+ [
+ "variant",
+ "?gpu"
+ ],
+ [
+ "variant",
+ "?npu"
+ ],
+ [
"script",
"../resources/utils_validation.js"
]
@@ -795758,6 +805610,13 @@
{}
]
],
+ "pt-no-bundle.html": [
+ "e434d2e86fa4c082b8b6e44de8b5fe0fb9729c9a",
+ [
+ null,
+ {}
+ ]
+ ],
"rtp-clockrate.html": [
"4177420050f582094d8fe293aac1665bdaea798e",
[
@@ -796029,6 +805888,24 @@
{}
]
],
+ "RTCRtpScriptTransform-encoded-transform.https.html": [
+ "c935644f0c6f7e71b50cd241bebdea9cc92826e7",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "RTCRtpScriptTransform-sender-worker-single-frame.https.html": [
+ "bc5cfd9d6c4f7df4aa27e8e8d548d905d7ab75ff",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"idlharness.https.window.js": [
"2c6ef19ca82a56c799b97b5eb9af3edb900a40b5",
[
@@ -841692,7 +851569,7 @@
]
],
"error.py": [
- "ba23e77300042ca08878b7887d09e08f747845dd",
+ "c6c32b88dee99884637e308f9f5e17a3cb1cd480",
[
null,
{}
@@ -841743,7 +851620,7 @@
},
"navigation_failed": {
"navigation_failed.py": [
- "fcab85fb075dc39a2b73fce0fda98aa02a2b1638",
+ "bf72e6e4278adc364f15f1ab3cbe4f6b7ae100f0",
[
null,
{}
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-block-in-inline.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-block-in-inline.html.ini
new file mode 100644
index 00000000000..f46e4cb70e6
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-block-in-inline.html.ini
@@ -0,0 +1,3 @@
+[justify-self-block-in-inline.html]
+ [.block-in-inline 1]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-htb-ltr-htb.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-htb-ltr-htb.html.ini
new file mode 100644
index 00000000000..09cc50092f7
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-htb-ltr-htb.html.ini
@@ -0,0 +1,42 @@
+[justify-self-htb-ltr-htb.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 4]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 6]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 14]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-htb-ltr-vlr.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-htb-ltr-vlr.html.ini
new file mode 100644
index 00000000000..91b531b8c25
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-htb-ltr-vlr.html.ini
@@ -0,0 +1,42 @@
+[justify-self-htb-ltr-vlr.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 4]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 6]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 14]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-htb-ltr-vrl.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-htb-ltr-vrl.html.ini
new file mode 100644
index 00000000000..f67f288e230
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-htb-ltr-vrl.html.ini
@@ -0,0 +1,42 @@
+[justify-self-htb-ltr-vrl.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 4]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 6]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 14]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-htb-rtl-htb.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-htb-rtl-htb.html.ini
new file mode 100644
index 00000000000..06c734facf2
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-htb-rtl-htb.html.ini
@@ -0,0 +1,42 @@
+[justify-self-htb-rtl-htb.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 4]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 6]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 14]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-htb-rtl-vlr.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-htb-rtl-vlr.html.ini
new file mode 100644
index 00000000000..f1cd616a3ce
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-htb-rtl-vlr.html.ini
@@ -0,0 +1,42 @@
+[justify-self-htb-rtl-vlr.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 4]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 6]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 14]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-htb-rtl-vrl.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-htb-rtl-vrl.html.ini
new file mode 100644
index 00000000000..e4df4202cb0
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-htb-rtl-vrl.html.ini
@@ -0,0 +1,42 @@
+[justify-self-htb-rtl-vrl.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 4]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 6]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 14]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-text-align.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-text-align.html.ini
new file mode 100644
index 00000000000..b36a5fb8ed4
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-text-align.html.ini
@@ -0,0 +1,2 @@
+[justify-self-text-align.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-ltr-htb.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-ltr-htb.html.ini
new file mode 100644
index 00000000000..b38f53318d0
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-ltr-htb.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vlr-ltr-htb.html]
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-ltr-vlr.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-ltr-vlr.html.ini
new file mode 100644
index 00000000000..37b818bb55c
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-ltr-vlr.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vlr-ltr-vlr.html]
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-ltr-vrl.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-ltr-vrl.html.ini
new file mode 100644
index 00000000000..48c1ba8a1b6
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-ltr-vrl.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vlr-ltr-vrl.html]
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-rtl-htb.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-rtl-htb.html.ini
new file mode 100644
index 00000000000..709462abe4c
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-rtl-htb.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vlr-rtl-htb.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-rtl-vlr.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-rtl-vlr.html.ini
new file mode 100644
index 00000000000..fd35b46c0ff
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-rtl-vlr.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vlr-rtl-vlr.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-rtl-vrl.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-rtl-vrl.html.ini
new file mode 100644
index 00000000000..314903bde97
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-vlr-rtl-vrl.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vlr-rtl-vrl.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-ltr-htb.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-ltr-htb.html.ini
new file mode 100644
index 00000000000..a98c58250da
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-ltr-htb.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vrl-ltr-htb.html]
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-ltr-vlr.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-ltr-vlr.html.ini
new file mode 100644
index 00000000000..0ec20a987e3
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-ltr-vlr.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vrl-ltr-vlr.html]
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-ltr-vrl.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-ltr-vrl.html.ini
new file mode 100644
index 00000000000..52777ae4ce1
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-ltr-vrl.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vrl-ltr-vrl.html]
+ [.item 2]
+ expected: FAIL
+
+ [.item 3]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 11]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-rtl-htb.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-rtl-htb.html.ini
new file mode 100644
index 00000000000..7db58fdd46c
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-rtl-htb.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vrl-rtl-htb.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 13]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-rtl-vlr.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-rtl-vlr.html.ini
new file mode 100644
index 00000000000..73f7ce69cb5
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-rtl-vlr.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vrl-rtl-vlr.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-rtl-vrl.html.ini b/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-rtl-vrl.html.ini
new file mode 100644
index 00000000000..dec1e8471d0
--- /dev/null
+++ b/tests/wpt/meta/css/css-align/blocks/justify-self-vrl-rtl-vrl.html.ini
@@ -0,0 +1,30 @@
+[justify-self-vrl-rtl-vrl.html]
+ [.item 1]
+ expected: FAIL
+
+ [.item 2]
+ expected: FAIL
+
+ [.item 5]
+ expected: FAIL
+
+ [.item 7]
+ expected: FAIL
+
+ [.item 8]
+ expected: FAIL
+
+ [.item 9]
+ expected: FAIL
+
+ [.item 10]
+ expected: FAIL
+
+ [.item 12]
+ expected: FAIL
+
+ [.item 15]
+ expected: FAIL
+
+ [.item 16]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-color/color-layers-no-blend-mode.html.ini b/tests/wpt/meta/css/css-color/color-layers-no-blend-mode.html.ini
new file mode 100644
index 00000000000..ec39818f3a5
--- /dev/null
+++ b/tests/wpt/meta/css/css-color/color-layers-no-blend-mode.html.ini
@@ -0,0 +1,2 @@
+[color-layers-no-blend-mode.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-color/parsing/color-valid-color-layers-function.html.ini b/tests/wpt/meta/css/css-color/parsing/color-valid-color-layers-function.html.ini
new file mode 100644
index 00000000000..2ce154821fb
--- /dev/null
+++ b/tests/wpt/meta/css/css-color/parsing/color-valid-color-layers-function.html.ini
@@ -0,0 +1,510 @@
+[color-valid-color-layers-function.html]
+ [e.style['color'\] = "color-layers(red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(normal, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(multiply, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(screen, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(overlay, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(darken, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(lighten, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-dodge, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color-burn, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hard-light, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(soft-light, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(difference, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(exclusion, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(hue, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(saturation, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(color, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, red)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, red, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, red, blue, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, red, blue, green, orange, purple, black)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, currentcolor, blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, canvastext, green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, rgb(from black r g b / 0.5), green)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, color-mix(in srgb, red, blue), blue)" should set the property value]
+ expected: FAIL
+
+ [e.style['color'\] = "color-layers(luminosity, color-layers(red, blue), green)" should set the property value]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-template-tracks-valid.html.ini b/tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-template-tracks-valid.html.ini
new file mode 100644
index 00000000000..55bfc15fea5
--- /dev/null
+++ b/tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-template-tracks-valid.html.ini
@@ -0,0 +1,69 @@
+[masonry-template-tracks-valid.html]
+ [e.style['masonry-template-tracks'\] = "auto" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "10px" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "20%" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "calc(-0.5em + 10px)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "calc(0.5em + 10px)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "calc(30% + 40vw)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "5FR" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "min-content" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "Max-Content" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "AuTo" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "1fr 2fr 1fr" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(10px, auto)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(20%, max-content)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(calc(-0.5em + 10px), min-content)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(calc(0.5em + 10px), 5fr)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(calc(30% + 40vw), 10px)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(min-content, 20%)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(max-content, calc(-0.5em + 10px))" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "minmax(auto, calc(0.5em + 10px))" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "repeat(5, auto)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "repeat(auto-fill, 25%)" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "[\] 150px [\] 1fr [\]" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-template-tracks'\] = "repeat(1, [\] 10px [\])" should set the property value]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-track-computed.html.ini b/tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-track-computed.html.ini
new file mode 100644
index 00000000000..d943bd2c153
--- /dev/null
+++ b/tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-track-computed.html.ini
@@ -0,0 +1,24 @@
+[masonry-track-computed.html]
+ [Property masonry-track-end value 'auto']
+ expected: FAIL
+
+ [Property masonry-track-start value 'auto']
+ expected: FAIL
+
+ [Property masonry-track-end value '_9']
+ expected: FAIL
+
+ [Property masonry-track-start value '-_π']
+ expected: FAIL
+
+ [Property masonry-track-end value '-44 Z']
+ expected: FAIL
+
+ [Property masonry-track-start value '+90 X']
+ expected: FAIL
+
+ [Property masonry-track-end value 'span 1 i']
+ expected: FAIL
+
+ [Property masonry-track-start value 'span 2']
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-track-valid.html.ini b/tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-track-valid.html.ini
new file mode 100644
index 00000000000..565d63daa9b
--- /dev/null
+++ b/tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-track-valid.html.ini
@@ -0,0 +1,24 @@
+[masonry-track-valid.html]
+ [e.style['masonry-track-end'\] = "AuTo" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-track-start'\] = "AuTo" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-track-end'\] = "a_3" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-track-start'\] = "-_π" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-track-end'\] = "Z -44" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-track-start'\] = "+90" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-track-end'\] = "SpAn i 2" should set the property value]
+ expected: FAIL
+
+ [e.style['masonry-track-start'\] = "2 i span" should set the property value]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-028.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-028.tentative.html.ini
new file mode 100644
index 00000000000..b7429acdd95
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-028.tentative.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-028.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-001.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-001.tentative.html.ini
new file mode 100644
index 00000000000..8cd613ec35d
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-001.tentative.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-auto-with-ruby-001.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-002.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-002.tentative.html.ini
new file mode 100644
index 00000000000..d4e5c0e3775
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-002.tentative.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-auto-with-ruby-002.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-003.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-003.tentative.html.ini
new file mode 100644
index 00000000000..a493dbf1b1a
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-003.tentative.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-auto-with-ruby-003.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-004.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-004.tentative.html.ini
new file mode 100644
index 00000000000..079554e3bfc
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-004.tentative.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-auto-with-ruby-004.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-005.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-005.tentative.html.ini
new file mode 100644
index 00000000000..38e08b5a70a
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-005.tentative.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-auto-with-ruby-005.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-sizing/aspect-ratio/block-aspect-ratio-042.html.ini b/tests/wpt/meta/css/css-sizing/aspect-ratio/block-aspect-ratio-042.html.ini
deleted file mode 100644
index 22341d7f6fe..00000000000
--- a/tests/wpt/meta/css/css-sizing/aspect-ratio/block-aspect-ratio-042.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[block-aspect-ratio-042.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-sizing/aspect-ratio/block-aspect-ratio-056.html.ini b/tests/wpt/meta/css/css-sizing/aspect-ratio/block-aspect-ratio-056.html.ini
new file mode 100644
index 00000000000..62995938b8b
--- /dev/null
+++ b/tests/wpt/meta/css/css-sizing/aspect-ratio/block-aspect-ratio-056.html.ini
@@ -0,0 +1,2 @@
+[block-aspect-ratio-056.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-sizing/aspect-ratio/block-aspect-ratio-057.tentative.html.ini b/tests/wpt/meta/css/css-sizing/aspect-ratio/block-aspect-ratio-057.tentative.html.ini
new file mode 100644
index 00000000000..86a6a3f8b68
--- /dev/null
+++ b/tests/wpt/meta/css/css-sizing/aspect-ratio/block-aspect-ratio-057.tentative.html.ini
@@ -0,0 +1,2 @@
+[block-aspect-ratio-057.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-045.html.ini b/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-045.html.ini
new file mode 100644
index 00000000000..6fd626f6af9
--- /dev/null
+++ b/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-045.html.ini
@@ -0,0 +1,2 @@
+[flex-aspect-ratio-045.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-046.html.ini b/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-046.html.ini
new file mode 100644
index 00000000000..e2141f5d2b3
--- /dev/null
+++ b/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-046.html.ini
@@ -0,0 +1,2 @@
+[flex-aspect-ratio-046.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-047.html.ini b/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-047.html.ini
new file mode 100644
index 00000000000..4e5d114d306
--- /dev/null
+++ b/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-047.html.ini
@@ -0,0 +1,2 @@
+[flex-aspect-ratio-047.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-048.html.ini b/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-048.html.ini
new file mode 100644
index 00000000000..d39463c18c5
--- /dev/null
+++ b/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-048.html.ini
@@ -0,0 +1,2 @@
+[flex-aspect-ratio-048.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-049.html.ini b/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-049.html.ini
new file mode 100644
index 00000000000..38a533c6337
--- /dev/null
+++ b/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-049.html.ini
@@ -0,0 +1,2 @@
+[flex-aspect-ratio-049.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-051.html.ini b/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-051.html.ini
new file mode 100644
index 00000000000..7fc97c88cfc
--- /dev/null
+++ b/tests/wpt/meta/css/css-sizing/aspect-ratio/flex-aspect-ratio-051.html.ini
@@ -0,0 +1,2 @@
+[flex-aspect-ratio-051.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-text-decor/text-emphasis-punctuation-1.html.ini b/tests/wpt/meta/css/css-text-decor/text-emphasis-punctuation-1.html.ini
new file mode 100644
index 00000000000..22755b9bb76
--- /dev/null
+++ b/tests/wpt/meta/css/css-text-decor/text-emphasis-punctuation-1.html.ini
@@ -0,0 +1,2 @@
+[text-emphasis-punctuation-1.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-text-decor/text-emphasis-punctuation-3.html.ini b/tests/wpt/meta/css/css-text-decor/text-emphasis-punctuation-3.html.ini
new file mode 100644
index 00000000000..ff425db0c29
--- /dev/null
+++ b/tests/wpt/meta/css/css-text-decor/text-emphasis-punctuation-3.html.ini
@@ -0,0 +1,2 @@
+[text-emphasis-punctuation-3.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/attr-all-types.html.ini b/tests/wpt/meta/css/css-values/attr-all-types.html.ini
index b78185da0c1..7b12c5359c8 100644
--- a/tests/wpt/meta/css/css-values/attr-all-types.html.ini
+++ b/tests/wpt/meta/css/css-values/attr-all-types.html.ini
@@ -166,3 +166,9 @@
[CSS Values and Units Test: attr 72]
expected: FAIL
+
+ [CSS Values and Units Test: attr 15]
+ expected: FAIL
+
+ [CSS Values and Units Test: attr 30]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/calc-size/animation/calc-size-height-interpolation.html.ini b/tests/wpt/meta/css/css-values/calc-size/animation/calc-size-height-interpolation.html.ini
index 82f26f67c1e..1ff5d2a7b72 100644
--- a/tests/wpt/meta/css/css-values/calc-size/animation/calc-size-height-interpolation.html.ini
+++ b/tests/wpt/meta/css/css-values/calc-size/animation/calc-size-height-interpolation.html.ini
@@ -3490,3 +3490,309 @@
[Web Animations: property <height> from [calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(calc-size(auto, size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2), size / 2 + size / 2)\] to [calc-size(auto, size * 3)\] at (1.5) should be [calc-size(auto, size * 3)\]]
expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [60px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [120px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [180px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [60px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [120px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [180px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [60px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [120px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [180px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [60px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [120px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [180px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(20%, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0) should be [100px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (0.5) should be [100px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(60%, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0.5) should be [125px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (1) should be [200px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0.5) should be [125px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (1) should be [200px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0.5) should be [125px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (1) should be [200px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (0.5) should be [125px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(200px, size)\] at (1) should be [200px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-behavior:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (-0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-behavior:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-behavior:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-behavior:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-behavior:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.6) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-behavior:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-behavior:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (-0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.6) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (-0.3) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.3) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.6) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (-0.3) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.3) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.6) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (-0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.6) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (-0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.3) should be [calc-size(50%, size)\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (0.6) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50%, size)\] to [calc-size(min-content, size)\] at (1.5) should be [calc-size(min-content, size)\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0.5) should be [75px\]]
+ expected: FAIL
+
+ [CSS Transitions: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0.5) should be [75px\]]
+ expected: FAIL
+
+ [CSS Transitions with transition: all: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0.5) should be [75px\]]
+ expected: FAIL
+
+ [CSS Animations: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (1) should be [100px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0) should be [50px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (0.5) should be [75px\]]
+ expected: FAIL
+
+ [Web Animations: property <height> from [calc-size(50px, size)\] to [calc-size(min-content, size)\] at (1) should be [100px\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html.ini b/tests/wpt/meta/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html.ini
index 92c2f421196..c948860b7a6 100644
--- a/tests/wpt/meta/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html.ini
+++ b/tests/wpt/meta/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html.ini
@@ -22,3 +22,15 @@
[value at progress 0.75 in animation of "height" from "auto" to "calc-size(any, 0px)"]
expected: FAIL
+
+ [value at progress 0.75 in animation of "width" from "calc-size(50%, size)" to "calc-size(calc-size(45%, (size * 2)), size + 20px)"]
+ expected: FAIL
+
+ [value at progress 0.75 in animation of "width" from "calc-size(40%, size)" to "calc-size(calc-size(10px, (size * 2)), size + 20px)"]
+ expected: FAIL
+
+ [value at progress 0.75 in animation of "width" from "calc-size(80px, size)" to "calc-size(calc-size(10px, (size * 2)), size + 20px)"]
+ expected: FAIL
+
+ [value at progress 0.75 in animation of "width" from "calc-size(80px, size)" to "calc-size(calc-size(any, 20px), size + 20px)"]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/calc-size/calc-size-aspect-ratio-003.html.ini b/tests/wpt/meta/css/css-values/calc-size/calc-size-aspect-ratio-003.html.ini
new file mode 100644
index 00000000000..b3cbfa9b272
--- /dev/null
+++ b/tests/wpt/meta/css/css-values/calc-size/calc-size-aspect-ratio-003.html.ini
@@ -0,0 +1,2 @@
+[calc-size-aspect-ratio-003.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/calc-size/calc-size-aspect-ratio-004.html.ini b/tests/wpt/meta/css/css-values/calc-size/calc-size-aspect-ratio-004.html.ini
new file mode 100644
index 00000000000..75d54d26b78
--- /dev/null
+++ b/tests/wpt/meta/css/css-values/calc-size/calc-size-aspect-ratio-004.html.ini
@@ -0,0 +1,2 @@
+[calc-size-aspect-ratio-004.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/calc-size/calc-size-aspect-ratio-005.html.ini b/tests/wpt/meta/css/css-values/calc-size/calc-size-aspect-ratio-005.html.ini
new file mode 100644
index 00000000000..7a161a873c2
--- /dev/null
+++ b/tests/wpt/meta/css/css-values/calc-size/calc-size-aspect-ratio-005.html.ini
@@ -0,0 +1,2 @@
+[calc-size-aspect-ratio-005.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-001.html.ini b/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-001.html.ini
new file mode 100644
index 00000000000..0304e998ba1
--- /dev/null
+++ b/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-001.html.ini
@@ -0,0 +1,2 @@
+[calc-size-flex-001.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-002.html.ini b/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-002.html.ini
new file mode 100644
index 00000000000..8a589733d2a
--- /dev/null
+++ b/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-002.html.ini
@@ -0,0 +1,2 @@
+[calc-size-flex-002.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-003.html.ini b/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-003.html.ini
new file mode 100644
index 00000000000..b1e3f9e8585
--- /dev/null
+++ b/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-003.html.ini
@@ -0,0 +1,2 @@
+[calc-size-flex-003.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-004.html.ini b/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-004.html.ini
new file mode 100644
index 00000000000..a891aaec844
--- /dev/null
+++ b/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-004.html.ini
@@ -0,0 +1,2 @@
+[calc-size-flex-004.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-005.html.ini b/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-005.html.ini
new file mode 100644
index 00000000000..afa59e4a84b
--- /dev/null
+++ b/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-005.html.ini
@@ -0,0 +1,2 @@
+[calc-size-flex-005.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-006.html.ini b/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-006.html.ini
new file mode 100644
index 00000000000..6785cd6fec4
--- /dev/null
+++ b/tests/wpt/meta/css/css-values/calc-size/calc-size-flex-006.html.ini
@@ -0,0 +1,2 @@
+[calc-size-flex-006.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/calc-size/calc-size-grid-repeat.html.ini b/tests/wpt/meta/css/css-values/calc-size/calc-size-grid-repeat.html.ini
new file mode 100644
index 00000000000..9c81daf1767
--- /dev/null
+++ b/tests/wpt/meta/css/css-values/calc-size/calc-size-grid-repeat.html.ini
@@ -0,0 +1,2 @@
+[calc-size-grid-repeat.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/calc-size/calc-size-height.html.ini b/tests/wpt/meta/css/css-values/calc-size/calc-size-height.html.ini
index 31265aa3279..295ccdc66bf 100644
--- a/tests/wpt/meta/css/css-values/calc-size/calc-size-height.html.ini
+++ b/tests/wpt/meta/css/css-values/calc-size/calc-size-height.html.ini
@@ -91,3 +91,9 @@
[resolved height for height in definite height container: calc-size(auto, size * 1.5)]
expected: FAIL
+
+ [resolved height for height in auto height container: calc-size(calc-size(any, 300px), size * 2)]
+ expected: FAIL
+
+ [resolved height for height in definite height container: calc-size(calc-size(any, 300px), size * 2)]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/calc-size/calc-size-parsing.html.ini b/tests/wpt/meta/css/css-values/calc-size/calc-size-parsing.html.ini
index 92f07e5b5b0..01f0b734aa4 100644
--- a/tests/wpt/meta/css/css-values/calc-size/calc-size-parsing.html.ini
+++ b/tests/wpt/meta/css/css-values/calc-size/calc-size-parsing.html.ini
@@ -124,3 +124,9 @@
[e.style['flex-basis'\] = "calc-size(content, size)" should set the property value]
expected: FAIL
+
+ [e.style['width'\] = "calc-size(calc-size(any, 30px), size)" should set the property value]
+ expected: FAIL
+
+ [e.style['width'\] = "calc-size(0px, 0px)" should set the property value]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/vh_not_refreshing_on_chrome.html.ini b/tests/wpt/meta/css/css-values/vh_not_refreshing_on_chrome.html.ini
new file mode 100644
index 00000000000..26435e28b09
--- /dev/null
+++ b/tests/wpt/meta/css/css-values/vh_not_refreshing_on_chrome.html.ini
@@ -0,0 +1,2 @@
+[vh_not_refreshing_on_chrome.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/cssom-view/MediaQueryList-extends-EventTarget.html.ini b/tests/wpt/meta/css/cssom-view/MediaQueryList-extends-EventTarget.html.ini
deleted file mode 100644
index f82461dd8e5..00000000000
--- a/tests/wpt/meta/css/cssom-view/MediaQueryList-extends-EventTarget.html.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[MediaQueryList-extends-EventTarget.html]
- expected: TIMEOUT
- [addEventListener "once" option is respected]
- expected: TIMEOUT
-
- [removeEventListener removes listener]
- expected: NOTRUN
diff --git a/tests/wpt/meta/css/cssom-view/matchMedia.html.ini b/tests/wpt/meta/css/cssom-view/matchMedia.html.ini
index a782dd04e94..f96ff7f9f07 100644
--- a/tests/wpt/meta/css/cssom-view/matchMedia.html.ini
+++ b/tests/wpt/meta/css/cssom-view/matchMedia.html.ini
@@ -1,9 +1,3 @@
[matchMedia.html]
[iframe.matchMedia("(min-aspect-ratio: 1/1)") matches]
expected: FAIL
-
- [iframe.matchMedia("(width: 200px)") matches]
- expected: FAIL
-
- [iframe.matchMedia("(min-width: 150px)") matches]
- expected: FAIL
diff --git a/tests/wpt/meta/css/cssom-view/scrollWidthHeight-negative-margin-001.html.ini b/tests/wpt/meta/css/cssom-view/scrollWidthHeight-negative-margin-001.html.ini
new file mode 100644
index 00000000000..4955e1dd3dc
--- /dev/null
+++ b/tests/wpt/meta/css/cssom-view/scrollWidthHeight-negative-margin-001.html.ini
@@ -0,0 +1,12 @@
+[scrollWidthHeight-negative-margin-001.html]
+ [scrollWidth/Height with negative margins: overflow: visible;]
+ expected: FAIL
+
+ [scrollWidth/Height with negative margins: overflow: hidden;]
+ expected: FAIL
+
+ [scrollWidth/Height with negative margins: overflow: auto;]
+ expected: FAIL
+
+ [scrollWidth/Height with negative margins: ]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/cssom-view/scrollWidthHeight-negative-margin-002.html.ini b/tests/wpt/meta/css/cssom-view/scrollWidthHeight-negative-margin-002.html.ini
new file mode 100644
index 00000000000..83cfc7677d6
--- /dev/null
+++ b/tests/wpt/meta/css/cssom-view/scrollWidthHeight-negative-margin-002.html.ini
@@ -0,0 +1,25 @@
+[scrollWidthHeight-negative-margin-002.html]
+ expected: ERROR
+ [scrollWidth with negative margins: display: block; overflow: visible;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: block; overflow: visible;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: block; overflow: hidden;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: block; overflow: hidden;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: block; overflow: auto;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: block; overflow: auto;]
+ expected: FAIL
+
+ [scrollWidth with negative margins: display: block; overflow: scroll;]
+ expected: FAIL
+
+ [scrollHeight with negative margins: display: block; overflow: scroll;]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/selectors/user-invalid-form-submission-invalidation.html.ini b/tests/wpt/meta/css/selectors/user-invalid-form-submission-invalidation.html.ini
new file mode 100644
index 00000000000..2122ec73662
--- /dev/null
+++ b/tests/wpt/meta/css/selectors/user-invalid-form-submission-invalidation.html.ini
@@ -0,0 +1,2 @@
+[user-invalid-form-submission-invalidation.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/custom-elements/upgrading/upgrade-custom-element-error-event.html.ini b/tests/wpt/meta/custom-elements/upgrading/upgrade-custom-element-error-event.html.ini
new file mode 100644
index 00000000000..5cfdd53de47
--- /dev/null
+++ b/tests/wpt/meta/custom-elements/upgrading/upgrade-custom-element-error-event.html.ini
@@ -0,0 +1,12 @@
+[upgrade-custom-element-error-event.html]
+ [autonomous: exception thrown in constructor is reported to definition's global]
+ expected: FAIL
+
+ [autonomous: exception thrown by spec due to invalid element state is reported to definition's global]
+ expected: FAIL
+
+ [customized built-in: exception thrown in constructor is reported to definition's global]
+ expected: FAIL
+
+ [customized built-in: exception thrown by spec due to not returning the same value is reported to definition's global]
+ expected: FAIL
diff --git a/tests/wpt/meta/dom/observable/tentative/observable-event-target.any.js.ini b/tests/wpt/meta/dom/observable/tentative/observable-event-target.any.js.ini
index 94327ea5e4c..2749f4a2401 100644
--- a/tests/wpt/meta/dom/observable/tentative/observable-event-target.any.js.ini
+++ b/tests/wpt/meta/dom/observable/tentative/observable-event-target.any.js.ini
@@ -8,6 +8,9 @@
[EventTarget Observables can multicast subscriptions for event handling]
expected: FAIL
+ [EventTarget.when() returns an Observable]
+ expected: FAIL
+
[observable-event-target.any.html]
[EventTarget.on() returns an Observable]
@@ -18,3 +21,6 @@
[EventTarget Observables can multicast subscriptions for event handling]
expected: FAIL
+
+ [EventTarget.when() returns an Observable]
+ expected: FAIL
diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini
deleted file mode 100644
index 3e07e6b7d1f..00000000000
--- a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[empty-iframe-load-event.html]
- [Check execution order from nested timeout]
- expected: FAIL
-
- [Check execution order on load handler]
- expected: FAIL
diff --git a/tests/wpt/meta/html/browsers/windows/embedded-opener-remove-frame.html.ini b/tests/wpt/meta/html/browsers/windows/embedded-opener-remove-frame.html.ini
index c43a5aa58f3..91030fe2f7f 100644
--- a/tests/wpt/meta/html/browsers/windows/embedded-opener-remove-frame.html.ini
+++ b/tests/wpt/meta/html/browsers/windows/embedded-opener-remove-frame.html.ini
@@ -1,4 +1,5 @@
[embedded-opener-remove-frame.html]
+ expected: CRASH
[opener of discarded nested browsing context]
expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-adopt-lazy-iframe-from-script-disabled-document.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-adopt-lazy-iframe-from-script-disabled-document.html.ini
new file mode 100644
index 00000000000..6ce0847ab9a
--- /dev/null
+++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-adopt-lazy-iframe-from-script-disabled-document.html.ini
@@ -0,0 +1,3 @@
+[iframe-loading-lazy-adopt-lazy-iframe-from-script-disabled-document.html]
+ [Test lazy loading iframe remains lazy loading originally createdin a script-disabled document, then got adopted to a regular document]
+ expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-cross-site.tentative.sub.window.js.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-cross-site.tentative.sub.window.js.ini
index dd7548a86bc..8af95703e25 100644
--- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-cross-site.tentative.sub.window.js.ini
+++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-cross-site.tentative.sub.window.js.ini
@@ -1,6 +1,7 @@
[sandbox-top-navigation-cross-site.tentative.sub.window.html]
+ expected: TIMEOUT
[A cross-site unsandboxed iframe navigation consumes user activation and disallows top-level navigation.]
- expected: FAIL
+ expected: TIMEOUT
[A same-site unsandboxed iframe navigation does not consume user activation and allows top-level navigation.]
expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-same-site.tentative.sub.window.js.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-same-site.tentative.sub.window.js.ini
index 3854de9c802..653b5a8ed9a 100644
--- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-same-site.tentative.sub.window.js.ini
+++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-same-site.tentative.sub.window.js.ini
@@ -1,3 +1,4 @@
[sandbox-top-navigation-same-site.tentative.sub.window.html]
+ expected: TIMEOUT
[A same-site unsandboxed iframe navigation does not consume user activation and allows top-level navigation.]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-user-activation-sticky.tentative.sub.window.js.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-user-activation-sticky.tentative.sub.window.js.ini
index c2f7bee1885..5bccf008873 100644
--- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-user-activation-sticky.tentative.sub.window.js.ini
+++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/sandbox-top-navigation-user-activation-sticky.tentative.sub.window.js.ini
@@ -1,3 +1,4 @@
[sandbox-top-navigation-user-activation-sticky.tentative.sub.window.html]
+ expected: TIMEOUT
[Allow top with user activation + user activation]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-img-element/update-the-image-data/not-broken-while-load-task-scheduled.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-img-element/update-the-image-data/not-broken-while-load-task-scheduled.html.ini
new file mode 100644
index 00000000000..f245426830c
--- /dev/null
+++ b/tests/wpt/meta/html/semantics/embedded-content/the-img-element/update-the-image-data/not-broken-while-load-task-scheduled.html.ini
@@ -0,0 +1,6 @@
+[not-broken-while-load-task-scheduled.html]
+ [run_test("src")]
+ expected: FAIL
+
+ [run_test("srcset")]
+ expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-even-less-good-value-rendering.html.ini b/tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-even-less-good-value-rendering.html.ini
new file mode 100644
index 00000000000..a2c63dbc379
--- /dev/null
+++ b/tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-even-less-good-value-rendering.html.ini
@@ -0,0 +1,2 @@
+[meter-appearance-none-even-less-good-value-rendering.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-optimum-value-rendering.html.ini b/tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-optimum-value-rendering.html.ini
new file mode 100644
index 00000000000..d9fbcd92b97
--- /dev/null
+++ b/tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-optimum-value-rendering.html.ini
@@ -0,0 +1,2 @@
+[meter-appearance-none-optimum-value-rendering.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-rendering.html.ini b/tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-rendering.html.ini
new file mode 100644
index 00000000000..6c44a772c80
--- /dev/null
+++ b/tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-rendering.html.ini
@@ -0,0 +1,2 @@
+[meter-appearance-none-rendering.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-suboptimum-value-rendering.html.ini b/tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-suboptimum-value-rendering.html.ini
new file mode 100644
index 00000000000..d2e3a48dcb8
--- /dev/null
+++ b/tests/wpt/meta/html/semantics/forms/the-meter-element/meter-appearance-none-suboptimum-value-rendering.html.ini
@@ -0,0 +1,2 @@
+[meter-appearance-none-suboptimum-value-rendering.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/dom/ranges/Range-isPointInRange-shadowdom.tentative.html.ini b/tests/wpt/meta/selection/shadow-dom/tentative/Range-isPointInRange.html.ini
index f7d05f3cb47..d406bfaf706 100644
--- a/tests/wpt/meta/dom/ranges/Range-isPointInRange-shadowdom.tentative.html.ini
+++ b/tests/wpt/meta/selection/shadow-dom/tentative/Range-isPointInRange.html.ini
@@ -1,4 +1,4 @@
-[Range-isPointInRange-shadowdom.tentative.html]
+[Range-isPointInRange.html]
[isPointInRange() test for collapsed selection]
expected: FAIL
diff --git a/tests/wpt/meta/selection/shadow-dom/tentative/Selection-collapse-and-extend.html.ini b/tests/wpt/meta/selection/shadow-dom/tentative/Selection-collapse-and-extend.html.ini
new file mode 100644
index 00000000000..a3cd198ca4d
--- /dev/null
+++ b/tests/wpt/meta/selection/shadow-dom/tentative/Selection-collapse-and-extend.html.ini
@@ -0,0 +1,12 @@
+[Selection-collapse-and-extend.html]
+ [collapse can set selection to a node inside a shadow tree]
+ expected: FAIL
+
+ [collapse abort steps when called with a disconnected node inside a shadow tree]
+ expected: FAIL
+
+ [extend can set selection to a node inside a shadow tree]
+ expected: FAIL
+
+ [extend abort steps when called with a disconnected node inside a shadow tree]
+ expected: FAIL
diff --git a/tests/wpt/meta/selection/shadow-dom/tentative/Selection-getComposedRanges-collapsed.html.ini b/tests/wpt/meta/selection/shadow-dom/tentative/Selection-getComposedRanges-collapsed.html.ini
new file mode 100644
index 00000000000..0ff0a234b15
--- /dev/null
+++ b/tests/wpt/meta/selection/shadow-dom/tentative/Selection-getComposedRanges-collapsed.html.ini
@@ -0,0 +1,6 @@
+[Selection-getComposedRanges-collapsed.html]
+ [Setting the range to nodes that aren't in the same tree collapses both composed and non-composed ranges.]
+ expected: FAIL
+
+ [Setting the range to nodes in different shadow trees collapses ordinary ranges, but does not collapse composed ranges.]
+ expected: FAIL
diff --git a/tests/wpt/meta/selection/shadow-dom/tentative/Selection-getComposedRanges.html.ini b/tests/wpt/meta/selection/shadow-dom/tentative/Selection-getComposedRanges.html.ini
new file mode 100644
index 00000000000..4710aa44101
--- /dev/null
+++ b/tests/wpt/meta/selection/shadow-dom/tentative/Selection-getComposedRanges.html.ini
@@ -0,0 +1,36 @@
+[Selection-getComposedRanges.html]
+ [getComposedRanges returns an empty sequence when there is no selection]
+ expected: FAIL
+
+ [getComposedRanges should fail if argument is not a shadow root]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range when there is a forward-direction selection in the document tree]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range when there is a backward-direction selection in the document tree]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range pointing to a shadaw tree when there is a selection in the shadow tree and the shadow tree is specified as an argument]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range pointing to the shadow host when there is a selection in a shadow tree and the shadow tree is not specified as an argument]
+ expected: FAIL
+
+ [getComposedRanges a sequence with a static range pointing to the shadow host when there is a forward selection that crosses shadow boundaries and the shadow tree is not specified as an argument]
+ expected: FAIL
+
+ [getComposedRanges a sequence with a static range that crosses shadow boundaries when there is a forward selection that crosses shadow boundaries and the shadow tree is specified as an argument]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range pointing to the outer shadow host when there is a selection in an inner shadow tree and no shadow tree is specified as an argument]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range pointing to the inner shadow tree when there is a selection in an inner shadow tree and the inner shadow tree is specified as an argument]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range pointing to the outer shadow tree when there is a selection in an inner shadow tree and the outer shadow tree is specified as an argument]
+ expected: FAIL
+
+ [getComposedRanges returns a sequence with a static range without rescoping when there is a selection in an outer shadow tree and the inner shadow tree is specified as an argument]
+ expected: FAIL
diff --git a/tests/wpt/meta-legacy-layout/selection/shadow-dom/select-later-become-slotted-content.tentative.html.ini b/tests/wpt/meta/selection/shadow-dom/tentative/Selection-later-become-slotted-content.html.ini
index 1a6fbc450ce..56d8909ef26 100644
--- a/tests/wpt/meta-legacy-layout/selection/shadow-dom/select-later-become-slotted-content.tentative.html.ini
+++ b/tests/wpt/meta/selection/shadow-dom/tentative/Selection-later-become-slotted-content.html.ini
@@ -1,3 +1,3 @@
-[select-later-become-slotted-content.tentative.html]
+[Selection-later-become-slotted-content.html]
[test to select a light DOM element and it becomes a slotted content after the selection]
expected: FAIL
diff --git a/tests/wpt/meta/url/failure.html.ini b/tests/wpt/meta/url/failure.html.ini
index 39883779755..a3abebff51e 100644
--- a/tests/wpt/meta/url/failure.html.ini
+++ b/tests/wpt/meta/url/failure.html.ini
@@ -1,5 +1,4 @@
[failure.html]
- expected: CRASH
[Location's href: a// should throw]
expected: FAIL
diff --git a/tests/wpt/meta/webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.html.ini b/tests/wpt/meta/webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.html.ini
deleted file mode 100644
index 76d85b5bdf6..00000000000
--- a/tests/wpt/meta/webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.html]
- expected: TIMEOUT
- [StorageKey: test 3P about:blank window opened from a 3P iframe]
- expected: TIMEOUT
diff --git a/tests/wpt/meta/webxr/render_state_update.https.html.ini b/tests/wpt/meta/webxr/render_state_update.https.html.ini
index b54c718bef8..5b1e5777f13 100644
--- a/tests/wpt/meta/webxr/render_state_update.https.html.ini
+++ b/tests/wpt/meta/webxr/render_state_update.https.html.ini
@@ -1,4 +1,5 @@
[render_state_update.https.html]
+ expected: ERROR
[updateRenderState clamps appropriately near/far clipping planes - webgl]
expected: FAIL
diff --git a/tests/wpt/meta/workers/WorkerGlobalScope-close.html.ini b/tests/wpt/meta/workers/WorkerGlobalScope-close.html.ini
deleted file mode 100644
index 24daae4c2e7..00000000000
--- a/tests/wpt/meta/workers/WorkerGlobalScope-close.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[WorkerGlobalScope-close.html]
- [Test sending a message after closing.]
- expected: FAIL
diff --git a/tests/wpt/tests/IndexedDB/back-forward-cache-open-connection.window.js b/tests/wpt/tests/IndexedDB/back-forward-cache-open-connection.window.js
index db51daa121c..d3355f2a733 100644
--- a/tests/wpt/tests/IndexedDB/back-forward-cache-open-connection.window.js
+++ b/tests/wpt/tests/IndexedDB/back-forward-cache-open-connection.window.js
@@ -15,21 +15,21 @@ promise_test(async t => {
const rc1 = await rcHelper.addWindow(
/*config=*/ null, /*options=*/ {features: 'noopener'});
- await createIndexedDBForTesting(rc1, 'test_idb', 1);
+ const prefix = t.name + Math.random();
+ const dbname1 = prefix + "_1";
+ const dbname2 = prefix + "_2";
+ await waitUntilIndexedDBOpenForTesting(rc1, dbname1, 1);
await assertBFCacheEligibility(rc1, /*shouldRestoreFromBFCache=*/ true);
// The page is ensured to be eligible for BFCache even with open connection,
// otherwise the previous assertion will fail with PRECONDITION_FAILED.
// Now we can test if the versionchange event will evict the BFCache.
- await createIndexedDBForTesting(rc1, 'test_idb_2', 1);
+ await waitUntilIndexedDBOpenForTesting(rc1, dbname2, 1);
const rc2 = await rc1.navigateToNew();
// Create an IndexedDB database with higher version.
- await createIndexedDBForTesting(rc2, 'test_idb_2', 2);
- await rc2.historyBack();
- // The previous page receiving versionchange event should be evicted with the
- // correct reason.
- // `kIgnoreEventAndEvict` will be reported as "masked".
- // See `NotRestoredReasonToReportString()`.
- await assertNotRestoredFromBFCache(rc1, ['masked']);
+ // This will fire a version change event on existing connection with the
+ // same database name. The new database will only be opened if the existing
+ // connection is closed on receiving the event.
+ await waitUntilIndexedDBOpenForTesting(rc2, dbname2, 2);
});
diff --git a/tests/wpt/tests/IndexedDB/back-forward-cache-open-transaction.window.js b/tests/wpt/tests/IndexedDB/back-forward-cache-open-transaction.window.js
index 50d3c1f0d12..fca9cb2fb78 100644
--- a/tests/wpt/tests/IndexedDB/back-forward-cache-open-transaction.window.js
+++ b/tests/wpt/tests/IndexedDB/back-forward-cache-open-transaction.window.js
@@ -14,11 +14,12 @@ promise_test(async t => {
const rc1 = await rcHelper.addWindow(
/*config=*/ null, /*options=*/ {features: 'noopener'});
- await rc1.executeScript(() => {
+ const dbname = t.name + Math.random();
+ await rc1.executeScript((dbname) => {
return new Promise(resolve => {
// Create an IndexedDB database and the object store named `store` as the
// test scope for the transaction later on.
- const db = indexedDB.open(/*name=*/ 'test_idb', /*version=*/ 1);
+ const db = indexedDB.open(/*name=*/ dbname, /*version=*/ 1);
db.onupgradeneeded = () => {
db.result.createObjectStore('store');
addEventListener('pagehide', () => {
@@ -36,7 +37,7 @@ promise_test(async t => {
resolve();
};
});
- });
+ }, [dbname]);
await assertBFCacheEligibility(rc1, /*shouldRestoreFromBFCache=*/ true);
});
diff --git a/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore.any.js b/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore.any.js
new file mode 100644
index 00000000000..0aad5dcfb77
--- /dev/null
+++ b/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore.any.js
@@ -0,0 +1,167 @@
+// META: global=window,worker
+// META: title=IDBCursor.delete() - object store
+// META: script=resources/support.js
+
+'use strict';
+
+function createObjectStoreAndPopulate(db, records) {
+ let objStore = db.createObjectStore("test", { keyPath: "pKey" });
+
+ for (let i = 0; i < records.length; i++) {
+ objStore.add(records[i]);
+ }
+ return objStore;
+}
+
+function setOnUpgradeNeeded(dbObj, records) {
+ return function (event) {
+ dbObj.db = event.target.result;
+ createObjectStoreAndPopulate(dbObj.db, records);
+ };
+}
+
+async_test(t => {
+ let dbObj = {}, count = 0;
+ const records = [{ pKey: "primaryKey_0" }, { pKey: "primaryKey_1" }];
+
+ let open_rq = createdb(t);
+ open_rq.onupgradeneeded = setOnUpgradeNeeded(dbObj, records);
+
+ open_rq.onsuccess = t.step_func(CursorDeleteRecord);
+
+
+ function CursorDeleteRecord(e) {
+ let txn = dbObj.db.transaction("test", "readwrite", { durability: 'relaxed' });
+ let cursor_rq = txn.objectStore("test").openCursor();
+
+ cursor_rq.onsuccess = t.step_func(function (e) {
+ let cursor = e.target.result;
+
+ assert_true(cursor != null, "cursor exist");
+ cursor.delete();
+ });
+
+ txn.oncomplete = t.step_func(VerifyRecordWasDeleted);
+ }
+
+
+ function VerifyRecordWasDeleted(e) {
+ let cursor_rq = dbObj.db.transaction("test", "readonly", { durability: 'relaxed' })
+ .objectStore("test")
+ .openCursor();
+
+ cursor_rq.onsuccess = t.step_func(function (e) {
+ let cursor = e.target.result;
+
+ if (!cursor) {
+ assert_equals(count, 1, 'count');
+ t.done();
+ }
+
+ assert_equals(cursor.value.pKey, records[1].pKey);
+ count++;
+ cursor.continue();
+ });
+ }
+
+}, "Remove a record from the object store ");
+
+async_test(t => {
+ let dbObj = {};
+ const records = [
+ { pKey: "primaryKey_0", iKey: "indexKey_0" },
+ { pKey: "primaryKey_1", iKey: "indexKey_1" }
+ ];
+
+ let open_rq = createdb(t);
+ open_rq.onupgradeneeded = setOnUpgradeNeeded(dbObj, records);
+
+ open_rq.onsuccess = function (e) {
+ let cursor_rq = dbObj.db.transaction("test", "readonly", { durability: 'relaxed' })
+ .objectStore("test")
+ .openCursor();
+
+ cursor_rq.onsuccess = t.step_func(function (e) {
+ let cursor = e.target.result;
+
+ assert_true(cursor != null, "cursor exist");
+ assert_throws_dom('ReadOnlyError', function () { cursor.delete(); });
+ t.done();
+ });
+ }
+
+}, "Attempt to remove a record in a read-only transaction");
+
+async_test(t => {
+
+ let db;
+ const records = [
+ { pKey: "primaryKey_0", iKey: "indexKey_0" },
+ { pKey: "primaryKey_1", iKey: "indexKey_1" }
+ ];
+
+ let open_rq = createdb(t);
+ open_rq.onupgradeneeded = function (e) {
+ db = e.target.result;
+ let objStore = createObjectStoreAndPopulate(db, records);
+ let cursor_rq = objStore.openCursor();
+
+ cursor_rq.onsuccess = t.step_func(function (e) {
+ let cursor = e.target.result;
+ assert_true(cursor instanceof IDBCursor, "cursor exist");
+ self.cursor = cursor;
+ });
+
+ e.target.transaction.oncomplete = t.step_func(function (e) {
+ assert_throws_dom('TransactionInactiveError',
+ function () { self.cursor.delete(); })
+
+ t.done();
+ });
+ }
+
+}, "Index - attempt to remove a record in an inactive transaction");
+
+async_test(t => {
+
+ let db;
+ const records = [{ pKey: "primaryKey_0" }, { pKey: "primaryKey_1" }];
+
+ let open_rq = createdb(t);
+ open_rq.onupgradeneeded = function (event) {
+ db = event.target.result;
+ let objStore = createObjectStoreAndPopulate(db, records);
+ let rq = objStore.openCursor();
+ rq.onsuccess = t.step_func(function (event) {
+ let cursor = event.target.result;
+ assert_true(cursor instanceof IDBCursor, "cursor exist");
+
+ db.deleteObjectStore("test");
+ assert_throws_dom("InvalidStateError", function () { cursor.delete(); });
+
+ t.done();
+ });
+ }
+
+}, "If the cursor's source or effective object store has been deleted, the implementation MUST throw a DOMException of type InvalidStateError");
+
+async_test(t => {
+ let dbObj = {};
+ const records = [{ pKey: "primaryKey_0" }, { pKey: "primaryKey_1" }];
+
+ let open_rq = createdb(t);
+ open_rq.onupgradeneeded = setOnUpgradeNeeded(dbObj, records);
+ open_rq.onsuccess = function (event) {
+ let txn = dbObj.db.transaction("test", "readwrite", { durability: 'relaxed' });
+ let rq = txn.objectStore("test").openCursor();
+ rq.onsuccess = t.step_func(function (event) {
+ let cursor = event.target.result;
+ assert_true(cursor instanceof IDBCursor, "cursor exist");
+
+ cursor.continue();
+ assert_throws_dom("InvalidStateError", function () { cursor.delete(); });
+
+ t.done();
+ });
+ }
+}, "Throw InvalidStateError when the cursor is being iterated");
diff --git a/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore.htm b/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore.htm
deleted file mode 100644
index f79206295a6..00000000000
--- a/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore.htm
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE html>
-<title>IDBCursor.delete() - object store - remove a record from the object store </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-
- var db,
- count = 0,
- t = async_test(),
- records = [ { pKey: "primaryKey_0" },
- { pKey: "primaryKey_1" } ];
-
- var open_rq = createdb(t);
- open_rq.onupgradeneeded = function(e) {
- db = e.target.result;
-
- var objStore = db.createObjectStore("test", { keyPath: "pKey" });
-
- for (var i = 0; i < records.length; i++)
- objStore.add(records[i]);
- };
-
- open_rq.onsuccess = t.step_func(CursorDeleteRecord);
-
-
- function CursorDeleteRecord(e) {
- var txn = db.transaction("test", "readwrite", {durability: 'relaxed'}),
- cursor_rq = txn.objectStore("test").openCursor();
-
- cursor_rq.onsuccess = t.step_func(function(e) {
- var cursor = e.target.result;
-
- assert_true(cursor != null, "cursor exist");
- cursor.delete();
- });
-
- txn.oncomplete = t.step_func(VerifyRecordWasDeleted);
- }
-
-
- function VerifyRecordWasDeleted(e) {
- var cursor_rq = db.transaction("test", "readonly", {durability: 'relaxed'})
- .objectStore("test")
- .openCursor();
-
- cursor_rq.onsuccess = t.step_func(function(e) {
- var cursor = e.target.result;
-
- if (!cursor) {
- assert_equals(count, 1, 'count');
- t.done();
- }
-
- assert_equals(cursor.value.pKey, records[1].pKey);
- count++;
- cursor.continue();
- });
- }
-
-</script>
-
-<div id="log"></div>
diff --git a/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore2.htm b/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore2.htm
deleted file mode 100644
index ef3c1e57a25..00000000000
--- a/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore2.htm
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE html>
-<title>IDBCursor.delete() - object store - attempt to remove a record in a read-only transaction</title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
- var db,
- t = async_test(),
- records = [ { pKey: "primaryKey_0", iKey: "indexKey_0" },
- { pKey: "primaryKey_1", iKey: "indexKey_1" } ];
-
- var open_rq = createdb(t);
- open_rq.onupgradeneeded = function(e) {
- db = e.target.result;
-
- var objStore = db.createObjectStore("test", { keyPath: "pKey" });
-
- for (var i = 0; i < records.length; i++)
- objStore.add(records[i]);
- };
-
- open_rq.onsuccess = function(e) {
- var cursor_rq = db.transaction("test", "readonly", {durability: 'relaxed'})
- .objectStore("test")
- .openCursor();
-
- cursor_rq.onsuccess = t.step_func(function(e) {
- var cursor = e.target.result;
-
- assert_true(cursor != null, "cursor exist");
- assert_throws_dom('ReadOnlyError', function() { cursor.delete(); });
- t.done();
- });
- }
-
-</script>
-
-<div id="log"></div>
diff --git a/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore3.htm b/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore3.htm
deleted file mode 100644
index 4a4ea736c41..00000000000
--- a/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore3.htm
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE html>
-<title>IDBCursor.delete() - index - attempt to remove a record in an inactive transaction</title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-
-<script>
-
- var db,
- t = async_test(),
- records = [ { pKey: "primaryKey_0", iKey: "indexKey_0" },
- { pKey: "primaryKey_1", iKey: "indexKey_1" } ];
-
- var open_rq = createdb(t);
- open_rq.onupgradeneeded = function(e) {
- db = e.target.result;
- var objStore = db.createObjectStore("test", { keyPath: "pKey" });
-
- for (var i = 0; i < records.length; i++)
- objStore.add(records[i]);
-
- var cursor_rq = objStore.openCursor();
-
- cursor_rq.onsuccess = t.step_func(function(e) {
- var cursor = e.target.result;
- assert_true(cursor instanceof IDBCursor, "cursor exist");
- window.cursor = cursor;
- });
-
- e.target.transaction.oncomplete = t.step_func(function(e) {
- assert_throws_dom('TransactionInactiveError', function() { window.cursor.delete(); })
- t.done();
- });
- }
-
-</script>
-
-<div id="log"></div>
diff --git a/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore4.htm b/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore4.htm
deleted file mode 100644
index 5ecdb4bf179..00000000000
--- a/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore4.htm
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBCursor.delete() - object store - throw InvalidStateError caused by object store been deleted</title>
-<link rel="author" title="Intel" href="http://www.intel.com">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-<div id="log"></div>
-<script>
-
- var db,
- t = async_test(),
- records = [{ pKey: "primaryKey_0"},
- { pKey: "primaryKey_1"}];
-
- var open_rq = createdb(t);
- open_rq.onupgradeneeded = function (event) {
- db = event.target.result;
- var objStore = db.createObjectStore("store", {keyPath:"pKey"});
- for (var i = 0; i < records.length; i++) {
- objStore.add(records[i]);
- }
- var rq = objStore.openCursor();
- rq.onsuccess = t.step_func(function(event) {
- var cursor = event.target.result;
- assert_true(cursor instanceof IDBCursor, "cursor exist");
-
- db.deleteObjectStore("store");
- assert_throws_dom("InvalidStateError", function() {
- cursor.delete();
- }, "If the cursor's source or effective object store has been deleted, the implementation MUST throw a DOMException of type InvalidStateError");
-
- t.done();
- });
- }
-
-</script>
diff --git a/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore5.htm b/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore5.htm
deleted file mode 100644
index e17ade88f57..00000000000
--- a/tests/wpt/tests/IndexedDB/idbcursor_delete_objectstore5.htm
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBCursor.delete() - object store - throw InvalidStateError when the cursor is being iterated</title>
-<link rel="author" title="Intel" href="http://www.intel.com">
-<link rel="help" href="https://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBCursor-delete-IDBRequest">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-<div id="log"></div>
-<script>
- var db,
- t = async_test(),
- records = [{ pKey: "primaryKey_0"},
- { pKey: "primaryKey_1"}];
-
- var open_rq = createdb(t);
- open_rq.onupgradeneeded = function (event) {
- db = event.target.result;
- var objStore = db.createObjectStore("store", {keyPath:"pKey"});
- for (var i = 0; i < records.length; i++) {
- objStore.add(records[i]);
- }
- }
-
- open_rq.onsuccess = function (event) {
- var txn = db.transaction("store", "readwrite", {durability: 'relaxed'});
- var rq = txn.objectStore("store").openCursor();
- rq.onsuccess = t.step_func(function(event) {
- var cursor = event.target.result;
- assert_true(cursor instanceof IDBCursor, "cursor exist");
-
- cursor.continue();
- assert_throws_dom("InvalidStateError", function() {
- cursor.delete();
- });
-
- t.done();
- });
- }
-</script>
-
diff --git a/tests/wpt/tests/IndexedDB/idbobjectstore_count.any.js b/tests/wpt/tests/IndexedDB/idbobjectstore_count.any.js
new file mode 100644
index 00000000000..c28ba5caf81
--- /dev/null
+++ b/tests/wpt/tests/IndexedDB/idbobjectstore_count.any.js
@@ -0,0 +1,95 @@
+// META: global=window,worker
+// META: title=IDBObjectStore.count()
+// META: script=resources/support.js
+
+'use strict';
+
+async_test(t => {
+ let db;
+
+ let open_rq = createdb(t);
+
+ open_rq.onupgradeneeded = function(e) {
+ db = e.target.result;
+ let store = db.createObjectStore("store");
+
+ for(let i = 0; i < 10; i++) {
+ store.add({ data: "data" + i }, i);
+ }
+ }
+
+ open_rq.onsuccess = function(e) {
+ let rq = db.transaction("store", "readonly", {durability: 'relaxed'})
+ .objectStore("store")
+ .count();
+
+ rq.onsuccess = t.step_func(function(e) {
+ assert_equals(e.target.result, 10);
+ t.done();
+ });
+ }
+}, "Returns the number of records in the object store ");
+
+async_test(t => {
+ let db;
+
+ let open_rq = createdb(t);
+
+ open_rq.onupgradeneeded = function(e) {
+ db = e.target.result;
+ let store = db.createObjectStore("store");
+
+ for(let i = 0; i < 10; i++) {
+ store.add({ data: "data" + i }, i);
+ }
+ }
+
+ open_rq.onsuccess = function(e) {
+ let rq = db.transaction("store", "readonly", {durability: 'relaxed'})
+ .objectStore("store")
+ .count(IDBKeyRange.bound(5, 20));
+
+ rq.onsuccess = t.step_func(function(e) {
+ assert_equals(e.target.result, 5);
+ t.done();
+ });
+ }
+}, "Returns the number of records that have keys within the range ");
+
+async_test(t => {
+ let db
+
+ createdb(t).onupgradeneeded = function(e) {
+ db = e.target.result
+
+ let store = db.createObjectStore("store", { keyPath: "k" })
+
+ for (let i = 0; i < 5; i++)
+ store.add({ k: "key_" + i });
+
+ store.count("key_2").onsuccess = t.step_func(function(e) {
+ assert_equals(e.target.result, 1, "count(key_2)")
+
+ store.count("key_").onsuccess = t.step_func(function(e) {
+ assert_equals(e.target.result, 0, "count(key_)")
+ t.done()
+ })
+ })
+ }
+
+}, "Returns the number of records that have keys with the key");
+
+async_test(t => {
+ let db, ostore;
+
+ let open_rq = createdb(t);
+ open_rq.onupgradeneeded = function (event) {
+ db = event.target.result;
+ ostore = db.createObjectStore("store", {keyPath:"pKey"});
+ db.deleteObjectStore("store");
+ assert_throws_dom("InvalidStateError", function(){
+ ostore.count();
+ });
+ t.done();
+ }
+}, "If the object store has been deleted, the implementation must throw a DOMException of type InvalidStateError ");
diff --git a/tests/wpt/tests/IndexedDB/idbobjectstore_count.htm b/tests/wpt/tests/IndexedDB/idbobjectstore_count.htm
deleted file mode 100644
index 6466d580416..00000000000
--- a/tests/wpt/tests/IndexedDB/idbobjectstore_count.htm
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>IDBObjectStore.count() - returns the number of records in the object store </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=resources/support.js></script>
-
-<script>
- var db, t = async_test();
-
- var open_rq = createdb(t);
-
- open_rq.onupgradeneeded = function(e) {
- db = e.target.result;
- var store = db.createObjectStore("store");
-
- for(var i = 0; i < 10; i++) {
- store.add({ data: "data" + i }, i);
- }
- }
-
- open_rq.onsuccess = function(e) {
- var rq = db.transaction("store", "readonly", {durability: 'relaxed'})
- .objectStore("store")
- .count();
-
- rq.onsuccess = t.step_func(function(e) {
- assert_equals(e.target.result, 10);
- t.done();
- });
- }
-</script>
-
-<div id=log></div>
diff --git a/tests/wpt/tests/IndexedDB/idbobjectstore_count2.htm b/tests/wpt/tests/IndexedDB/idbobjectstore_count2.htm
deleted file mode 100644
index 6152eaf76e3..00000000000
--- a/tests/wpt/tests/IndexedDB/idbobjectstore_count2.htm
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>IDBObjectStore.count() - returns the number of records that have keys within the range </title>
-<link rel="author" title="Microsoft" href="http://www.microsoft.com">
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=resources/support.js></script>
-
-<script>
- var db, t = async_test();
-
- var open_rq = createdb(t);
-
- open_rq.onupgradeneeded = function(e) {
- db = e.target.result;
- var store = db.createObjectStore("store");
-
- for(var i = 0; i < 10; i++) {
- store.add({ data: "data" + i }, i);
- }
- }
-
- open_rq.onsuccess = function(e) {
- var rq = db.transaction("store", "readonly", {durability: 'relaxed'})
- .objectStore("store")
- .count(IDBKeyRange.bound(5,20));
-
- rq.onsuccess = t.step_func(function(e) {
- assert_equals(e.target.result, 5);
- t.done();
- });
- }
-</script>
-
-<div id=log></div>
diff --git a/tests/wpt/tests/IndexedDB/idbobjectstore_count3.htm b/tests/wpt/tests/IndexedDB/idbobjectstore_count3.htm
deleted file mode 100644
index 3d5fd17a226..00000000000
--- a/tests/wpt/tests/IndexedDB/idbobjectstore_count3.htm
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>IDBObjectStore.count() - returns the number of records that have keys with the key</title>
-<link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=resources/support.js></script>
-
-<script>
- var db
-
- createdb(async_test()).onupgradeneeded = function(e) {
- db = e.target.result
-
- var store = db.createObjectStore("store", { keyPath: "k" })
-
- for (var i = 0; i < 5; i++)
- store.add({ k: "key_" + i });
-
- store.count("key_2").onsuccess = this.step_func(function(e) {
- assert_equals(e.target.result, 1, "count(key_2)")
-
- store.count("key_").onsuccess = this.step_func(function(e) {
- assert_equals(e.target.result, 0, "count(key_)")
- this.done()
- })
- })
- }
-
-</script>
-<div id=log></div>
diff --git a/tests/wpt/tests/IndexedDB/idbobjectstore_count4.htm b/tests/wpt/tests/IndexedDB/idbobjectstore_count4.htm
deleted file mode 100644
index c328a91e33c..00000000000
--- a/tests/wpt/tests/IndexedDB/idbobjectstore_count4.htm
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>IDBObjectStore.count() - If the object store has been deleted, the implementation must throw a DOMException of type InvalidStateError </title>
-<link rel="author" title="Intel" href="http://www.intel.com">
-<link rel="help" href="https://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBObjectStore-count-IDBRequest-any-key">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/support.js"></script>
-<div id="log"></div>
-<script>
- var db,
- ostore,
- t = async_test();
-
- var open_rq = createdb(t);
- open_rq.onupgradeneeded = function (event) {
- db = event.target.result;
- ostore = db.createObjectStore("store", {keyPath:"pKey"});
- db.deleteObjectStore("store");
- assert_throws_dom("InvalidStateError", function(){
- ostore.count();
- });
- t.done();
- }
-</script>
diff --git a/tests/wpt/tests/IndexedDB/resources/support.js b/tests/wpt/tests/IndexedDB/resources/support.js
index 5036e504665..1d5d8df5ca3 100644
--- a/tests/wpt/tests/IndexedDB/resources/support.js
+++ b/tests/wpt/tests/IndexedDB/resources/support.js
@@ -226,3 +226,15 @@ async function createIndexedDBForTesting(rc, dbName, version) {
}
}, [dbName, version]);
}
+
+// Create an IndexedDB by executing script on the given remote context
+// with |dbName| and |version|, and wait for the reuslt.
+async function waitUntilIndexedDBOpenForTesting(rc, dbName, version) {
+ await rc.executeScript(async (dbName, version) => {
+ await new Promise((resolve, reject) => {
+ let request = indexedDB.open(dbName, version);
+ request.onsuccess = resolve;
+ request.onerror = reject;
+ });
+ }, [dbName, version]);
+}
diff --git a/tests/wpt/tests/accessibility/crashtests/missing-parent-map.html b/tests/wpt/tests/accessibility/crashtests/missing-parent-map.html
new file mode 100644
index 00000000000..a6de311b5fb
--- /dev/null
+++ b/tests/wpt/tests/accessibility/crashtests/missing-parent-map.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html class="test-wait">
+<input type=checkbox>
+<div></div>
+<map name="map1">
+ <details style="visibility: collapse">
+ </details>
+</map>
+<img usemap="#map1">
+<map name="map1" class="duplicate-map">
+
+<script>
+document.addEventListener('DOMContentLoaded', () => {
+ requestAnimationFrame(() => {
+ requestAnimationFrame(() => {
+ const div = document.querySelector('div');
+ div.appendChild(document.querySelector('.duplicate-map'));
+ document.querySelector('input').checked = true; // Serialize immediately.
+ requestAnimationFrame(() => {
+ requestAnimationFrame(() => {
+ document.documentElement.className = '';
+ });
+ });
+ });
+ });
+});
+</script>
+</html>
diff --git a/tests/wpt/tests/accname/name/comp_name_from_content.html b/tests/wpt/tests/accname/name/comp_name_from_content.html
index e14c153f71d..32a9a7b3c43 100644
--- a/tests/wpt/tests/accname/name/comp_name_from_content.html
+++ b/tests/wpt/tests/accname/name/comp_name_from_content.html
@@ -254,12 +254,6 @@
<a href="#" data-expectedlabel="one two three" data-testname="link name from content for each child (no space, display:inline-block)" class="ex iblock"><span>one</span><span>two</span><span>three</span></a><br>
<br>
-
-<!-- TODO: Add clarification to the Name from Content section of accname. -->
-<!-- If an element’s text node is transformed with CSS text-transform, -->
-<!-- what should be exposed to the a11y tree? The original text or the -->
-<!-- transformed text? These tests assume the *original* text. -->
-
<h1 data-expectedlabel="Call us" data-testname="heading name from content with text-transform:none" class="ex" style="text-transform:none;">Call us</h1>
<h1 data-expectedlabel="CALL US" data-testname="heading name from content with text-transform:uppercase" class="ex" style="text-transform:uppercase;">Call us</h1>
<h1 data-expectedlabel="Call Us" data-testname="heading name from content with text-transform:capitalize" class="ex" style="text-transform:capitalize;">Call us</h1>
diff --git a/tests/wpt/tests/accname/name/comp_name_from_content.tentative.html b/tests/wpt/tests/accname/name/comp_name_from_content.tentative.html
index bcaf8db7471..d069652bba7 100644
--- a/tests/wpt/tests/accname/name/comp_name_from_content.tentative.html
+++ b/tests/wpt/tests/accname/name/comp_name_from_content.tentative.html
@@ -1,5 +1,5 @@
<!doctype html>
-<html>
+<html lang="en">
<head>
<title>Name Comp: Name From Content (Tentative)</title>
<meta charset="utf-8">
@@ -37,6 +37,14 @@
<img id="nested_image_label4" alt="image" aria-labelledby="nested_image_label4 crossref_link2" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==">
</h3>
+<!-- “びょういんのかんじゃサービス” means “Hospital patient services” -->
+<!-- text-transform:full-size-kana visually changes: -->
+<!-- 1. びょういん (byōin = hospital) into びよういん (biyōin = beauty parlor) -->
+<!-- 2. かんじゃ (kanja = patient) into かんじや (kanjiya = [no meaning]) -->
+<!-- ...causing the whole heading to become nonsensical. -->
+<h1>heading which visually transforms <span lang="ja">びょういん</span> (hospital) to <span lang="ja">びよういん</span> (beauty parlor) using CSS <code>text-transform:full-size-kana</code></h1>
+<h3 lang="ja" data-expectedlabel="びょういんのかんじゃサービス" data-testname="heading name from content with text-transform:full-size-kana" class="ex" style="text-transform:full-size-kana;">びょういんのかんじゃサービス</h3>
+
<script>
AriaUtils.verifyLabelsBySelector(".ex");
</script>
diff --git a/tests/wpt/tests/console/console-count-logging-manual.html b/tests/wpt/tests/console/console-count-logging-manual.html
new file mode 100644
index 00000000000..640729f1a21
--- /dev/null
+++ b/tests/wpt/tests/console/console-count-logging-manual.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Console Count - Logging Manual Test</title>
+<meta name="author" title="Dominic Farolino" href="mailto:domfarolino@gmail.com">
+<meta name="assert" content="Console count method default parameter should work">
+<link rel="help" href="https://console.spec.whatwg.org/#count">
+</head>
+<body>
+<p>Open the console inside the developer tools. It should contain four entries whose contents are:</p>
+<p><code>default: 1</code></p>
+<p><code>default: 2</code></p>
+<p><code>default: 3</code></p>
+<p><code>default: 4</code></p>
+
+<script>
+console.count();
+console.count(undefined);
+console.count("default");
+console.count({toString() {return "default"}});
+</script>
+</body>
+</html>
diff --git a/tests/wpt/tests/console/console-count-logging.html b/tests/wpt/tests/console/console-count-logging.html
deleted file mode 100644
index 4cdd607b7f2..00000000000
--- a/tests/wpt/tests/console/console-count-logging.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Test console log are present</title>
-<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>
- promise_test(async () => {
- await test_driver.bidi.log.entry_added.subscribe();
-
- // Create a promise that resolves when all the log entries are added.
- const log_entries_promise = new Promise(resolve => {
- const log_entries = [];
- test_driver.bidi.log.entry_added.on(event => {
- log_entries.push(event.text);
- if (log_entries.length === 4) {
- resolve(log_entries);
- }
- });
- });
-
- console.count();
- console.count(undefined);
- console.count("default");
- console.count({
- toString() {
- return "default"
- }
- });
-
- // Wait for the log entries to be added.
- const log_entries = await log_entries_promise;
-
- assert_array_equals(log_entries, [
- "default: 1",
- "default: 2",
- "default: 3",
- "default: 4"]);
- }, "Console count method default parameter should work");
-</script>
diff --git a/tests/wpt/tests/core-aam/deletion-manual.html b/tests/wpt/tests/core-aam/deletion-manual.html
index 4f6b0d7feb7..e94c0d076cd 100644
--- a/tests/wpt/tests/core-aam/deletion-manual.html
+++ b/tests/wpt/tests/core-aam/deletion-manual.html
@@ -45,7 +45,7 @@
],
[
"result",
- "AXAttributedStringForTextMarkerRange"
+ "AXAttributedStringForTextMarkerRange",
"contains",
"AXIsSuggestedDeletion"
]
diff --git a/tests/wpt/tests/core-aam/insertion-manual.html b/tests/wpt/tests/core-aam/insertion-manual.html
index 7b5fd809851..65956ef13c0 100644
--- a/tests/wpt/tests/core-aam/insertion-manual.html
+++ b/tests/wpt/tests/core-aam/insertion-manual.html
@@ -45,7 +45,7 @@
],
[
"result",
- "AXAttributedStringForTextMarkerRange"
+ "AXAttributedStringForTextMarkerRange",
"contains",
"AXIsSuggestedInsertion"
]
diff --git a/tests/wpt/tests/core-aam/mark-manual.html b/tests/wpt/tests/core-aam/mark-manual.html
index 8373fa133da..c7c1909a8fb 100644
--- a/tests/wpt/tests/core-aam/mark-manual.html
+++ b/tests/wpt/tests/core-aam/mark-manual.html
@@ -45,7 +45,7 @@
],
[
"result",
- "AXAttributedStringForTextMarkerRange"
+ "AXAttributedStringForTextMarkerRange",
"contains",
"AXHighlight"
]
diff --git a/tests/wpt/tests/core-aam/sectionfooter-manual.html b/tests/wpt/tests/core-aam/sectionfooter-manual.html
new file mode 100644
index 00000000000..f007f8b116d
--- /dev/null
+++ b/tests/wpt/tests/core-aam/sectionfooter-manual.html
@@ -0,0 +1,96 @@
+<!doctype html>
+<html>
+ <head>
+ <title>sectionfooter</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_FOOTER"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSectionFooter"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "section footer"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:sectionfooter"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Group"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "section footer"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "sectionfooter"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for sectionfooter.</p>
+ <div role="sectionfooter" id="test">content</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/tests/wpt/tests/core-aam/sectionheader-manual.html b/tests/wpt/tests/core-aam/sectionheader-manual.html
new file mode 100644
index 00000000000..24504622d6d
--- /dev/null
+++ b/tests/wpt/tests/core-aam/sectionheader-manual.html
@@ -0,0 +1,96 @@
+<!doctype html>
+<html>
+ <head>
+ <title>sectionheader</title>
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
+ <link rel="stylesheet" href="/wai-aria/scripts/manual.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/wai-aria/scripts/ATTAcomm.js"></script>
+ <script>
+ setup({explicit_timeout: true, explicit_done: true });
+
+ var theTest = new ATTAcomm(
+ {
+ "steps" : [
+ {
+ "element" : "test",
+ "test" : {
+ "ATK" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_HEADER"
+ ]
+ ],
+ "AXAPI" : [
+ [
+ "property",
+ "AXRole",
+ "is",
+ "AXGroup"
+ ],
+ [
+ "property",
+ "AXSubrole",
+ "is",
+ "AXSectionHeader"
+ ],
+ [
+ "property",
+ "AXRoleDescription",
+ "is",
+ "section header"
+ ]
+ ],
+ "IAccessible2" : [
+ [
+ "property",
+ "objectAttributes",
+ "contains",
+ "xml-roles:sectionheader"
+ ]
+ ],
+ "MSAA" : [
+ [
+ "property",
+ "role",
+ "is",
+ "ROLE_SYSTEM_GROUPING"
+ ]
+ ],
+ "UIA" : [
+ [
+ "property",
+ "ControlType",
+ "is",
+ "Group"
+ ],
+ [
+ "property",
+ "LocalizedControlType",
+ "is",
+ "section header"
+ ]
+ ]
+ },
+ "title" : "step 1",
+ "type" : "test"
+ }
+ ],
+ "title" : "sectionheader"
+}
+
+ ) ;
+ </script>
+ </head>
+ <body>
+ <p>This test examines the ARIA properties for sectionheader.</p>
+ <div role="sectionheader" id="test">content</div>
+
+ <div id="manualMode"></div>
+ <div id="log"></div>
+ <div id="ATTAmessages"></div>
+ </body>
+</html>
diff --git a/tests/wpt/tests/core-aam/suggestion-manual.html b/tests/wpt/tests/core-aam/suggestion-manual.html
index f31bcab8def..75ec9828925 100644
--- a/tests/wpt/tests/core-aam/suggestion-manual.html
+++ b/tests/wpt/tests/core-aam/suggestion-manual.html
@@ -39,7 +39,7 @@
],
[
"result",
- "AXAttributedStringForTextMarkerRange"
+ "AXAttributedStringForTextMarkerRange",
"contains",
"AXIsSuggestion"
]
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-auto-margins-1.html b/tests/wpt/tests/css/css-align/blocks/justify-self-auto-margins-1.html
new file mode 100644
index 00000000000..b54eb775114
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-auto-margins-1.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<meta name="assert" content="auto margins make justify-self have no effect" />
+<style>
+ #reference-overlapped-red {
+ position: absolute;
+ background-color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+ }
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.
+</p>
+
+<div id=reference-overlapped-red></div>
+
+<div style="width: 200px; margin-left: -50px;">
+ <div
+ style="width: 100px; height:100px; margin: auto; justify-self: right; background: green;">
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-auto-margins-2.html b/tests/wpt/tests/css/css-align/blocks/justify-self-auto-margins-2.html
new file mode 100644
index 00000000000..33c98d6c1df
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-auto-margins-2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<meta name="assert"
+ content="auto margins are calculated correctly when justify-self is specified but should have no effect" />
+<style>
+ #reference-overlapped-red {
+ position: absolute;
+ background-color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+ }
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.
+</p>
+
+<div id=reference-overlapped-red></div>
+
+<div style="width: 100px;">
+ <div
+ style="height:100px; margin: auto; justify-self: right; background: green;">
+ <div style="width: 50px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-block-in-inline.html b/tests/wpt/tests/css/css-align/blocks/justify-self-block-in-inline.html
new file mode 100644
index 00000000000..3a326016bc1
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-block-in-inline.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<meta name="assert"
+ content="block-in-inline width is stretched to its parent width, not sized as 'fit-content'" />
+
+<style>
+ .inline-block {
+ display: inline-block;
+ height: 50px;
+ background: lightblue;
+ }
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+
+<div style="justify-self: start; border: 1px solid;">
+ <span class="inline-block" style="width: 200px;">wide inline-block</span>
+ <div style="background: orange; height: 50px;" class="block-in-inline"
+ data-expected-width="200">
+ block-in-inline
+ </div>
+ <span class="inline-block" style="width: 100px;">inline-block</span>
+</div>
+
+<script>checkLayout('.block-in-inline')</script>
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-htb-ltr-htb.html b/tests/wpt/tests/css/css-align/blocks/justify-self-htb-ltr-htb.html
new file mode 100644
index 00000000000..6a285d84203
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-htb-ltr-htb.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: horizontal-tb;
+ direction: ltr;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: horizontal-tb;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-width="20" data-offset-x="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-width="40" data-offset-x="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-width="20" data-offset-x="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-width="40" data-offset-x="0"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-htb-ltr-vlr.html b/tests/wpt/tests/css/css-align/blocks/justify-self-htb-ltr-vlr.html
new file mode 100644
index 00000000000..b77e7e90013
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-htb-ltr-vlr.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: horizontal-tb;
+ direction: ltr;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: vertical-lr;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-width="20" data-offset-x="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-width="40" data-offset-x="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-width="20" data-offset-x="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-width="40" data-offset-x="0"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-htb-ltr-vrl.html b/tests/wpt/tests/css/css-align/blocks/justify-self-htb-ltr-vrl.html
new file mode 100644
index 00000000000..e8404b3e658
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-htb-ltr-vrl.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: horizontal-tb;
+ direction: ltr;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: vertical-rl;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-width="20" data-offset-x="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-width="40" data-offset-x="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-width="20" data-offset-x="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-width="40" data-offset-x="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-htb-rtl-htb.html b/tests/wpt/tests/css/css-align/blocks/justify-self-htb-rtl-htb.html
new file mode 100644
index 00000000000..2c7c46b4f40
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-htb-rtl-htb.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: horizontal-tb;
+ direction: rtl;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: horizontal-tb;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-width="20" data-offset-x="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-width="40" data-offset-x="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-width="20" data-offset-x="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-width="40" data-offset-x="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-htb-rtl-vlr.html b/tests/wpt/tests/css/css-align/blocks/justify-self-htb-rtl-vlr.html
new file mode 100644
index 00000000000..cedc61e9bd9
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-htb-rtl-vlr.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: horizontal-tb;
+ direction: rtl;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: vertical-lr;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-width="20" data-offset-x="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-width="40" data-offset-x="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-width="20" data-offset-x="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-width="40" data-offset-x="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-htb-rtl-vrl.html b/tests/wpt/tests/css/css-align/blocks/justify-self-htb-rtl-vrl.html
new file mode 100644
index 00000000000..7da8c4170e8
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-htb-rtl-vrl.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: horizontal-tb;
+ direction: rtl;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: vertical-rl;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-width="20" data-offset-x="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-width="40" data-offset-x="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-width="20" data-offset-x="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-width="20" data-offset-x="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-width="20" data-offset-x="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-width="40" data-offset-x="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-text-align.html b/tests/wpt/tests/css/css-align/blocks/justify-self-text-align.html
new file mode 100644
index 00000000000..71d1f5b94cf
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-text-align.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<meta name="assert" content="justify-self wins over text-align:-webkit-*" />
+<style>
+ #reference-overlapped-red {
+ position: absolute;
+ background-color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+ }
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.
+</p>
+
+<div id=reference-overlapped-red></div>
+
+<div style="width: 200px; text-align: -webkit-right;">
+ <div
+ style="width: 100px; height:100px; justify-self: left; background: green;">
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-ltr-htb.html b/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-ltr-htb.html
new file mode 100644
index 00000000000..be5716b19a2
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-ltr-htb.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: vertical-lr;
+ direction: ltr;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: horizontal-tb;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-ltr-vlr.html b/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-ltr-vlr.html
new file mode 100644
index 00000000000..69e96ba4e90
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-ltr-vlr.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: vertical-lr;
+ direction: ltr;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: vertical-lr;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-ltr-vrl.html b/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-ltr-vrl.html
new file mode 100644
index 00000000000..9c02b0f1130
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-ltr-vrl.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: vertical-lr;
+ direction: ltr;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: vertical-rl;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-rtl-htb.html b/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-rtl-htb.html
new file mode 100644
index 00000000000..fcd1a8124a2
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-rtl-htb.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: vertical-lr;
+ direction: rtl;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: horizontal-tb;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-rtl-vlr.html b/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-rtl-vlr.html
new file mode 100644
index 00000000000..480107d2f84
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-rtl-vlr.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: vertical-lr;
+ direction: rtl;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: vertical-lr;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-rtl-vrl.html b/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-rtl-vrl.html
new file mode 100644
index 00000000000..ecd7bc958b4
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-vlr-rtl-vrl.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: vertical-lr;
+ direction: rtl;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: vertical-rl;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-ltr-htb.html b/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-ltr-htb.html
new file mode 100644
index 00000000000..167c813a54c
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-ltr-htb.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: vertical-rl;
+ direction: ltr;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: horizontal-tb;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-ltr-vlr.html b/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-ltr-vlr.html
new file mode 100644
index 00000000000..cc303dda455
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-ltr-vlr.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: vertical-rl;
+ direction: ltr;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: vertical-lr;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-ltr-vrl.html b/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-ltr-vrl.html
new file mode 100644
index 00000000000..4ffc861a287
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-ltr-vrl.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: vertical-rl;
+ direction: ltr;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: vertical-rl;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-rtl-htb.html b/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-rtl-htb.html
new file mode 100644
index 00000000000..276b3bb1fd4
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-rtl-htb.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: vertical-rl;
+ direction: rtl;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: horizontal-tb;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-rtl-vlr.html b/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-rtl-vlr.html
new file mode 100644
index 00000000000..9f923772a56
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-rtl-vlr.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: vertical-rl;
+ direction: rtl;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: vertical-lr;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-rtl-vrl.html b/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-rtl-vrl.html
new file mode 100644
index 00000000000..7131bc30db9
--- /dev/null
+++ b/tests/wpt/tests/css/css-align/blocks/justify-self-vrl-rtl-vrl.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-abspos">
+<style>
+body {
+ margin: 0;
+}
+
+.container {
+ writing-mode: vertical-rl;
+ direction: rtl;
+ display: inline-block;
+ position: relative;
+ margin: 20px;
+ border: solid 4px;
+ width: 40px;
+ height: 40px;
+}
+
+.item {
+ writing-mode: vertical-rl;
+ direction: ltr;
+ background: green;
+}
+
+.item::before {
+ width: 20px;
+ height: 20px;
+ content: '';
+ display: block;
+}
+
+.rtl {
+ direction: rtl;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.item')">
+
+<div class="container">
+ <div class="item" style="justify-self: start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-start;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: self-end;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
+<!-- RTL -->
+<br>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: center;" data-expected-height="20" data-offset-y="10"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-start;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: self-end;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: left;" data-expected-height="20" data-offset-y="0"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: right;" data-expected-height="20" data-offset-y="20"></div>
+</div>
+
+<div class="container">
+ <div class="item rtl" style="justify-self: stretch;" data-expected-height="40" data-offset-y="0"></div>
+</div>
+
diff --git a/tests/wpt/tests/css/css-break/flexbox/single-line-column-flex-fragmentation-071.html b/tests/wpt/tests/css/css-break/flexbox/single-line-column-flex-fragmentation-071.html
new file mode 100644
index 00000000000..8cea4b75112
--- /dev/null
+++ b/tests/wpt/tests/css/css-break/flexbox/single-line-column-flex-fragmentation-071.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://issues.chromium.org/issues/359296620">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="columns:2; column-fill:auto; gap:0; width:100px; height:100px;">
+ <div style="display:flex; flex-direction:column;">
+ <div style="height:40px; background:green;"></div>
+ <div style="height:120px; padding:20px; background:green;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-color/color-layers-no-blend-mode-ref.html b/tests/wpt/tests/css/css-color/color-layers-no-blend-mode-ref.html
new file mode 100644
index 00000000000..7e45ac4f8b7
--- /dev/null
+++ b/tests/wpt/tests/css/css-color/color-layers-no-blend-mode-ref.html
@@ -0,0 +1,63 @@
+<!doctype html>
+<style>
+.reference { width: 50px; height: 50px; position: relative; display: inline-block; }
+.reference > div {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+}
+</style>
+<body>
+<script>
+ function createReference(colors) {
+ const div = document.createElement("div");
+ div.className = "reference";
+ const layers = colors.map(color => {
+ const layer = document.createElement("div");
+ layer.style.backgroundColor = color;
+ return layer;
+ }).toReversed();
+ div.append(...layers);
+ return div;
+ }
+ const opaqueColors = [
+ "red",
+ "blue",
+ "green",
+ "purple",
+ "orange",
+ "color(display-p3 1 0.5 0)",
+ "currentcolor",
+ "canvas",
+ "color-mix(in lab, red, blue)",
+ ];
+ const semiTransparentColors = [
+ "rgb(from yellow r g b / 0.5)",
+ "rgba(0, 255, 128, 0.6)",
+ "color-mix(in lab, purple, rgba(0,0,0,0.5))",
+ "hsla(0, 100%, 20%, 0.4)",
+ ];
+
+ // Test layering with opaque colors on top (top color wins)
+ for (const opaqueColor of opaqueColors) {
+ document.body.append(createReference([opaqueColor, ...semiTransparentColors]));
+ }
+ // Test layering multiple semi-transparent colors
+ for (let i = 0; i < semiTransparentColors.length; i++) {
+ let sliceUntilEndMinusI = semiTransparentColors.slice(0, semiTransparentColors.length - i);
+ let sliceUntilI = semiTransparentColors.slice(0, i);
+ let sliceFromIPlusOne = semiTransparentColors.slice(i + 1, semiTransparentColors.length);
+ document.body.append(createReference(sliceUntilEndMinusI));
+
+ // Interleave one opaque color.
+ for (const opaqueColor of opaqueColors) {
+ document.body.append(createReference([...sliceUntilEndMinusI, opaqueColor]));
+ if (sliceFromIPlusOne.length)
+ document.body.append(createReference([...sliceUntilI, opaqueColor, ...sliceFromIPlusOne]));
+ }
+
+ if (sliceFromIPlusOne.length)
+ document.body.append(createReference([...sliceUntilI, ...sliceFromIPlusOne]));
+ }
+</script>
+</body>
diff --git a/tests/wpt/tests/css/css-color/color-layers-no-blend-mode.html b/tests/wpt/tests/css/css-color/color-layers-no-blend-mode.html
new file mode 100644
index 00000000000..2ee8d46c637
--- /dev/null
+++ b/tests/wpt/tests/css/css-color/color-layers-no-blend-mode.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<link rel="help" href="https://drafts.csswg.org/css-color-6/#color-layers">
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="match" href="color-layers-no-blend-mode-ref.html">
+<meta name="fuzzy" content="maxDifference=0-3; totalPixels=0-127500" />
+<style>
+.test { width: 50px; height: 50px; display: inline-block; }
+</style>
+<body>
+<script>
+ function createTest(colors) {
+ const div = document.createElement("div");
+ div.className = "test";
+ div.style.backgroundColor = `color-layers(${colors.join(", ")})`;
+ return div;
+ }
+ const opaqueColors = [
+ "red",
+ "blue",
+ "green",
+ "purple",
+ "orange",
+ "color(display-p3 1 0.5 0)",
+ "currentcolor",
+ "canvas",
+ "color-mix(in lab, red, blue)",
+ ];
+ const semiTransparentColors = [
+ "rgb(from yellow r g b / 0.5)",
+ "rgba(0, 255, 128, 0.6)",
+ "color-mix(in lab, purple, rgba(0,0,0,0.5))",
+ "hsla(0, 100%, 20%, 0.4)",
+ ];
+
+ // Test layering with opaque colors on top (top color wins)
+ for (const opaqueColor of opaqueColors) {
+ document.body.append(createTest([opaqueColor, ...semiTransparentColors]));
+ }
+ // Test layering multiple semi-transparent colors
+ for (let i = 0; i < semiTransparentColors.length; i++) {
+ let sliceUntilEndMinusI = semiTransparentColors.slice(0, semiTransparentColors.length - i);
+ let sliceUntilI = semiTransparentColors.slice(0, i);
+ let sliceFromIPlusOne = semiTransparentColors.slice(i + 1, semiTransparentColors.length);
+ document.body.append(createTest(sliceUntilEndMinusI));
+
+ // Interleave one opaque color.
+ for (const opaqueColor of opaqueColors) {
+ document.body.append(createTest([...sliceUntilEndMinusI, opaqueColor]));
+ if (sliceFromIPlusOne.length)
+ document.body.append(createTest([...sliceUntilI, opaqueColor, ...sliceFromIPlusOne]));
+ }
+
+ if (sliceFromIPlusOne.length)
+ document.body.append(createTest([...sliceUntilI, ...sliceFromIPlusOne]));
+ }
+</script>
+</body>
diff --git a/tests/wpt/tests/css/css-color/parsing/color-invalid-color-layers-function.html b/tests/wpt/tests/css/css-color/parsing/color-invalid-color-layers-function.html
new file mode 100644
index 00000000000..2f8879c4ead
--- /dev/null
+++ b/tests/wpt/tests/css/css-color/parsing/color-invalid-color-layers-function.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Color Level 6: Parsing and serialization of colors using invalid color-mix() function syntax</title>
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="help" href="https://drafts.csswg.org/css-color-6/#color-layers">
+<link rel="help" href="https://drafts.csswg.org/css-color-6/#resolving-layers">
+<meta name="assert" content="Invalid color-layers() values fail to parse">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+ test_invalid_value("color", `color-layers()`);
+ test_invalid_value("color", `color-layers(normal)`);
+ test_invalid_value("color", `color-layers(multiply)`);
+ test_invalid_value("color", `color-layers(red blue)`);
+ test_invalid_value("color", `color-layers(red, blue, )`);
+
+ for (let blendMode of [
+ "",
+ "plus-lighter",
+ "plus-darker",
+ "foo-bar",
+ "custom-ident",
+ "calc(12px + 100%)",
+ "50%",
+ "in srgb",
+ "display-p3",
+ "multiply, multiply",
+ "normal, normal"
+ ]) {
+ blendMode = blendMode + ", ";
+ test_invalid_value("color", `color-layers(${blendMode}red, blue)`);
+ test_invalid_value("color", `color-layers(${blendMode}red, blue, green)`);
+ test_invalid_value("color", `color-layers(${blendMode}rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))`);
+ test_invalid_value("color", `color-layers(${blendMode}currentcolor, blue)`);
+ test_invalid_value("color", `color-layers(${blendMode}canvastext, green)`);
+ test_invalid_value("color", `color-layers(${blendMode}rgb(from black r g b / 0.5), green)`);
+ test_invalid_value("color", `color-layers(${blendMode}color-mix(in srgb, red, blue), blue)`);
+ test_invalid_value("color", `color-layers(${blendMode}color-layers(red, blue), green)`);
+ }
+</script>
+</body>
+</html>
diff --git a/tests/wpt/tests/css/css-color/parsing/color-valid-color-layers-function.html b/tests/wpt/tests/css/css-color/parsing/color-valid-color-layers-function.html
new file mode 100644
index 00000000000..3d579983d43
--- /dev/null
+++ b/tests/wpt/tests/css/css-color/parsing/color-valid-color-layers-function.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Color Level 6: Parsing and serialization of colors using valid color-layers() function syntax</title>
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="help" href="https://drafts.csswg.org/css-color-6/#color-layers">
+<link rel="help" href="https://drafts.csswg.org/css-color-6/#resolving-layers">
+<meta name="assert" content="color-layers() parses and serializes">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<script src="/css/support/color-testcommon.js"></script>
+</head>
+<body>
+<script>
+ function test_valid_color_layers_value(parsed, expected) {
+ if (!expected)
+ expected = parsed.replace(/color-layers\(normal, /g, "color-layers(");
+ test_valid_value("color", parsed, expected);
+ }
+ for (let blendMode of [
+ "",
+ "normal",
+ "multiply",
+ "screen",
+ "overlay",
+ "darken",
+ "lighten",
+ "color-dodge",
+ "color-burn",
+ "hard-light",
+ "soft-light",
+ "difference",
+ "exclusion",
+ "hue",
+ "saturation",
+ "color",
+ "luminosity",
+ ]) {
+ blendMode = blendMode != "" ? blendMode + ", " : "";
+ test_valid_color_layers_value(`color-layers(${blendMode}red)`);
+ test_valid_color_layers_value(`color-layers(${blendMode}red, blue)`);
+ test_valid_color_layers_value(`color-layers(${blendMode}red, blue, green)`);
+ test_valid_color_layers_value(`color-layers(${blendMode}red, blue, green, orange, purple, black)`);
+ test_valid_color_layers_value(`color-layers(${blendMode}rgba(0, 0, 0, 0.5), color(display-p3 1 0.5 0))`);
+ test_valid_color_layers_value(`color-layers(${blendMode}currentcolor, blue)`);
+ test_valid_color_layers_value(`color-layers(${blendMode}canvastext, green)`);
+ test_valid_color_layers_value(`color-layers(${blendMode}rgb(from black r g b / 0.5), green)`);
+ test_valid_color_layers_value(`color-layers(${blendMode}color-mix(in srgb, red, blue), blue)`);
+ test_valid_color_layers_value(`color-layers(${blendMode}color-layers(red, blue), green)`);
+ }
+</script>
+</body>
+</html>
diff --git a/tests/wpt/tests/css/css-fonts/variation-sequences.html b/tests/wpt/tests/css/css-fonts/variation-sequences.html
index 91e46a84d71..c1f69a5be58 100644
--- a/tests/wpt/tests/css/css-fonts/variation-sequences.html
+++ b/tests/wpt/tests/css/css-fonts/variation-sequences.html
@@ -15,4 +15,4 @@
generateVariationSequenceTests("emoji");
generateVariationSequenceTests("cjk");
generateVariationSequenceTests("math");
-</script> \ No newline at end of file
+</script>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/inheritance.html b/tests/wpt/tests/css/css-inline/text-box-trim/inheritance.html
deleted file mode 100644
index a37a40e976d..00000000000
--- a/tests/wpt/tests/css/css-inline/text-box-trim/inheritance.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<title>Inheritance of CSS Inline Layout properties</title>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/css/support/inheritance-testcommon.js"></script>
-<div id="container">
- <div id="target"></div>
-</div>
-<script>
-assert_inherited('text-box-edge', 'leading', 'text');
-assert_not_inherited('text-box-trim', 'none', 'start');
-</script>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/parsing/inheritance.html b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/inheritance.html
new file mode 100644
index 00000000000..4cfb7f41643
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/inheritance.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<title>Inheritance of CSS Inline Layout Text Edge properties</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/inheritance-testcommon.js"></script>
+<div id="container">
+ <div id="target"></div>
+</div>
+<script>
+assert_not_inherited('text-box-edge', 'auto', 'cap');
+assert_not_inherited('text-box-trim', 'none', 'trim-start');
+</script>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-computed.html b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-computed.html
new file mode 100644
index 00000000000..406a1639f78
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-computed.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<title>text-box getComputedStyle() returns correctly resolved values</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+<div id="target"></div>
+<script>
+// initial values
+test_computed_value('text-box', 'normal');
+test_computed_value('text-box', 'none', 'normal');
+test_computed_value('text-box', 'none auto', 'normal');
+test_computed_value('text-box', 'auto none', 'normal');
+test_computed_value('text-box', 'auto', 'trim-both');
+
+// `<text-box-trim>`: `none | trim-start | trim-end | trim-both`
+test_computed_value('text-box', 'trim-start');
+test_computed_value('text-box', 'trim-end');
+test_computed_value('text-box', 'trim-both');
+
+// `<text-edge>`
+test_computed_value('text-box', 'text');
+test_computed_value('text-box', 'cap');
+test_computed_value('text-box', 'ideographic');
+test_computed_value('text-box', 'cap alphabetic');
+test_computed_value('text-box', 'text alphabetic');
+
+// Mix initial and non-initial values
+test_computed_value('text-box', 'trim-start auto', 'trim-start');
+test_computed_value('text-box', 'trim-both auto', 'trim-both');
+test_computed_value('text-box', 'auto trim-both', 'trim-both');
+test_computed_value('text-box', 'none text', 'none text');
+test_computed_value('text-box', 'text text none', 'none text');
+test_computed_value('text-box', 'none cap', 'none cap');
+test_computed_value('text-box', 'cap ideographic none', 'none cap ideographic');
+test_computed_value('text-box', 'ideographic none', 'none ideographic');
+
+// Both `<text-box-trim>` and `<text-box-edge>`
+test_computed_value('text-box', 'trim-both text', 'text');
+test_computed_value('text-box', 'trim-start text');
+test_computed_value('text-box', 'text text trim-both', 'text');
+test_computed_value('text-box', 'text text trim-end', 'trim-end text');
+test_computed_value('text-box', 'cap alphabetic trim-start', 'trim-start cap alphabetic');
+test_computed_value('text-box', 'trim-start cap alphabetic');
+test_computed_value('text-box', 'trim-both cap alphabetic', 'cap alphabetic');
+test_computed_value('text-box', 'trim-start ideographic ideographic', 'trim-start ideographic');
+test_computed_value('text-box', 'trim-start ideographic-ink ideographic-ink', 'trim-start ideographic-ink');
+test_computed_value('text-box', 'trim-end cap text', 'trim-end cap');
+test_computed_value('text-box', 'trim-end ex text', 'trim-end ex');
+test_computed_value('text-box', 'cap text trim-end', 'trim-end cap');
+test_computed_value('text-box', 'ex text trim-end', 'trim-end ex');
+test_computed_value('text-box', 'cap text trim-both', 'cap');
+test_computed_value('text-box', 'ex text trim-both', 'ex');
+</script>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-edge-computed.html b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-edge-computed.html
new file mode 100644
index 00000000000..b5b6f0c5cf7
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-edge-computed.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<title>text-box getComputedStyle() returns correctly resolved values</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-edges">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('text-box-edge', 'auto');
+test_computed_value('text-box-edge', 'text');
+test_computed_value('text-box-edge', 'cap');
+test_computed_value('text-box-edge', 'ex');
+test_computed_value('text-box-edge', 'ideographic');
+test_computed_value('text-box-edge', 'ideographic-ink');
+
+test_computed_value('text-box-edge', 'text text', 'text');
+test_computed_value('text-box-edge', 'text alphabetic');
+test_computed_value('text-box-edge', 'text ideographic');
+test_computed_value('text-box-edge', 'text ideographic-ink');
+
+test_computed_value('text-box-edge', 'cap text', 'cap');
+test_computed_value('text-box-edge', 'cap alphabetic');
+test_computed_value('text-box-edge', 'cap ideographic');
+test_computed_value('text-box-edge', 'cap ideographic-ink');
+
+test_computed_value('text-box-edge', 'ex text', 'ex');
+test_computed_value('text-box-edge', 'ex alphabetic');
+test_computed_value('text-box-edge', 'ex ideographic');
+test_computed_value('text-box-edge', 'ex ideographic-ink');
+
+test_computed_value('text-box-edge', 'ideographic text');
+test_computed_value('text-box-edge', 'ideographic alphabetic');
+test_computed_value('text-box-edge', 'ideographic ideographic', 'ideographic');
+test_computed_value('text-box-edge', 'ideographic ideographic-ink');
+
+test_computed_value('text-box-edge', 'ideographic-ink text');
+test_computed_value('text-box-edge', 'ideographic-ink alphabetic');
+test_computed_value('text-box-edge', 'ideographic-ink ideographic');
+test_computed_value('text-box-edge', 'ideographic-ink ideographic-ink', 'ideographic-ink');
+</script>
+</body>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-edge-invalid.html b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-edge-invalid.html
new file mode 100644
index 00000000000..0c1e2d19a3b
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-edge-invalid.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<title>text-box-edge rejects invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-edges">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+
+<script>
+// invalid keyword
+test_invalid_value('text-box-edge', 'none');
+test_invalid_value('text-box-edge', 'normal');
+test_invalid_value('text-box-edge', 'leading');
+test_invalid_value('text-box-edge', 'auto leading');
+test_invalid_value('text-box-edge', 'leading auto');
+test_invalid_value('text-box-edge', 'normal text');
+test_invalid_value('text-box-edge', 'text none');
+
+test_invalid_value('text-box-edge', 'leading leading');
+test_invalid_value('text-box-edge', 'leading text');
+test_invalid_value('text-box-edge', 'leading cap');
+test_invalid_value('text-box-edge', 'leading ex');
+test_invalid_value('text-box-edge', 'leading ideographic');
+test_invalid_value('text-box-edge', 'leading ideographic-ink');
+
+test_invalid_value('text-box-edge', 'text leading');
+test_invalid_value('text-box-edge', 'cap leading');
+test_invalid_value('text-box-edge', 'ex leading');
+test_invalid_value('text-box-edge', 'ideographic leading');
+test_invalid_value('text-box-edge', 'ideographic-ink leading');
+
+// invalid grammar
+test_invalid_value('text-box-edge', 'alphabetic');
+test_invalid_value('text-box-edge', 'alphabetic text');
+test_invalid_value('text-box-edge', 'text cap');
+test_invalid_value('text-box-edge', 'text ex');
+test_invalid_value('text-box-edge', 'auto auto');
+test_invalid_value('text-box-edge', 'auto text');
+test_invalid_value('text-box-edge', 'text auto');
+test_invalid_value('text-box-edge', 'text text text');
+</script>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-edge-valid.html b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-edge-valid.html
new file mode 100644
index 00000000000..27917c02922
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-edge-valid.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<title>text-box-edge parses valid values according to its grammar</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-edges">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+
+<script>
+test_valid_value('text-box-edge', 'auto');
+test_valid_value('text-box-edge', 'text');
+test_valid_value('text-box-edge', 'cap');
+test_valid_value('text-box-edge', 'ex');
+test_valid_value('text-box-edge', 'ideographic');
+test_valid_value('text-box-edge', 'ideographic-ink');
+
+test_valid_value('text-box-edge', 'text text', 'text');
+test_valid_value('text-box-edge', 'text alphabetic');
+test_valid_value('text-box-edge', 'text ideographic');
+test_valid_value('text-box-edge', 'text ideographic-ink');
+
+test_valid_value('text-box-edge', 'cap text', 'cap');
+test_valid_value('text-box-edge', 'cap alphabetic');
+test_valid_value('text-box-edge', 'cap ideographic');
+test_valid_value('text-box-edge', 'cap ideographic-ink');
+
+test_valid_value('text-box-edge', 'ex text', 'ex');
+test_valid_value('text-box-edge', 'ex alphabetic');
+test_valid_value('text-box-edge', 'ex ideographic');
+test_valid_value('text-box-edge', 'ex ideographic-ink');
+
+test_valid_value('text-box-edge', 'ideographic text');
+test_valid_value('text-box-edge', 'ideographic alphabetic');
+test_valid_value('text-box-edge', 'ideographic ideographic', 'ideographic');
+test_valid_value('text-box-edge', 'ideographic ideographic-ink');
+
+test_valid_value('text-box-edge', 'ideographic-ink text');
+test_valid_value('text-box-edge', 'ideographic-ink alphabetic');
+test_valid_value('text-box-edge', 'ideographic-ink ideographic');
+test_valid_value('text-box-edge', 'ideographic-ink ideographic-ink', 'ideographic-ink');
+</script>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-invalid.html b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-invalid.html
new file mode 100644
index 00000000000..b874c3148fe
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-invalid.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<title>text-box rejects invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+
+<script>
+// invalid keyword
+test_invalid_value('text-box', 'em');
+test_invalid_value('text-box', 'leading');
+test_invalid_value('text-box', 'trim-both leading');
+
+// invalid grammars
+test_invalid_value('text-box', 'normal normal');
+test_invalid_value('text-box', 'normal none');
+test_invalid_value('text-box', 'auto normal');
+test_invalid_value('text-box', 'auto auto');
+test_invalid_value('text-box', 'none none');
+test_invalid_value('text-box', 'normal text');
+test_invalid_value('text-box', 'text normal');
+test_invalid_value('text-box', 'text cap');
+test_invalid_value('text-box', 'text ex');
+test_invalid_value('text-box', 'alphabetic text');
+test_invalid_value('text-box', 'alphabetic cap');
+test_invalid_value('text-box', 'cap none alphabetic');
+test_invalid_value('text-box', 'cap trim-both alphabetic');
+test_invalid_value('text-box', 'text none text');
+test_invalid_value('text-box', 'text trim-both text');
+</script>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-shorthand.html b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-shorthand.html
new file mode 100644
index 00000000000..46c05163c3b
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-shorthand.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<title>text-box shorthand defaults omitted values per spec</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/shorthand-testcommon.js"></script>
+<script>
+test_shorthand_value('text-box', 'normal', {
+ 'text-box-trim': 'none',
+ 'text-box-edge': 'auto',
+});
+
+test_shorthand_value('text-box', 'none', {
+ 'text-box-trim': 'none',
+ 'text-box-edge': 'auto',
+});
+
+test_shorthand_value('text-box', 'trim-start', {
+ 'text-box-trim': 'trim-start',
+ 'text-box-edge': 'auto',
+});
+
+test_shorthand_value('text-box', 'ex', {
+ 'text-box-trim': 'trim-both',
+ 'text-box-edge': 'ex',
+});
+</script>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-trim-computed.html b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-trim-computed.html
new file mode 100644
index 00000000000..dbc30fede26
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-trim-computed.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>text-box getComputedStyle() returns correctly resolved values</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+<body>
+<div id="target"></div>
+<script>
+test_computed_value('text-box-trim', 'none');
+test_computed_value('text-box-trim', 'trim-start');
+test_computed_value('text-box-trim', 'trim-end');
+test_computed_value('text-box-trim', 'trim-both');
+</script>
+</body>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-trim-invalid.html b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-trim-invalid.html
new file mode 100644
index 00000000000..d0bc05459ee
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-trim-invalid.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>text-box-trim rejects invalid values</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#leading-trim">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+
+<script>
+test_invalid_value('text-box-trim', 'trim-start trim-end');
+test_invalid_value('text-box-trim', 'auto');
+test_invalid_value('text-box-trim', 'normal');
+test_invalid_value('text-box-trim', 'start');
+test_invalid_value('text-box-trim', 'end');
+test_invalid_value('text-box-trim', 'both');
+</script>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-valid.html b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-trim-valid.html
index 61622774f6f..0f93b3f36de 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-valid.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-trim-valid.html
@@ -1,4 +1,5 @@
<!DOCTYPE html>
+<title>text-box-trim parses valid values according to its grammar</title>
<link rel="help" href="https://drafts.csswg.org/css-inline-3/#leading-trim">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
@@ -6,7 +7,7 @@
<script>
test_valid_value('text-box-trim', 'none');
-test_valid_value('text-box-trim', 'start');
-test_valid_value('text-box-trim', 'end');
-test_valid_value('text-box-trim', 'both');
+test_valid_value('text-box-trim', 'trim-start');
+test_valid_value('text-box-trim', 'trim-end');
+test_valid_value('text-box-trim', 'trim-both');
</script>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-valid.html b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-valid.html
new file mode 100644
index 00000000000..67894ca71f9
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/parsing/text-box-valid.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<title>text-box parses valid values according to its grammar</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+
+<script>
+// initial values
+test_valid_value('text-box', 'normal');
+test_valid_value('text-box', 'none', 'normal');
+test_valid_value('text-box', 'none auto', 'normal');
+test_valid_value('text-box', 'auto none', 'normal');
+test_valid_value('text-box', 'auto', 'trim-both');
+
+// `<text-box-trim>`: `none | trim-start | trim-end | trim-both`
+test_valid_value('text-box', 'trim-start');
+test_valid_value('text-box', 'trim-end');
+test_valid_value('text-box', 'trim-both');
+
+// `<text-edge>`
+test_valid_value('text-box', 'text');
+test_valid_value('text-box', 'cap');
+test_valid_value('text-box', 'ideographic');
+test_valid_value('text-box', 'cap alphabetic');
+test_valid_value('text-box', 'text alphabetic');
+
+// Mix initial and non-initial values
+test_valid_value('text-box', 'trim-start auto', 'trim-start');
+test_valid_value('text-box', 'trim-both auto', 'trim-both');
+test_valid_value('text-box', 'auto trim-both', 'trim-both');
+test_valid_value('text-box', 'none text', 'none text');
+test_valid_value('text-box', 'text text none', 'none text');
+test_valid_value('text-box', 'none cap', 'none cap');
+test_valid_value('text-box', 'cap ideographic none', 'none cap ideographic');
+test_valid_value('text-box', 'ideographic none', 'none ideographic');
+
+// Both `<text-box-trim>` and `<text-box-edge>`
+test_valid_value('text-box', 'trim-both text', 'text');
+test_valid_value('text-box', 'trim-start text');
+test_valid_value('text-box', 'text text trim-both', 'text');
+test_valid_value('text-box', 'text text trim-end', 'trim-end text');
+test_valid_value('text-box', 'cap alphabetic trim-start', 'trim-start cap alphabetic');
+test_valid_value('text-box', 'trim-start cap alphabetic');
+test_valid_value('text-box', 'trim-both cap alphabetic', 'cap alphabetic');
+test_valid_value('text-box', 'trim-start ideographic ideographic', 'trim-start ideographic');
+test_valid_value('text-box', 'trim-start ideographic-ink ideographic-ink', 'trim-start ideographic-ink');
+test_valid_value('text-box', 'trim-end cap text', 'trim-end cap');
+test_valid_value('text-box', 'trim-end ex text', 'trim-end ex');
+test_valid_value('text-box', 'cap text trim-end', 'trim-end cap');
+test_valid_value('text-box', 'ex text trim-end', 'trim-end ex');
+test_valid_value('text-box', 'cap text trim-both', 'cap');
+test_valid_value('text-box', 'ex text trim-both', 'ex');
+</script>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/support/MetricsTestFont.css b/tests/wpt/tests/css/css-inline/text-box-trim/support/MetricsTestFont.css
new file mode 100644
index 00000000000..5b69d96e4ac
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/support/MetricsTestFont.css
@@ -0,0 +1,4 @@
+@font-face {
+ font-family: MetricsTestFont;
+ src: url(cap-x-height.ttf);
+}
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/resources/README.md b/tests/wpt/tests/css/css-inline/text-box-trim/support/README.md
index e00b13c17dc..e00b13c17dc 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/resources/README.md
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/support/README.md
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/resources/cap-x-height.ttf b/tests/wpt/tests/css/css-inline/text-box-trim/support/cap-x-height.ttf
index d1fc9e42850..d1fc9e42850 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/resources/cap-x-height.ttf
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/support/cap-x-height.ttf
Binary files differ
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/resources/variant-class.js b/tests/wpt/tests/css/css-inline/text-box-trim/support/variant-class.js
index d1ca547cfd7..d1ca547cfd7 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/resources/variant-class.js
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/support/variant-class.js
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-edge-computed.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-edge-computed.html
deleted file mode 100644
index 50a963297ce..00000000000
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-edge-computed.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<title>Tests parsing of the text-box-edge property</title>
-<link rel="author" title="Google LLC" href="https://www.google.com/">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-edges">
-<meta name="assert" content="text-box-edge supports the full grammar leading | [ text | cap | ex | ideographic | ideographic-ink ] [ text | alphabetic | ideographic | ideographic-ink ]">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/css/support/computed-testcommon.js"></script>
-<body>
-<div id="target"></div>
-<script>
-test_computed_value('text-box-edge', 'leading');
-test_computed_value('text-box-edge', 'text');
-test_computed_value('text-box-edge', 'ex');
-test_computed_value('text-box-edge', 'cap');
-test_computed_value('text-box-edge', 'text alphabetic');
-test_computed_value('text-box-edge', 'text text', 'text');
-test_computed_value('text-box-edge', 'cap alphabetic');
-test_computed_value('text-box-edge', 'cap text', 'cap');
-test_computed_value('text-box-edge', 'ex alphabetic');
-test_computed_value('text-box-edge', 'ex text', 'ex');
-</script>
-</body>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-edge-invalid.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-edge-invalid.html
deleted file mode 100644
index 401f8c61a39..00000000000
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-edge-invalid.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<title>Tests parsing of the text-box-edge property</title>
-<link rel="author" title="Google LLC" href="https://www.google.com/">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-edges">
-<meta name="assert" content="text-box-edge supports the full grammar leading | [ text | cap | ex | ideographic | ideographic-ink ] [ text | alphabetic | ideographic | ideographic-ink ]">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/css/support/parsing-testcommon.js"></script>
-
-<script>
-// invalid keyword
-test_invalid_value('text-box-edge', 'auto');
-test_invalid_value('text-box-edge', 'auto leading');
-test_invalid_value('text-box-edge', 'leading auto');
-
-// invalid grammar
-test_invalid_value('text-box-edge', 'alphabetic');
-test_invalid_value('text-box-edge', 'alphabetic text');
-test_invalid_value('text-box-edge', 'text cap');
-test_invalid_value('text-box-edge', 'text ex');
-test_invalid_value('text-box-edge', 'leading leading');
-test_invalid_value('text-box-edge', 'leading text');
-test_invalid_value('text-box-edge', 'text leading');
-test_invalid_value('text-box-edge', 'text text text');
-
-</script>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-edge-valid.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-edge-valid.html
deleted file mode 100644
index 36f37715b99..00000000000
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-edge-valid.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-<title>Tests parsing of the text-box-edge property</title>
-<link rel="author" title="Google LLC" href="https://www.google.com/">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-edges">
-<meta name="assert" content="text-box-edge supports the full grammar leading | [ text | cap | ex | ideographic | ideographic-ink ] [ text | alphabetic | ideographic | ideographic-ink ]">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/css/support/parsing-testcommon.js"></script>
-
-<script>
-test_valid_value('text-box-edge', 'leading');
-test_valid_value('text-box-edge', 'text');
-test_valid_value('text-box-edge', 'ex');
-test_valid_value('text-box-edge', 'cap');
-test_valid_value('text-box-edge', 'text alphabetic');
-test_valid_value('text-box-edge', 'text text', 'text');
-test_valid_value('text-box-edge', 'cap alphabetic');
-test_valid_value('text-box-edge', 'cap text', 'cap');
-test_valid_value('text-box-edge', 'ex alphabetic');
-test_valid_value('text-box-edge', 'ex text', 'ex');
-</script>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-accumulation-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-accumulation-001.html
index 08eedbdbfeb..5ff9c7181f8 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-accumulation-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-accumulation-001.html
@@ -1,32 +1,34 @@
<!DOCTYPE html>
<title>Test choosing the innermost for `text-box-trim` for requested trim metric</title>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<meta name="assert"
+ content="If multiple ancestors specify trimming on the same line box,
+ the text-box-edge value used is that of the innermost block container
+ that requests trimming on that side of the line box."
+> <!-- https://github.com/w3c/csswg-drafts/issues/5426 -->
<link rel="match" href="text-box-trim-start-001-ref.html?class=text">
-<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
+@import "support/MetricsTestFont.css";
+
.spacer {
block-size: 100px;
background: lightgray;
}
.target {
- font-family: Ahem;
- font-size: 100px;
- line-height: 2;
- text-box-trim: start;
- text-box-edge: leading;
+ font: 100px/2 MetricsTestFont;
}
-.inner {
- text-box-edge: text;
+.target, .outer {
+ text-box-trim: trim-start;
+}
+.outer, .inner {
+ text-box-edge: ex;
}
</style>
<div class="spacer"></div>
-<div class="target">
- <!--
- When the element that has `text-box-trim` and `.inner` has different
- `text-box-edge` values, use the innermost one.
- https://github.com/w3c/csswg-drafts/issues/5426
- -->
- <div class="inner">A</div>
+<div class="outer">
+ <div class="target">
+ <div class="inner">ApÉx</div>
+ </div>
</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-atomic-inline-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-atomic-inline-001-ref.html
index 7614329e2e5..8df34274346 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-atomic-inline-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-atomic-inline-001-ref.html
@@ -1,14 +1,14 @@
<!DOCTYPE html>
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
+@import "support/MetricsTestFont.css";
+
.spacer {
background: lightgray;
block-size: 100px;
}
.target {
- font-family: Ahem;
- font-size: 100px;
- line-height: 2;
+ font: 100px/2 MetricsTestFont;
position: relative;
top: -50px;
height: 100px;
@@ -20,6 +20,6 @@
</style>
<div class="spacer"></div>
<div class="target">
- <span class="atomic">X</span>
+ <span class="atomic">ApÉx</span>
</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-atomic-inline-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-atomic-inline-001.html
index 5f2d01c7dc7..e81a072445b 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-atomic-inline-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-atomic-inline-001.html
@@ -1,19 +1,18 @@
<!DOCTYPE html>
<title>Test the `text-box-trim` isn't propagated into atomic inlines</title>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-atomic-inline-001-ref.html">
-<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
+@import "support/MetricsTestFont.css";
+
.spacer {
background: lightgray;
block-size: 100px;
}
.target {
- font-family: Ahem;
- font-size: 100px;
- line-height: 2;
- text-box-trim: both;
+ font: 100px/2 MetricsTestFont;
+ text-box-trim: trim-both;
text-box-edge: text;
}
.atomic {
@@ -23,6 +22,6 @@
</style>
<div class="spacer"></div>
<div class="target">
- <span class="atomic">X</span>
+ <span class="atomic">ApÉx</span>
</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-001-ref.html
index ef0c90d6644..6eff49558ec 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-001-ref.html
@@ -6,9 +6,7 @@
block-size: 50px;
}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 2;
+ font: 50px/2 Ahem;
height: 275px;
}
</style>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-001.html
index 7b008a21f04..37d5ff0bb82 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-001.html
@@ -1,6 +1,8 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim: trim-end is propagated to the last formatted line,
+even if it's after a block-in-inline</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-block-in-inline-end-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -9,10 +11,8 @@
block-size: 50px;
}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 2;
- text-box-trim: end;
+ font: 50px/2 Ahem;
+ text-box-trim: trim-end;
text-box-edge: text;
}
</style>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-002.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-002.html
index a1711e309cc..78f461d6355 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-002.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-002.html
@@ -1,6 +1,8 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim: trim-end is propagated to the last formatted line,
+even if it's within a block-in-inline</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-block-in-inline-end-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -9,10 +11,8 @@
block-size: 50px;
}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 2;
- text-box-trim: end;
+ font: 50px/2 Ahem;
+ text-box-trim: trim-end;
text-box-edge: text;
}
</style>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-003.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-003.html
index 8ace67f78f6..03faacbdbb2 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-003.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-003.html
@@ -1,6 +1,8 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim: trim-end is propagated to the last formatted line only,
+even if it's within a block-in-inline</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-block-in-inline-end-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -9,10 +11,8 @@
block-size: 50px;
}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 2;
- text-box-trim: end;
+ font: 50px/2 Ahem;
+ text-box-trim: trim-end;
text-box-edge: text;
}
</style>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-004.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-004.html
index 3c682a211f9..7e5b03c15f0 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-004.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-end-004.html
@@ -1,6 +1,8 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim: trim-end is propagated to the last formatted line,
+even if it's within a block-in-inline inside another block</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-block-in-inline-end-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -9,10 +11,8 @@
block-size: 50px;
}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 2;
- text-box-trim: end;
+ font: 50px/2 Ahem;
+ text-box-trim: trim-end;
text-box-edge: text;
}
</style>
@@ -29,6 +29,5 @@
<div>C</div>
</span>
</div>
- <div></div>
</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-001-ref.html
index dd288036917..450744a61f7 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-001-ref.html
@@ -6,9 +6,7 @@
block-size: 50px;
}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 2;
+ font: 50px/2 Ahem;
position: relative;
top: -25px;
height: 275px;
@@ -19,9 +17,9 @@
<span>
<div>
A<br>
- A
+ B
</div>
</span>
- A
+ C
</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-001.html
index 9d14a08bc2a..312265b41e8 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-001.html
@@ -1,6 +1,8 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim: trim-start is propagated to the last formatted line,
+even if it's within a block-in-inline</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-block-in-inline-start-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -9,10 +11,8 @@
block-size: 50px;
}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 2;
- text-box-trim: start;
+ font: 50px/2 Ahem;
+ text-box-trim: trim-start;
text-box-edge: text;
}
</style>
@@ -21,9 +21,9 @@
<span>
<div>
A<br>
- A
+ B
</div>
</span>
- A
+ C
</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-002.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-002.html
index 67bfa343781..c3fa558e548 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-002.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-002.html
@@ -1,6 +1,8 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim: trim-end is propagated to the last formatted line,
+even if it's followed by a block-in-inline</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-block-in-inline-start-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -9,10 +11,8 @@
block-size: 50px;
}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 2;
- text-box-trim: start;
+ font: 50px/2 Ahem;
+ text-box-trim: trim-start;
text-box-edge: text;
}
</style>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-003.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-003.html
index 5227a4d13aa..507a558d308 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-003.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-block-in-inline-start-003.html
@@ -1,6 +1,8 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim: trim-end is propagated to the last formatted line only,
+even if it's within a block-in-inline</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-block-in-inline-start-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -9,10 +11,8 @@
block-size: 50px;
}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 2;
- text-box-trim: start;
+ font: 50px/2 Ahem;
+ text-box-trim: trim-start;
text-box-edge: text;
}
</style>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-dynamic-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-dynamic-001-ref.html
index 8f089635fae..5a759de72be 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-dynamic-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-dynamic-001-ref.html
@@ -1,15 +1,16 @@
<!DOCTYPE html>
-<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
+@import "support/MetricsTestFont.css";
+
.spacer {
background: lightgray;
block-size: 100px;
}
.target {
- font-family: Ahem;
- font-size: 100px;
+ font: 100px/1 MetricsTestFont;
+ margin-block: -60px -20px;
}
</style>
<div class="spacer"></div>
-<div class="target">A</div>
+<div class="target">ApÉx</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-dynamic-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-dynamic-001.html
index 5cd25060934..363fed4b039 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-dynamic-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-dynamic-001.html
@@ -1,27 +1,29 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<html class=reftest-wait>
+<title>Dynamically adding text-box-trim</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-dynamic-001-ref.html">
-<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
+@import "support/MetricsTestFont.css";
+
.spacer {
background: lightgray;
block-size: 100px;
}
.target {
- font-family: Ahem;
- font-size: 100px;
- line-height: 2;
- text-box-edge: text;
+ font: 100px/2 MetricsTestFont;
+ text-box-edge: ex alphabetic;
}
-.trim { text-box-trim: both; }
+.trim { text-box-trim: trim-both; }
</style>
<div class="spacer"></div>
-<div class="target">A</div>
+<div class="target">ApÉx</div>
<div class="spacer"></div>
<script>
document.body.offsetTop;
for (const target of document.getElementsByClassName('target')) {
target.classList.add('trim');
}
+document.documentElement.class = "";
</script>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-dynamic-002.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-dynamic-002.html
index a921d4d0caa..f07b3930286 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-dynamic-002.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-dynamic-002.html
@@ -1,27 +1,29 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<html class=reftest-wait>
+<title>Dynamically adding text-box-edge</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
<link rel="match" href="text-box-trim-dynamic-001-ref.html">
-<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
+@import "support/MetricsTestFont.css";
+
.spacer {
background: lightgray;
block-size: 100px;
}
.target {
- font-family: Ahem;
- font-size: 100px;
- line-height: 2;
- text-box-trim: both;
+ font: 100px/2 MetricsTestFont;
+ text-box-trim: trim-both;
}
-.text { text-box-edge: text; }
+.trim { text-box-edge: ex alphabetic; }
</style>
<div class="spacer"></div>
-<div class="target">A</div>
+<div class="target">ApÉx</div>
<div class="spacer"></div>
<script>
document.body.offsetTop;
for (const target of document.getElementsByClassName('target')) {
- target.classList.add('text');
+ target.classList.add('trim');
}
+document.documentElement.class = "";
</script>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-001-ref.html
index 433670fda11..fb31970c5cd 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-001-ref.html
@@ -1,26 +1,22 @@
<!DOCTYPE html>
-<script src="resources/variant-class.js"></script>
+<script src="support/variant-class.js"></script>
<style>
-@font-face {
- font-family: test-font;
- src: url(resources/cap-x-height.ttf);
-}
+@import "support/MetricsTestFont.css";
+
.spacer {
background: lightgray;
block-size: 100px;
}
.target {
- font-family: test-font;
- font-size: 100px;
- line-height: 2;
+ font: 100px/2 MetricsTestFont;
}
.offset {
position: relative;
}
.vrl { writing-mode: vertical-rl; }
.vlr { writing-mode: vertical-lr; }
-.text .target { line-height: 150px; }
-.text .offset { inset-block-start: 25px; }
+.auto .target, .text .target { line-height: 150px; }
+.auto .offset, .text .offset { inset-block-start: 25px; }
.alphabetic .target { line-height: 130px; }
.alphabetic .offset { inset-block-start: 35px;}
.cap .target { line-height: 130px; }
@@ -32,6 +28,6 @@
</style>
<div class="spacer"></div>
<div class="target">
- <span class="offset">A</span>
+ <span class="offset">ApÉx</span>
</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-001.html
index 0bca8de8088..dbd44c814b6 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-001.html
@@ -1,41 +1,38 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>Test text-box-trim: trim-end on various writing modes</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
<link rel="match" href="text-box-trim-end-001-ref.html">
-<script src="resources/variant-class.js"></script>
-<meta name="variant" content="?class=leading">
+<script src="support/variant-class.js"></script>
+<meta name="variant" content="?class=auto">
<meta name="variant" content="?class=text">
<meta name="variant" content="?class=alphabetic">
-<meta name="variant" content="?class=vrl,leading">
+<meta name="variant" content="?class=vrl,auto">
<meta name="variant" content="?class=vrl,text">
<meta name="variant" content="?class=vrl,alphabetic">
-<meta name="variant" content="?class=vlr,leading">
+<meta name="variant" content="?class=vlr,auto">
<meta name="variant" content="?class=vlr,text">
<meta name="variant" content="?class=vlr,cap">
<meta name="variant" content="?class=vlr,ex">
<style>
-@font-face {
- font-family: test-font;
- src: url(resources/cap-x-height.ttf);
-}
+@import "support/MetricsTestFont.css";
+
.spacer {
background: lightgray;
block-size: 100px;
}
.target {
- font-family: test-font;
- font-size: 100px;
- line-height: 2;
- text-box-trim: end;
+ font: 100px/2 MetricsTestFont;
+ text-box-trim: trim-end;
}
.vrl { writing-mode: vertical-rl; }
.vlr { writing-mode: vertical-lr; }
-.leading .target { text-box-edge: leading; }
-.text .target { text-box-edge: text; }
+.auto .target { text-box-edge: auto; }
+.text .target { text-box-edge: text; }
.alphabetic .target { text-box-edge: text alphabetic; }
-.cap .target { text-box-edge: cap; }
-.ex .target { text-box-edge: ex; }
+.cap .target { text-box-edge: cap; }
+.ex .target { text-box-edge: ex; }
</style>
<div class="spacer"></div>
-<div class="target">A</div>
+<div class="target">ApÉx</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-empty-line-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-empty-line-001-ref.html
index 5c0dd61f7a4..8f281b5c730 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-empty-line-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-empty-line-001-ref.html
@@ -6,9 +6,7 @@
block-size: 100px;
}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 2;
+ font: 50px/2 Ahem;
}
</style>
<div class="target" style="height: 65px">
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-empty-line-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-empty-line-001.html
index 30061b208d6..e9f8613e44f 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-empty-line-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-end-empty-line-001.html
@@ -1,6 +1,8 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim skips "invisible line boxes"</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
+<link rel="help" href="https://www.w3.org/TR/css-inline-3/#invisible-line-boxes">
<link rel="match" href="text-box-trim-end-empty-line-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -9,10 +11,8 @@
block-size: 100px;
}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 2;
- text-box-trim: end;
+ font: 50px/2 Ahem;
+ text-box-trim: trim-end;
text-box-edge: text alphabetic;
}
</style>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-001-ref.html
index dd66e5a732d..f928601d753 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-001-ref.html
@@ -1,14 +1,13 @@
<!DOCTYPE html>
-<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
+@import "support/MetricsTestFont.css";
+
.spacer {
background: lightgray;
block-size: 100px;
}
-.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 1;
+.target, .float {
+ font: 50px/1 MetricsTestFont;
}
.float {
float: left;
@@ -18,9 +17,9 @@
}
.clear { clear: both; }
</style>
-<div class="float"></div>
+<div class="float">F<br>F</div>
<div class="target">
- A
+ ApÉx
<br class="clear">
</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-001.html
index 985ae60c46d..6694d98421d 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-001.html
@@ -1,31 +1,32 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim does not interfere with positive clearance</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-float-clear-br-001-ref.html">
-<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
+@import "support/MetricsTestFont.css";
+
.spacer {
background: lightgray;
block-size: 100px;
}
+.target, .float {
+ font: 50px/1 MetricsTestFont;
+}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 1;
- text-box-trim: end;
+ text-box-trim: trim-end;
text-box-edge: text;
}
.float {
float: left;
width: 100px;
- height: 100px;
background: yellow;
}
.clear { clear: both; }
</style>
-<div class="float"></div>
+<div class="float">F<br>F</div>
<div class="target">
- A
+ ApÉx
<br class="clear">
</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-002-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-002-ref.html
index d4275a8df5f..e97c45026c1 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-002-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-002-ref.html
@@ -1,14 +1,13 @@
<!DOCTYPE html>
-<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
+@import "support/MetricsTestFont.css";
+
.spacer {
background: lightgray;
block-size: 100px;
}
.target {
- font-family: Ahem;
- font-size: 100px;
- line-height: 1;
+ font: 100px/1 MetricsTestFont;
}
.float {
float: left;
@@ -20,6 +19,6 @@
</style>
<div class="float"></div>
<div class="target">
- A
+ ApÉx
</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-002.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-002.html
index 5798525e476..883a1de3a35 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-002.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-002.html
@@ -1,32 +1,31 @@
<!DOCTYPE html>
-<title>Test if the zero clearance is honored for `text-box-trim`</title>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim does not interfere with zero clearance</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-float-clear-br-002-ref.html">
-<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
+@import "support/MetricsTestFont.css";
+
.spacer {
background: lightgray;
block-size: 100px;
}
+.target, .float {
+ font: 100px/1 MetricsTestFont;
+}
.target {
- font-family: Ahem;
- font-size: 100px;
- line-height: 1;
- text-box-trim: end;
+ text-box-trim: trim-end;
text-box-edge: text alphabetic;
}
.float {
float: left;
- width: 100px;
- height: 100px;
- background: yellow;
+ color: yellow;
}
.clear { clear: both; }
</style>
-<div class="float"></div>
+<div class="float">F</div>
<div class="target">
- A
+ ApÉx
<br class="clear">
</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-003-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-003-ref.html
new file mode 100644
index 00000000000..8c14770034a
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-003-ref.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<style>
+@import "support/MetricsTestFont.css";
+
+.spacer {
+ margin-top: -10px;
+ background: lightgray;
+ block-size: 100px;
+}
+.target {
+ font-family: MetricsTestFont;
+ font-size: 100px;
+ line-height: 1;
+}
+.float {
+ float: left;
+ width: 100px;
+ height: 100px;
+ background: yellow;
+}
+.clear { clear: both; }
+</style>
+<div class="float"></div>
+<div class="target">
+ ApÉx
+</div>
+<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-003.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-003.html
new file mode 100644
index 00000000000..e04d18ec109
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-clear-br-003.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<title>text-box-trim does not interfere with clearance less than trim amount</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
+<link rel="match" href="text-box-trim-float-clear-br-002-ref.html">
+<style>
+@import "support/MetricsTestFont.css";
+
+.spacer {
+ background: lightgray;
+ block-size: 100px;
+}
+.target, .float {
+ font: 100px/1 MetricsTestFont;
+}
+.target {
+ text-box-trim: trim-end;
+ text-box-edge: text alphabetic;
+}
+.float {
+ float: left;
+ width: 100px;
+ height: 90px;
+ background: yellow;
+}
+.clear { clear: both; }
+</style>
+<div class="float"></div>
+<div class="target">
+ ApÉx
+ <br class="clear">
+</div>
+<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-start-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-start-001-ref.html
index 1b1941c96f1..9032be6178e 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-start-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-start-001-ref.html
@@ -5,13 +5,11 @@
float: left;
width: 100px;
height: 50px;
- background: blue;
+ background: yellow;
}
.text {
margin-top: 100px;
- font-family: Ahem;
- font-size: 50px;
- line-height: 1;
+ font: 50px/1 Ahem;
}
</style>
<div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-start-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-start-001.html
index 99e4736baf0..3d87a82d7db 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-start-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-float-start-001.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<title>Tests BFC resolves at the box trimmed by `text-box-trim`.</title>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-float-start-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -9,14 +9,12 @@
float: left;
width: 100px;
height: 50px;
- background: blue;
+ background: yellow;
}
.text {
margin-top: 100px;
- font-family: Ahem;
- font-size: 50px;
- line-height: 3;
- text-box-trim: start;
+ font: 50px/3 Ahem;
+ text-box-trim: trim-start;
text-box-edge: text;
}
</style>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001-ref.html
index fac58768281..4aaf3375abb 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001-ref.html
@@ -1,17 +1,16 @@
<!DOCTYPE html>
-<title>Reference for trimming block-boxes at their first/last formatted lines</title>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#leading-trim">
+<title>Untrimmed 3-line Reference</title>
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
.div-parent {
outline: 1px solid orange;
- font-family: Ahem;
- font-size: 20px;
- line-height: 1;
+ font: 20px/3 Ahem;
}
</style>
-<div class ="div-parent"">
- <div>Testline1<br><br><br>Testline2<br><br><br>Testline3</div>
+<div class="div-parent">
+ <div>Testline1</div>
+ <div>Testline2</div>
+ <div>Testline3</div>
</div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001.html
index 92ec181c51f..4eda7e48827 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001.html
@@ -1,24 +1,23 @@
<!DOCTYPE html>
-<title>Tests block boxes's edges are trimmed at text-over/text-under baselines of their first/last formatted lines</title>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#leading-trim">
+<title>text-box-trim propagation is blocked by empty block boxes</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://www.w3.org/TR/css-pseudo-4/#first-text-line">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<link rel="match" href="text-box-trim-half-leading-block-box-001-ref.html">
<style>
.div-parent {
outline: 1px solid orange;
- font-family: Ahem;
- font-size: 20px;
- line-height: 3;
- text-box-trim: both;
+ font: 20px/3 Ahem;
+ text-box-trim: trim-both;
text-box-edge: text;
}
</style>
-<div class ="div-parent">
- <div id="0"></div>
- <div id="1">Testline1</div>
- <div id="2">Testline2</div>
- <div id="3">Testline3</div>
+<div class="div-parent">
+ <div></div>
+ <div>Testline1</div>
+ <div>Testline2</div>
+ <div>Testline3</div>
<div></div>
</div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-002-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-002-ref.html
index 8c10a803706..c6b6f0e16bd 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-002-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-002-ref.html
@@ -1,17 +1,13 @@
<!DOCTYPE html>
-<title>Reference for trimming block-boxes at their first/last formatted lines</title>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#leading-trim">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
.div-parent {
outline: 1px solid orange;
- font-family: Ahem;
- font-size: 20px;
- line-height: 1;
+ font: 20px/1 Ahem;
writing-mode:vertical-lr;
}
</style>
-<div class ="div-parent">
+<div class="div-parent">
Test<br><br>
</div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-002.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-002.html
index e095a2d49c2..62c734405a0 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-002.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-002.html
@@ -1,19 +1,18 @@
<!DOCTYPE html>
-<title>Tests block boxes's edges are trimmed at text-over/text-under baselines of their first/last formatted lines</title>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#leading-trim">
+<title>text-box-trim trims the block-start (not over) side of a line box</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<link rel="match" href="text-box-trim-half-leading-block-box-002-ref.html">
<style>
.div-parent {
outline: 1px solid orange;
- font-family: Ahem;
- font-size: 20px;
- line-height: 3;
- writing-mode:vertical-lr;
- text-box-trim: start;
+ font: 20px/3 Ahem;
+ writing-mode: vertical-lr;
+ text-box-trim: trim-start;
text-box-edge: text;
}
</style>
-<div class ="div-parent">Test</div>
+<div class="div-parent">Test</div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-003-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-003-ref.html
new file mode 100644
index 00000000000..176526e55b2
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-003-ref.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<title>Trimmed 3-line Reference</title>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+
+<style>
+.div-parent {
+ outline: 1px solid orange;
+ font: 20px/1 Ahem;
+}
+</style>
+
+<div class="div-parent">
+ <div>Testline1<br><br><br>Testline2<br><br><br>Testline3</div>
+</div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-003.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-003.html
index 916afde8905..dc5e3204c98 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-003.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-003.html
@@ -1,22 +1,24 @@
<!DOCTYPE html>
-<title>Tests block boxes's edges are trimmed at text-over/text-under baselines of their first/last formatted lines</title>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#leading-trim">
+<title>text-box-trim trims through invisible line boxes</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://www.w3.org/TR/css-inline-3/#invisible-line-boxes">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
-<link rel="match" href="text-box-trim-half-leading-block-box-001-ref.html">
+<link rel="match" href="text-box-trim-half-leading-block-box-003-ref.html">
<style>
.div-parent {
outline: 1px solid orange;
- font-family: Ahem;
- font-size: 20px;
- line-height: 3;
- text-box-trim: both;
+ font: 20px/3 Ahem;
+ text-box-trim: trim-both;
text-box-edge: text;
}
+span {
+ border-block: solid red;
+}
</style>
-<div class ="div-parent">
- <div id="0"></div>
- <div id="1">Testline1<br>Testline2<br>Testline3</div>
- <div id="2"></div>
+<div class="div-parent">
+ <span> </span>
+ <div>Testline1<br>Testline2<br>Testline3</div>
+ <span> </span>
</div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-004.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-004.html
new file mode 100644
index 00000000000..3e24919fd7f
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-004.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<title>text-box-trim does not propagate through padding</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://www.w3.org/TR/css-inline-3/#invisible-line-boxes">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<link rel="match" href="text-box-trim-half-leading-block-box-001-ref.html">
+
+<style>
+.div-parent {
+ outline: 1px solid orange;
+ font: 20px/3 Ahem;
+ text-box-trim: trim-both;
+ text-box-edge: text;
+}
+.inner {
+ margin: -10px;
+ padding: 10px;
+}
+</style>
+
+<div class="div-parent">
+ <div class="inner">Testline1<br>Testline2<br>Testline3</div>
+</div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-005.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-005.html
new file mode 100644
index 00000000000..fd6b18d052b
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-005.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<title>text-box-trim does not propagate through borders</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://www.w3.org/TR/css-inline-3/#invisible-line-boxes">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<link rel="match" href="text-box-trim-half-leading-block-box-001-ref.html">
+
+<style>
+.div-parent {
+ outline: 1px solid orange;
+ font: 20px/3 Ahem;
+ text-box-trim: trim-both;
+ text-box-edge: text;
+}
+.inner {
+ margin: -10px;
+ border: 10px solid white;
+}
+</style>
+
+<div class="div-parent">
+ <div class="inner">Testline1<br>Testline2<br>Testline3</div>
+</div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-006.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-006.html
new file mode 100644
index 00000000000..ad6059ed7d8
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-006.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<title>text-box-trim does propagate through margins</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://www.w3.org/TR/css-inline-3/#invisible-line-boxes">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<link rel="match" href="text-box-trim-half-leading-block-box-003-ref.html">
+
+<style>
+.div-parent {
+ outline: 1px solid orange;
+ font: 20px/3 Ahem;
+ text-box-trim: trim-both;
+ text-box-edge: text;
+ padding: 10px;
+}
+.inner {
+ margin: -10px;
+}
+</style>
+
+<div class="div-parent">
+ <div class="inner">Testline1<br>Testline2<br>Testline3</div>
+</div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-001-ref.html
index 9bd12cb0bdf..7564a8c1b78 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-001-ref.html
@@ -3,15 +3,36 @@
<style>
.spacer {
background: lightgray;
- block-size: 100px;
+ block-size: 20px;
}
.target {
- font-family: Ahem;
- font-size: 100px;
- line-height: 1;
+ font: 100px/1 Ahem;
+}
+
+.height > .target,
+.min-height > .target {
height: 120px;
}
+
+.max-height > .target {
+ height: 10px;
+}
</style>
-<div class="spacer"></div>
-<div class="target">A</div>
-<div class="spacer"></div>
+
+<div class="height">
+ <div class="spacer"></div>
+ <div class="target">ApÉx</div>
+ <div class="spacer"></div>
+</div>
+
+<div class="min-height">
+ <div class="spacer"></div>
+ <div class="target">ApÉx</div>
+ <div class="spacer"></div>
+</div>
+
+<div class="max-height">
+ <div class="spacer"></div>
+ <div class="target">ApÉx</div>
+ <div class="spacer"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-001.html
index d732592e51a..e240f2343a9 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-001.html
@@ -1,23 +1,47 @@
<!DOCTYPE html>
-<title>Tests the `height` is the specified value when `text-box-trim` is applied</title>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim does not interfere with height and vice versa (start edge)</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-height-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
.spacer {
background: lightgray;
- block-size: 100px;
+ block-size: 20px;
}
.target {
- font-family: Ahem;
- font-size: 100px;
- line-height: 2;
- height: 120px;
- text-box-trim: both;
+ font: 100px/2 Ahem;
+ text-box-trim: trim-both;
text-box-edge: text alphabetic;
}
+
+.height > .target {
+ height: 120px;
+}
+
+.min-height > .target {
+ min-height: 120px;
+}
+
+.max-height > .target {
+ max-height: 10px;
+}
</style>
-<div class="spacer"></div>
-<div class="target">A</div>
-<div class="spacer"></div>
+
+<div class="height">
+ <div class="spacer"></div>
+ <div class="target">ApÉx</div>
+ <div class="spacer"></div>
+</div>
+
+<div class="min-height">
+ <div class="spacer"></div>
+ <div class="target">ApÉx</div>
+ <div class="spacer"></div>
+</div>
+
+<div class="max-height">
+ <div class="spacer"></div>
+ <div class="target">ApÉx</div>
+ <div class="spacer"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-002-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-002-ref.html
new file mode 100644
index 00000000000..61378327c75
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-002-ref.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+.spacer {
+ background: lightgray;
+ block-size: 20px;
+}
+.max-height > .spacer:first-child {
+ margin-top: 80px; /* avoid overlap */
+}
+
+.target {
+ font: 100px/1 Ahem;
+}
+
+.height > .target,
+.min-height > .target {
+ padding-top: 40px;
+ height: 80px;
+}
+
+.max-height > .target {
+ margin-top: -80px;
+ height: 90px;
+}
+</style>
+
+<div class="height">
+ <div class="spacer"></div>
+ <div class="target">ApÉx</div>
+ <div class="spacer"></div>
+</div>
+
+<div class="min-height">
+ <div class="spacer"></div>
+ <div class="target">ApÉx</div>
+ <div class="spacer"></div>
+</div>
+
+<div class="max-height">
+ <div class="spacer"></div>
+ <div class="target">ApÉx</div>
+ <div class="spacer"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-002.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-002.html
index 1249627f838..113dabc83f0 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-002.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-height-002.html
@@ -1,23 +1,53 @@
<!DOCTYPE html>
-<title>Tests the `height` is the specified value when `text-box-trim` is applied</title>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim does not interfere with height and vice versa (end edge)</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
+<link ref="help" href="https://www.w3.org/TR/css-align-3/#distribution-block">
<link rel="match" href="text-box-trim-height-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
.spacer {
background: lightgray;
- block-size: 100px;
+ block-size: 20px;
}
+.max-height > .spacer:first-child {
+ margin-top: 80px; /* avoid overlap */
+}
+
.target {
- font-family: Ahem;
- font-size: 100px;
- line-height: 2;
- min-height: 120px;
- text-box-trim: both;
+ font: 100px/2 Ahem;
+ text-box-trim: trim-both;
text-box-edge: text alphabetic;
+ align-content: end;
+}
+
+.height > .target {
+ height: 120px;
+}
+
+.min-height > .target {
+ min-height: 120px;
+}
+
+.max-height > .target {
+ max-height: 10px;
}
</style>
-<div class="spacer"></div>
-<div class="target">A</div>
-<div class="spacer"></div>
+
+<div class="height">
+ <div class="spacer"></div>
+ <div class="target">ApÉx</div>
+ <div class="spacer"></div>
+</div>
+
+<div class="min-height">
+ <div class="spacer"></div>
+ <div class="target">ApÉx</div>
+ <div class="spacer"></div>
+</div>
+
+<div class="max-height">
+ <div class="spacer"></div>
+ <div class="target">ApÉx</div>
+ <div class="spacer"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-end-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-end-001-ref.html
index f6f227e11d0..9d12d38d572 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-end-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-end-001-ref.html
@@ -7,10 +7,7 @@
position: relative;
}
.target {
- font-family: Ahem;
- font-size: 40px;
- line-height: 1;
- width: 200px;
+ font: 40px/1 Ahem;
}
.target::first-letter {
initial-letter: 3;
@@ -20,5 +17,5 @@
}
</style>
<div class="spacer"></div>
-<div class="target">XX &#x00C9;</div>
+<div class="target">ApÉx</div>
<div class="spacer offset"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-end-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-end-001.html
index 809666ee0d0..473b9e6bf09 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-end-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-end-001.html
@@ -1,6 +1,7 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim: trim-end works even in the presence of initial-letter</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-initial-letter-end-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -10,11 +11,8 @@
position: relative;
}
.target {
- font-family: Ahem;
- font-size: 40px;
- line-height: 1;
- width: 200px;
- text-box-trim: end;
+ font: 40px/1 Ahem;
+ text-box-trim: trim-end;
text-box-edge: text alphabetic;
}
.target::first-letter {
@@ -22,5 +20,5 @@
}
</style>
<div class="spacer"></div>
-<div class="target">XX &#x00C9;</div>
+<div class="target">ApÉx</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-start-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-start-001-ref.html
index 84a80e160c7..7a3adc8b7e2 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-start-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-start-001-ref.html
@@ -6,15 +6,13 @@
background: lightgray;
}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 1;
+ font: 40px/1 Ahem;
position: relative;
- top: -50px;
+ top: -40px;
}
.target::first-letter {
- initial-letter: 2 1;
+ font-size: 90px;
}
</style>
<div class="spacer"></div>
-<div class="target">&#x00C9;&#x00C9;</div>
+<div class="target">ApÉx</div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-start-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-start-001.html
index 4f8d3a33e5b..ad7442d4b47 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-start-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-initial-letter-start-001.html
@@ -1,6 +1,7 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim: trim-start works even in the presence of initial-letter</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-initial-letter-start-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -9,10 +10,8 @@
background: lightgray;
}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 1;
- text-box-trim: start;
+ font: 40px/1 Ahem;
+ text-box-trim: trim-start;
text-box-edge: text;
}
.target::first-letter {
@@ -20,4 +19,4 @@
}
</style>
<div class="spacer"></div>
-<div class="target">&#x00C9;&#x00C9;</div>
+<div class="target">ApÉx</div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-001-ref.html
index e8d6ba60b18..31b11cb6843 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-001-ref.html
@@ -6,9 +6,7 @@
block-size: 100px;
}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 2;
+ font-family: 50px/2 Ahem;
height: 275px;
}
.clamp {
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-001.html
index e0af246db0e..88cd7454c54 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-001.html
@@ -1,6 +1,8 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim applies to the last line after line-clamp</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
+<link ref="help" href="https://www.w3.org/TR/css-overflow-4/#line-clamp">
<link rel="match" href="text-box-trim-line-clamp-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -9,10 +11,8 @@
block-size: 100px;
}
.target {
- font-family: Ahem;
- font-size: 50px;
- line-height: 2;
- text-box-trim: end;
+ font-family: 50px/2 Ahem;
+ text-box-trim: trim-end;
text-box-edge: text;
}
.clamp {
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-multicol-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-multicol-001.html
index 69323e0aeff..80f897aa4b6 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-multicol-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-multicol-001.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<title>Test when a box with `text-box-trim` is multi-column</title>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-multicol-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-multicol-002.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-multicol-002.html
index dbba108b16d..f15746d3d6a 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-multicol-002.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-multicol-002.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<title>Test when a box with `text-box-trim` is block fragmented</title>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
<link rel="match" href="text-box-trim-multicol-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-om-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-om-001.html
index da66de00555..4184dcb6388 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-om-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-om-001.html
@@ -1,12 +1,12 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
@font-face {
font-family: test-font;
- src: url(resources/cap-x-height.ttf);
+ src: url(support/cap-x-height.ttf);
}
.spacer {
background: lightgray;
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-end-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-end-001.html
index 5d0229fa373..5494b00d17e 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-end-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-end-001.html
@@ -1,6 +1,7 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim ignores ruby annotations under</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://www.w3.org/TR/css-ruby/">
<link rel="match" href="text-box-trim-ruby-start-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -9,11 +10,8 @@
background: lightgray;
}
.target {
- font-family: Ahem;
- font-size: 40px;
- line-height: 1;
- ruby-position: under;
- text-box-trim: end;
+ font: 40px/1 Ahem;
+ text-box-trim: trim-end;
text-box-edge: text;
}
rt {
@@ -23,5 +21,5 @@ rt {
}
</style>
<div class="spacer"></div>
-<div class="target">A <ruby>BASE<rt>RUBY</rt></ruby> B</div>
+<div class="target">A <ruby>BASE<rt style="ruby-position: over">RUBY</rt></ruby> <ruby>BASE<rt style="ruby-position: under">RUBY</rt></ruby> B</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-start-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-start-001-ref.html
index dc1115d3bf8..8abe7616ec4 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-start-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-start-001-ref.html
@@ -12,5 +12,5 @@
}
</style>
<div class="spacer"></div>
-<div class="target">A BASE B</div>
+<div class="target">A BASE BASE B</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-start-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-start-001.html
index d673d0ab02d..b64c5c49e0c 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-start-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-start-001.html
@@ -1,6 +1,7 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim ignores ruby annotations over</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://www.w3.org/TR/css-ruby/">
<link rel="match" href="text-box-trim-ruby-start-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -9,10 +10,8 @@
background: lightgray;
}
.target {
- font-family: Ahem;
- font-size: 40px;
- line-height: 1;
- text-box-trim: start;
+ font: 40px/1 Ahem;
+ text-box-trim: trim-start;
text-box-edge: text;
}
rt {
@@ -22,5 +21,5 @@ rt {
}
</style>
<div class="spacer"></div>
-<div class="target">A <ruby>BASE<rt>RUBY</rt></ruby> B</div>
+<div class="target">A <ruby>BASE<rt style="ruby-position: over">RUBY</rt></ruby> <ruby>BASE<rt style="ruby-position: under">RUBY</rt></ruby> B</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-start-002.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-start-002.html
index 9fd8be7dfc5..c4430278ada 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-start-002.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-ruby-start-002.html
@@ -1,6 +1,7 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim ignores ruby annotations combined with emphasis marks</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://www.w3.org/TR/css-ruby/">
<link rel="match" href="text-box-trim-ruby-start-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -9,10 +10,8 @@
background: lightgray;
}
.target {
- font-family: Ahem;
- font-size: 40px;
- line-height: 1;
- text-box-trim: start;
+ font: 40px/1 Ahem;
+ text-box-trim: trim-start;
text-box-edge: text;
text-emphasis: dot transparent;
}
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html
index 40067cc5925..a03255c46b6 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-start-001-ref.html
@@ -1,26 +1,22 @@
<!DOCTYPE html>
-<script src="resources/variant-class.js"></script>
+<script src="support/variant-class.js"></script>
<style>
-@font-face {
- font-family: test-font;
- src: url(resources/cap-x-height.ttf);
-}
+@import "support/MetricsTestFont.css";
+
.spacer {
background: lightgray;
block-size: 100px;
}
.target {
- font-family: test-font;
- font-size: 100px;
- line-height: 2;
+ font: 100px/2 MetricsTestFont;
}
.offset {
position: relative;
}
.vrl { writing-mode: vertical-rl; }
.vlr { writing-mode: vertical-lr; }
-.text .target { line-height: 150px; }
-.text .offset { inset-block-start: -25px; }
+.auto .target, .text .target { line-height: 150px; }
+.auto .offset, .text .offset { inset-block-start: -25px; }
.cap .target { line-height: 130px; }
.cap .offset { inset-block-start: -35px; }
.ex .target { line-height: 90px; }
@@ -30,6 +26,6 @@
</style>
<div class="spacer"></div>
<div class="target">
- <span class="offset">A</span>
+ <span class="offset">ApÉx</span>
</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-start-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-start-001.html
index 35ac848aa62..106f027688c 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-start-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-start-001.html
@@ -1,42 +1,40 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>Test text-box-trim: trim-end on various writing modes</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
<link rel="match" href="text-box-trim-start-001-ref.html">
<script src="resources/variant-class.js"></script>
-<meta name="variant" content="?class=leading">
+<meta name="variant" content="?class=auto">
<meta name="variant" content="?class=text">
<meta name="variant" content="?class=cap">
<meta name="variant" content="?class=ex">
-<meta name="variant" content="?class=vrl,leading">
+<meta name="variant" content="?class=vrl,auto">
<meta name="variant" content="?class=vrl,text">
<meta name="variant" content="?class=vrl,cap">
<meta name="variant" content="?class=vrl,ex">
-<meta name="variant" content="?class=vlr,leading">
+<meta name="variant" content="?class=vlr,auto">
<meta name="variant" content="?class=vlr,text">
<meta name="variant" content="?class=vlr,alphabetic">
<style>
-@font-face {
- font-family: test-font;
- src: url(resources/cap-x-height.ttf);
-}
+@import "support/MetricsTestFont.css";
+
.spacer {
background: lightgray;
block-size: 100px;
}
.target {
- font-family: test-font;
- font-size: 100px;
- line-height: 2;
- text-box-trim: start;
+ font: 100px/2 MetricsTestFont;
+ text-box-trim: trim-start;
}
.vrl { writing-mode: vertical-rl; }
.vlr { writing-mode: vertical-lr; }
-.leading .target { text-box-edge: leading; }
+.auto .target { text-box-edge: auto; }
.text .target { text-box-edge: text; }
-.cap .target { text-box-edge: cap; }
-.ex .target { text-box-edge: ex; }
-.vlr.alphabetic .target { text-box-edge: text alphabetic; }
+.cap .target { text-box-edge: cap; }
+.ex .target { text-box-edge: ex; }
+.vlr.alphabetic
+ .target { text-box-edge: text alphabetic; }
</style>
<div class="spacer"></div>
-<div class="target">A</div>
+<div class="target">ApÉx</div>
<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-tall-line-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-tall-line-001.html
index 9a86e394cc0..3534d36e0b4 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-tall-line-001.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-tall-line-001.html
@@ -1,6 +1,7 @@
<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
+<title>text-box-trim references the block container metrics, not inline descendants</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge">
<link rel="match" href="text-box-trim-tall-line-001-ref.html">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
@@ -9,10 +10,8 @@
block-size: 100px;
}
.target {
- font-family: Ahem;
- font-size: 100px;
- line-height: 2;
- text-box-trim: both;
+ font: 100px/2 Ahem;
+ text-box-trim: trim-both;
text-box-edge: text;
}
</style>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-text-emphasis-start-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-text-emphasis-001-ref.html
index 96e0c5a3208..f34c29f491a 100644
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-text-emphasis-start-001-ref.html
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-text-emphasis-001-ref.html
@@ -6,12 +6,9 @@
background: lightgray;
}
.target {
- font-family: Ahem;
- font-size: 40px;
- line-height: 1;
- text-box-trim: start;
- text-box-edge: text;
+ font: 40px/1 Ahem;
}
</style>
<div class="spacer"></div>
-<div class="target">It is important!</div>
+<div class="target"><span>super</span> <span>important</span></div>
+<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-text-emphasis-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-text-emphasis-001.html
new file mode 100644
index 00000000000..174472365e6
--- /dev/null
+++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-text-emphasis-001.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<title>text-box-trim ignores emphasis marks</title>
+<link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim">
+<link rel="help" href="https://www.w3.org/TR/css-text-decor/#emphasis-marks">
+<link rel="match" href="text-box-trim-text-emphasis-001-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"/>
+<style>
+.spacer {
+ height: 40px;
+ background: lightgray;
+}
+.target {
+ font: 40px/2 Ahem;
+ text-box-trim: trim-both;
+ text-box-edge: text;
+}
+em {
+ text-emphasis: dot;
+ text-emphasis-position: over;
+}
+em + em {
+ text-emphasis-position: under;
+}
+</style>
+<div class="spacer"></div>
+<div class="target"><span>super</span> <span>important</span></div>
+<div class="spacer"></div>
diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-text-emphasis-start-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-text-emphasis-start-001.html
deleted file mode 100644
index 2c38611ee32..00000000000
--- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-text-emphasis-start-001.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge">
-<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim">
-<link rel="match" href="text-box-trim-text-emphasis-start-001-ref.html">
-<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"/>
-<style>
-.spacer {
- height: 40px;
- background: lightgray;
-}
-.target {
- font-family: Ahem;
- font-size: 40px;
- line-height: 1;
- text-box-trim: start;
- text-box-edge: text;
- text-emphasis: dot transparent;
-}
-</style>
-<div class="spacer"></div>
-<div class="target">It is important!</div>
diff --git a/tests/wpt/tests/css/css-masonry/WEB_FEATURES.yml b/tests/wpt/tests/css/css-masonry/WEB_FEATURES.yml
new file mode 100644
index 00000000000..30261400ceb
--- /dev/null
+++ b/tests/wpt/tests/css/css-masonry/WEB_FEATURES.yml
@@ -0,0 +1,3 @@
+features:
+- name: masonry
+ files: "**"
diff --git a/tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-template-tracks-invalid.html b/tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-template-tracks-invalid.html
new file mode 100644
index 00000000000..df690851b14
--- /dev/null
+++ b/tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-template-tracks-invalid.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<title>CSS Masonry: Parsing masonry-template-tracks with invalid values</title>
+<link rel="author" title="Ethan Jimenez" href="mailto:ethavar@microsoft.com">
+<link rel="help" href="https://tabatkins.github.io/specs/css-masonry/#template-tracks">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<script>
+ test_invalid_value("masonry-template-tracks", '-10px');
+ test_invalid_value("masonry-template-tracks", '-20%');
+ test_invalid_value("masonry-template-tracks", '-5fr');
+ test_invalid_value("masonry-template-tracks", 'minmax(5fr, calc(0.5em + 10px))');
+ test_invalid_value("masonry-template-tracks", 'minmax(-10px, auto)');
+ test_invalid_value("masonry-template-tracks", 'minmax(-20%, max-content)');
+ test_invalid_value("masonry-template-tracks", 'minmax(min-content, -20%)');
+ test_invalid_value("masonry-template-tracks", 'fit-content(-10px)');
+ test_invalid_value("masonry-template-tracks", 'fit-content(-20%)');
+ test_invalid_value("masonry-template-tracks", '[one] 10px [two three] repeat(20%) [four five six] 3fr [seven]');
+ test_invalid_value("masonry-template-tracks", '[one]');
+ test_invalid_value("masonry-template-tracks", '[one] 10px [two] [three]');
+ test_invalid_value("masonry-template-tracks", 'repeat(auto-fill, -10px)');
+ test_invalid_value("masonry-template-tracks", 'repeat(auto-fill, 10px) repeat(auto-fill, 20%)');
+ test_invalid_value("masonry-template-tracks", '[auto] 1px');
+</script>
diff --git a/tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-template-tracks-valid.html b/tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-template-tracks-valid.html
new file mode 100644
index 00000000000..7397760e7be
--- /dev/null
+++ b/tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-template-tracks-valid.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<title>CSS Masonry: Parsing masonry-template-tracks with valid values</title>
+<link rel="author" title="Ethan Jimenez" href="mailto:ethavar@microsoft.com">
+<link rel="help" href="https://tabatkins.github.io/specs/css-masonry/#template-tracks">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<script>
+ test_valid_value("masonry-template-tracks", "auto");
+ test_valid_value("masonry-template-tracks", "10px");
+ test_valid_value("masonry-template-tracks", "20%");
+ test_valid_value("masonry-template-tracks", "calc(-0.5em + 10px)");
+ test_valid_value("masonry-template-tracks", "calc(0.5em + 10px)");
+ test_valid_value("masonry-template-tracks", "calc(30% + 40vw)");
+ test_valid_value("masonry-template-tracks", "5FR", "5fr");
+ test_valid_value("masonry-template-tracks", "min-content");
+ test_valid_value("masonry-template-tracks", "Max-Content", "max-content");
+ test_valid_value("masonry-template-tracks", "AuTo", "auto");
+ test_valid_value("masonry-template-tracks", "1fr 2fr 1fr");
+ test_valid_value("masonry-template-tracks", "minmax(10px, auto)");
+ test_valid_value("masonry-template-tracks", "minmax(20%, max-content)");
+ test_valid_value("masonry-template-tracks", "minmax(calc(-0.5em + 10px), min-content)");
+ test_valid_value("masonry-template-tracks", "minmax(calc(0.5em + 10px), 5fr)");
+ test_valid_value("masonry-template-tracks", "minmax(calc(30% + 40vw), 10px)");
+ test_valid_value("masonry-template-tracks", "minmax(min-content, 20%)");
+ test_valid_value("masonry-template-tracks", "minmax(max-content, calc(-0.5em + 10px))");
+ test_valid_value("masonry-template-tracks", "minmax(auto, calc(0.5em + 10px))");
+ test_valid_value("masonry-template-tracks", "repeat(5, auto)");
+ test_valid_value("masonry-template-tracks", "repeat(auto-fill, 25%)");
+ test_valid_value("masonry-template-tracks", "[] 150px [] 1fr []", "150px 1fr");
+ test_valid_value("masonry-template-tracks", "repeat(1, [] 10px [])", "repeat(1, 10px)");
+</script>
diff --git a/tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-track-computed.html b/tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-track-computed.html
new file mode 100644
index 00000000000..a2d6e54dcce
--- /dev/null
+++ b/tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-track-computed.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<title>CSS Masonry: masonry-track-* getComputedStyle()</title>
+<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com">
+<link rel="help" href="https://tabatkins.github.io/specs/css-masonry/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/computed-testcommon.js"></script>
+<script src="/css/support/inheritance-testcommon.js"></script>
+<div id="container">
+ <div id="target"></div>
+</div>
+<script>
+ // auto
+ test_computed_value("masonry-track-end", "auto");
+ test_computed_value("masonry-track-start", "auto");
+
+ // <custom-ident>
+ test_computed_value("masonry-track-end", "_9");
+ test_computed_value("masonry-track-start", "-_π");
+
+ // <integer> && <custom-ident>?
+ test_computed_value("masonry-track-end", "-44 Z");
+ test_computed_value("masonry-track-start", "+90 X", "90 X");
+
+ // span && [ <integer> || <custom-ident> ]
+ test_computed_value("masonry-track-end", "span 1 i", "span i");
+ test_computed_value("masonry-track-start", "span 2");
+</script> \ No newline at end of file
diff --git a/tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-track-invalid.html b/tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-track-invalid.html
new file mode 100644
index 00000000000..589b837ce68
--- /dev/null
+++ b/tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-track-invalid.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<title>CSS Masonry: masonry-track-* parsing</title>
+<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com">
+<link rel="help" href="https://tabatkins.github.io/specs/css-masonry/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<body>
+<script>
+ test_invalid_value("masonry-track-start", "0");
+ test_invalid_value("masonry-track-end", "span");
+ test_invalid_value("masonry-track-end", "sPaN");
+ test_invalid_value("masonry-track-end", '"1st"');
+ test_invalid_value("masonry-track-end", "1st");
+ test_invalid_value("masonry-track-start", "auto 1");
+ test_invalid_value("masonry-track-start", "1 auto");
+ test_invalid_value("masonry-track-end", "span 1 / span 2");
+</script> \ No newline at end of file
diff --git a/tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-track-valid.html b/tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-track-valid.html
new file mode 100644
index 00000000000..edf94c285f3
--- /dev/null
+++ b/tests/wpt/tests/css/css-masonry/tentative/parsing/masonry-track-valid.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>CSS Masonry: masonry-track-* parsing</title>
+<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com">
+<link rel="help" href="https://tabatkins.github.io/specs/css-masonry/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<body>
+<script>
+ // auto
+ test_valid_value("masonry-track-end", "AuTo", "auto");
+ test_valid_value("masonry-track-start", "AuTo", "auto");
+
+ // <custom-ident>
+ test_valid_value("masonry-track-end", "a_3");
+ test_valid_value("masonry-track-start", "-_π");
+
+ // <integer> && <custom-ident>?
+ test_valid_value("masonry-track-end", "Z -44", "-44 Z");
+ test_valid_value("masonry-track-start", "+90", "90");
+
+ // span && [ <integer> || <custom-ident> ]
+ test_valid_value("masonry-track-end", "SpAn i 2", "span 2 i");
+ test_valid_value("masonry-track-start", "2 i span", "span 2 i");
+</script> \ No newline at end of file
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-028.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-028.tentative.html
new file mode 100644
index 00000000000..b8fa48025b6
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-028.tentative.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: sizing of line-clamp elements with ruby annotations</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-028-ref.html">
+<meta name="assert" content="The sizing of a line-clamp element should be exactly as if it had no content after clamp, even if there are ruby annotations involved.">
+<style>
+.clamp {
+ line-clamp: 3;
+ font-size: 16px / 16px serif;
+ white-space: pre-wrap;
+ background-color: yellow;
+ padding-bottom: 1em;
+}
+ruby.under {
+ ruby-position: under;
+}
+.large {
+ font-size: 3em;
+}
+</style>
+<div class="clamp">Line 1
+Line 2
+<ruby class="under">Line 3<rt>ruby</ruby>
+<ruby>Line 4<rt class="large">ruby</ruby>
+Line 5
+<ruby class="under">Line 6<rt class="large">ruby</ruby></div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-001.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-001.tentative.html
new file mode 100644
index 00000000000..5f69cc1b71e
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-001.tentative.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: `line-clamp: auto` with ruby</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-auto-with-ruby-001-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="assert" content="The last line before clamp should have an ellipsis when it has line-over ruby.">
+<style>
+.clamp {
+ line-clamp: auto;
+ max-height: 6lh;
+ font: 16px / 32px serif;
+ white-space: pre;
+ background-color: yellow;
+ padding: 0 4px;
+}
+rt {
+ font: 32px / 32px Ahem;
+ color: blue;
+}
+</style>
+
+<div class="clamp">Line 1
+Line 2
+Line 3
+Line 4
+<ruby>Line 5<rt>X</ruby>
+Line 6</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-002.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-002.tentative.html
new file mode 100644
index 00000000000..62fe4814bda
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-002.tentative.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: `line-clamp: auto` with ruby</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/webkit-line-clamp-005-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="assert" content="A line-over ellipsis on the first line after clamp should not show through the previous line's leading.">
+<style>
+.clamp {
+ line-clamp: auto;
+ max-height: 4lh;
+ font: 16px / 32px serif;
+ white-space: pre;
+ background-color: yellow;
+ padding: 0 4px;
+}
+rt {
+ font: 16px / 32px Ahem;
+ color: red;
+}
+</style>
+
+<div class="clamp">Line 1
+Line 2
+Line 3
+Line 4
+<ruby>Line 5<rt>X</ruby>
+Line 6</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-003.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-003.tentative.html
new file mode 100644
index 00000000000..4a3b83093dd
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-003.tentative.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: `line-clamp: auto` with ruby</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-auto-with-ruby-003-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="assert" content="If the last line before clamp has line-under ruby, it should have an ellipsis, and the line-clamp container should be sized the same as a new BFC that had such a ruby at the end.">
+<style>
+.clamp {
+ line-clamp: auto;
+ max-height: 6lh;
+ font: 16px / 32px serif;
+ white-space: pre;
+ background-color: yellow;
+ padding: 0 4px;
+}
+ruby {
+ ruby-position: under;
+}
+rt {
+ font: 32px / 32px Ahem;
+ color: blue;
+}
+</style>
+
+<div class="clamp">Line 1
+Line 2
+Line 3
+Line 4
+<ruby>Line 5<rt>X</ruby>
+Line 6</div>
+
+<p>Following content.</p>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-004.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-004.tentative.html
new file mode 100644
index 00000000000..6b93203de4d
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-004.tentative.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: `line-clamp: auto` with ruby</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/webkit-line-clamp-005-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="assert" content="If a line-under ruby increases the bottom leading of what would be the last line before clamp so that it does not fully fit within the height, the clamp point will be set before that line.">
+<style>
+.clamp {
+ line-clamp: auto;
+ max-height: 5lh;
+ font: 16px / 32px serif;
+ white-space: pre;
+ background-color: yellow;
+ padding: 0 4px;
+}
+ruby {
+ ruby-position: under;
+}
+rt {
+ font: 32px / 32px Ahem;
+ color: blue;
+}
+</style>
+
+<div class="clamp">Line 1
+Line 2
+Line 3
+Line 4
+<ruby>Line 5<rt>X</ruby>
+Line 6</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-005.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-005.tentative.html
new file mode 100644
index 00000000000..af2a19d6fb0
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-with-ruby-005.tentative.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: `line-clamp: auto` with ruby</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-auto-with-ruby-005-ref.html">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<meta name="assert" content="If a line-under ruby would increase the bottom leading of what would be the last line before clamp so that it does not fully fit within the height, but instead the ruby annotation space eats into the box's bottom padding, then the clamp point will be set after that line.">
+<style>
+.clamp {
+ line-clamp: auto;
+ max-height: 5lh;
+ font: 16px / 32px serif;
+ white-space: pre;
+ background-color: yellow;
+ padding: 0 4px;
+
+ /* With the Ahem font, the text is 16px = .5lh tall. Without ruby, the leading
+ * would be evenly distributed, so the bottom leading would be .25lh. Since
+ * the ruby annotation is 1lh tall, we need .75lh of padding to completely
+ * contain it. */
+ padding-bottom: .75lh;
+}
+ruby {
+ font-family: Ahem;
+ ruby-position: under;
+}
+rt {
+ font: 32px / 32px Ahem;
+ color: blue;
+}
+</style>
+
+<div class="clamp">Line 1
+Line 2
+Line 3
+Line 4
+<ruby>Line 5<rt>X</ruby>
+Line 6</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-028-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-028-ref.html
new file mode 100644
index 00000000000..21ec61f5c77
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-028-ref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Reference</title>
+<style>
+.clamp {
+ font-size: 16px / 16px serif;
+ white-space: pre-wrap;
+ background-color: yellow;
+ padding-bottom: 1em;
+}
+ruby.under {
+ ruby-position: under;
+}
+</style>
+<div class="clamp">Line 1
+Line 2
+<ruby class="under">Line 3<rt>ruby</ruby>…</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-with-ruby-001-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-with-ruby-001-ref.html
new file mode 100644
index 00000000000..03d12b9c722
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-with-ruby-001-ref.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Reference</title>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+.clamp {
+ font: 16px / 32px serif;
+ white-space: pre;
+ background-color: yellow;
+ padding: 0 4px;
+}
+rt {
+ font: 32px / 32px Ahem;
+ color: blue;
+}
+</style>
+
+<div class="clamp">Line 1
+Line 2
+Line 3
+Line 4
+<ruby>Line 5<rt>X</ruby>…</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-with-ruby-003-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-with-ruby-003-ref.html
new file mode 100644
index 00000000000..0b6a569dc8e
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-with-ruby-003-ref.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Reference</title>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+.clamp {
+ font: 16px / 32px serif;
+ white-space: pre;
+ background-color: yellow;
+ padding: 0 4px;
+}
+ruby {
+ ruby-position: under;
+}
+rt {
+ font: 32px / 32px Ahem;
+ color: blue;
+}
+</style>
+
+<div class="clamp">Line 1
+Line 2
+Line 3
+Line 4
+<ruby>Line 5<rt>X</ruby>…</div>
+
+<p>Following content.</p>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-with-ruby-005-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-with-ruby-005-ref.html
new file mode 100644
index 00000000000..dca5f1b120c
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-with-ruby-005-ref.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Reference</title>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+.clamp {
+ font: 16px / 32px serif;
+ white-space: pre;
+ background-color: yellow;
+ padding: 0 4px;
+ padding-bottom: .75lh;
+}
+ruby {
+ font-family: Ahem;
+ ruby-position: under;
+}
+rt {
+ font: 32px / 32px Ahem;
+ color: blue;
+}
+</style>
+
+<div class="clamp">Line 1
+Line 2
+Line 3
+Line 4
+<ruby>Line 5<rt>X</ruby>…</div>
diff --git a/tests/wpt/tests/css/css-scoping/host-has-001.html b/tests/wpt/tests/css/css-scoping/host-has-001.html
new file mode 100644
index 00000000000..79c89874c63
--- /dev/null
+++ b/tests/wpt/tests/css/css-scoping/host-has-001.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>:host(:has(...)) direct descendent</title>
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div id="host">
+ <template shadowrootmode="open">
+ <style>
+ div {
+ width: 100px;
+ height: 100px;
+ background-color: red;
+ }
+ :host(:has(section)) div {
+ background-color: green;
+ }
+ </style>
+ <div></div>
+ <slot></slot>
+ </template>
+ <section></section>
+</div>
diff --git a/tests/wpt/tests/css/css-scoping/host-has-002.html b/tests/wpt/tests/css/css-scoping/host-has-002.html
new file mode 100644
index 00000000000..33a705672ae
--- /dev/null
+++ b/tests/wpt/tests/css/css-scoping/host-has-002.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>:host(:has(...)) complex descendent</title>
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div id="host">
+ <template shadowrootmode="open">
+ <style>
+ div {
+ width: 100px;
+ height: 100px;
+ background-color: red;
+ }
+ :host(:has(section h1)) div {
+ background-color: green;
+ }
+ </style>
+ <div></div>
+ <slot></slot>
+ </template>
+ <section>
+ <h1></h1>
+ </section>
+</div>
diff --git a/tests/wpt/tests/css/css-scoping/host-has-003.html b/tests/wpt/tests/css/css-scoping/host-has-003.html
new file mode 100644
index 00000000000..58f1482564b
--- /dev/null
+++ b/tests/wpt/tests/css/css-scoping/host-has-003.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>:host(:has(...)) deep descendent</title>
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div id="host">
+ <template shadowrootmode="open">
+ <style>
+ div {
+ width: 100px;
+ height: 100px;
+ background-color: red;
+ }
+ :host(:has(h1)) div {
+ background-color: green;
+ }
+ </style>
+ <div></div>
+ <slot></slot>
+ </template>
+ <section>
+ <h1></h1>
+ </section>
+</div>
diff --git a/tests/wpt/tests/css/css-scoping/host-has-internal-001.tentative.html b/tests/wpt/tests/css/css-scoping/host-has-internal-001.tentative.html
new file mode 100644
index 00000000000..c2082de0ac3
--- /dev/null
+++ b/tests/wpt/tests/css/css-scoping/host-has-internal-001.tentative.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>:host(:has(...)) internal descendent</title>
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div id="host">
+ <template shadowrootmode="open">
+ <style>
+ div {
+ width: 100px;
+ height: 100px;
+ background-color: red;
+ }
+ :host:has(section) div {
+ background-color: green;
+ }
+ </style>
+ <div></div>
+ <section></section>
+ </template>
+</div>
diff --git a/tests/wpt/tests/css/css-scoping/host-has-internal-002.tentative.html b/tests/wpt/tests/css/css-scoping/host-has-internal-002.tentative.html
new file mode 100644
index 00000000000..217ed9596c4
--- /dev/null
+++ b/tests/wpt/tests/css/css-scoping/host-has-internal-002.tentative.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>:host(:has(...)) complex internal descendent</title>
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div id="host">
+ <template shadowrootmode="open">
+ <style>
+ div {
+ width: 100px;
+ height: 100px;
+ background-color: red;
+ }
+ :host:has(section h1) div {
+ background-color: green;
+ }
+ </style>
+ <div></div>
+ <section>
+ <h1></h1>
+ </section>
+ </template>
+</div>
diff --git a/tests/wpt/tests/css/css-scoping/host-has-internal-003.tentative.html b/tests/wpt/tests/css/css-scoping/host-has-internal-003.tentative.html
new file mode 100644
index 00000000000..9c0a7248345
--- /dev/null
+++ b/tests/wpt/tests/css/css-scoping/host-has-internal-003.tentative.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>:host(:has(...)) deep internal descendent</title>
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div id="host">
+ <template shadowrootmode="open">
+ <style>
+ div {
+ width: 100px;
+ height: 100px;
+ background-color: red;
+ }
+ :host:has(h1) div {
+ background-color: green;
+ }
+ </style>
+ <div></div>
+ <section>
+ <h1></h1>
+ </section>
+ </template>
+</div>
diff --git a/tests/wpt/tests/css/css-scrollbars/scrollbar-gutter-scroll-into-view-ref.html b/tests/wpt/tests/css/css-scrollbars/scrollbar-gutter-scroll-into-view-ref.html
new file mode 100644
index 00000000000..72cadd8eab5
--- /dev/null
+++ b/tests/wpt/tests/css/css-scrollbars/scrollbar-gutter-scroll-into-view-ref.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<title>CSS Test Reference: scrollIntoView with scrollbar gutter on root frame viewport</title>
+<style>
+ :root {
+ scrollbar-gutter: stable both-edges;
+ writing-mode: vertical-lr;
+ overflow: hidden;
+ }
+
+ body {
+ margin: 0;
+ }
+
+ #target {
+ width: 100px;
+ height: 100px;
+ border: 4px solid black;
+ position: absolute;
+ left: 0;
+ top: 0px;
+ background-color: lightgreen;=
+ }
+ #bg {
+ background-color: khaki;
+ width: 200vw;
+ height: 400vh;
+ }
+</style>
+<div id="bg"></div>
+<div id="target"></div> \ No newline at end of file
diff --git a/tests/wpt/tests/css/css-scrollbars/scrollbar-gutter-scroll-into-view.html b/tests/wpt/tests/css/css-scrollbars/scrollbar-gutter-scroll-into-view.html
new file mode 100644
index 00000000000..a619d1aa3e4
--- /dev/null
+++ b/tests/wpt/tests/css/css-scrollbars/scrollbar-gutter-scroll-into-view.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Test: scrollIntoView with scrollbar gutter on root frame viewport</title>
+<link rel="author" href="mailto:sakhapov@chromium.org">
+<link rel="match" href="scrollbar-gutter-scroll-into-view-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css-overflow/#scrollbar-gutter-property">
+<link rel="help" href="https://crbug.com/355460994">
+<style>
+ :root {
+ scrollbar-gutter: stable both-edges;
+ writing-mode: vertical-lr;
+ overflow: hidden;
+ }
+
+ body {
+ margin: 0;
+ }
+
+ #target {
+ width: 100px;
+ height: 100px;
+ border: 4px solid black;
+ position: absolute;
+ left: 10px;
+ top: 150vh;
+ background-color: lightgreen;
+ }
+ #bg {
+ background-color: khaki;
+ width: 200vw;
+ height: 400vh;
+ }
+</style>
+<div id="bg"></div>
+<div id="target"></div>
+<script>
+target.scrollIntoView({ inline: "start" });
+</script> \ No newline at end of file
diff --git a/tests/wpt/tests/css/css-shadow-parts/grouping-with-checked.html b/tests/wpt/tests/css/css-shadow-parts/grouping-with-checked.html
new file mode 100644
index 00000000000..e7620b6f932
--- /dev/null
+++ b/tests/wpt/tests/css/css-shadow-parts/grouping-with-checked.html
@@ -0,0 +1,67 @@
+<!doctype html>
+<title>::part():disabled grouping</title>
+<link rel="help" href="https://drafts.csswg.org/css-shadow-parts/">
+<style>
+ my-element::part(checkbox) {
+ font-family: fantasy;
+ background-color: #ff0000;
+ }
+ #grouped {
+ color: #ff0000;
+ }
+ my-element::part(checkbox):checked {
+ background-color: #00ff00;
+ }
+ my-element::part(checkbox):checked,
+ #grouped {
+ color: #00ff00;
+ }
+ my-element::part(not-a-part):checked,
+ #grouped {
+ font-family: monospace;
+ }
+</style>
+<body>
+ <my-element id="subject"></my-element>
+ <p id="grouped">Text</p>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script>
+ const RED = "rgb(255, 0, 0)";
+ const GREEN = "rgb(0, 255, 0)";
+ customElements.define(
+ "my-element",
+ class MyElement extends HTMLElement {
+ connectedCallback() {
+ this.attachShadow({
+ mode: "open",
+ }).innerHTML = `
+ <input part="checkbox" type="checkbox" checked />
+ `;
+ this.elementInternals = this.attachInternals();
+ }
+
+ get inner() {
+ return this.shadowRoot.querySelector("[part=checkbox]");
+ }
+ },
+ );
+
+ test(() => {
+ assert_equals(getComputedStyle(subject.inner).fontFamily, 'fantasy');
+ }, "Styles applied to ::part(...)");
+
+ test(() => {
+ assert_equals(getComputedStyle(subject.inner).backgroundColor, GREEN);
+ }, "Styles applied to ::part(...):checked");
+
+ test(() => {
+ assert_equals(getComputedStyle(subject.inner).color, GREEN);
+ assert_equals(getComputedStyle(grouped).color, GREEN);
+ }, "Styles applied via grouped selector including matched ::part(...):checked");
+
+ test(() => {
+ assert_equals(getComputedStyle(grouped).fontFamily, 'monospace');
+ }, "Styles applied via grouped selector including unmatched ::part(...):checked");
+ </script>
+</body>
diff --git a/tests/wpt/tests/css/css-shadow-parts/grouping-with-disabled.html b/tests/wpt/tests/css/css-shadow-parts/grouping-with-disabled.html
index 187b40ba3b5..8e479e66911 100644
--- a/tests/wpt/tests/css/css-shadow-parts/grouping-with-disabled.html
+++ b/tests/wpt/tests/css/css-shadow-parts/grouping-with-disabled.html
@@ -4,16 +4,20 @@
<style>
my-element::part(button) {
font-family: fantasy;
+ background-color: #ff0000;
+ }
+ #grouped {
+ color: #ff0000;
}
my-element::part(button):disabled {
- background-color: #ff0000;
+ background-color: #00ff00;
}
my-element::part(button):disabled,
- p {
- color: #0000ff;
+ #grouped {
+ color: #00ff00;
}
my-element::part(not-a-part):disabled,
- p {
+ #grouped {
font-family: monospace;
}
</style>
@@ -24,7 +28,7 @@
<script src="/resources/testharnessreport.js"></script>
<script>
const RED = "rgb(255, 0, 0)";
- const BLUE = "rgb(0, 0, 255)";
+ const GREEN = "rgb(0, 255, 0)";
customElements.define(
"my-element",
class MyElement extends HTMLElement {
@@ -48,12 +52,12 @@
}, "Styles applied to ::part(...)");
test(() => {
- assert_equals(getComputedStyle(subject.inner).backgroundColor, RED);
+ assert_equals(getComputedStyle(subject.inner).backgroundColor, GREEN);
}, "Styles applied to ::part(...):disabled");
test(() => {
- assert_equals(getComputedStyle(subject.inner).color, BLUE);
- assert_equals(getComputedStyle(grouped).color, BLUE);
+ assert_equals(getComputedStyle(subject.inner).color, GREEN);
+ assert_equals(getComputedStyle(grouped).color, GREEN);
}, "Styles applied via grouped selector including matched ::part(...):disabled");
test(() => {
diff --git a/tests/wpt/tests/css/css-shapes/shape-outside/shape-image/shape-image-029.html b/tests/wpt/tests/css/css-shapes/shape-outside/shape-image/shape-image-029.html
new file mode 100644
index 00000000000..3c8d58607cb
--- /dev/null
+++ b/tests/wpt/tests/css/css-shapes/shape-outside/shape-image/shape-image-029.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-shapes-2/#shapes-from-image"/>
+<link rel="help" href="https://drafts.csswg.org/css-shapes-2/#shape-outside-property"/>
+<meta name="flags" content="ahem"/>
+<meta name="assert"
+ content="WebKit and Blink had a bug that a negative margin was applied
+ incorrectly if float's writing-mode was different from the
+ container's writing-mode. This test verifies a browser has no
+ such bug."/>
+<link rel="match" href="reference/shape-image-000-ref.html"/>
+<link rel="stylesheet" href="/fonts/ahem.css" />
+<style>
+.container {
+ width: 100px;
+ font: 10px/1 Ahem;
+ background-color: red;
+ color: rgb(0, 100, 0);
+ overflow: hidden;
+}
+#f {
+ display: inline-block;
+ width: 100px;
+ height: 100px;
+ background: url(support/left-half-rectangle.png);
+ shape-outside: url(support/left-half-rectangle.png);
+ float: left;
+ margin-left: -10px;
+ writing-mode: vertical-lr;
+}
+</style>
+<p>The test passes if you see a solid green square. There should be no red.</p>
+
+<div class="container"><span id="f"></span>
+XXXXXX
+XXXXXX
+XXXXXX
+XXXXXX
+XXXXXX
+XXXXXX
+XXXXXX
+XXXXXX
+XXXXXX
+XXXXXX
+</div>
diff --git a/tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-042.html b/tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-042.html
index 3f76d42b971..63c3b1abc9b 100644
--- a/tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-042.html
+++ b/tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-042.html
@@ -1,12 +1,13 @@
<!DOCTYPE html>
-<title>CSS aspect-ratio: The transferred maximum height beats the automatic content-based minimum height</title>
+<title>CSS aspect-ratio: The transferred maximum height does not clamp the automatic content-based minimum height</title>
<link rel="author" title="Cathie Chen" href="mailto:cchen@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio-size-transfers">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/6071#issuecomment-2243986313">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
-<meta name="assert" content="The transferred maximum height beats the automatic content-based minimum height.">
+<meta name="assert" content="The transferred maximum height does not clamp the automatic content-based minimum height.">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
-<div style="background: green; width: 200px; aspect-ratio: 1 / 1; max-width: 100px;">
- <div style="height:200px;"></div>
+<div style="background: green; width: 200px; aspect-ratio: 2 / 1; max-width: 100px;">
+ <div style="height:100px;"></div>
</div>
diff --git a/tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-043.html b/tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-043.html
index 98fd3697dc3..da63c050320 100644
--- a/tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-043.html
+++ b/tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-043.html
@@ -1,12 +1,13 @@
<!DOCTYPE html>
-<title>CSS aspect-ratio: The transferred maximum width beats the automatic content-based minimum width</title>
+<title>CSS aspect-ratio: The transferred maximum width does not clamp the automatic content-based minimum width</title>
<link rel="author" title="Cathie Chen" href="mailto:cchen@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio-size-transfers">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/6071#issuecomment-2243986313">
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
-<meta name="assert" content="The transferred maximum width beats the automatic content-based minimum width.">
+<meta name="assert" content="The transferred maximum width does not clamp the automatic content-based minimum width.">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
-<div style="background: green; height: 200px; aspect-ratio: 1 / 1; max-height: 100px;">
- <div style="width:200px;"></div>
+<div style="background: green; height: 200px; aspect-ratio: 1 / 2; max-height: 100px;">
+ <div style="width:100px;"></div>
</div>
diff --git a/tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-056.html b/tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-056.html
new file mode 100644
index 00000000000..c12f8082a36
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-056.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="width: fit-content; background: green;">
+ <!-- The auto min-size should apply. -->
+ <div style="aspect-ratio: 1/2; height: 100px;">
+ <div style="width: 100px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-057.tentative.html b/tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-057.tentative.html
new file mode 100644
index 00000000000..e183c7ec0a3
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/aspect-ratio/block-aspect-ratio-057.tentative.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="width: fit-content; background: green;">
+ <!-- The auto min-size should apply. -->
+ <div style="aspect-ratio: 1/2; width: 100%; height: 100px;">
+ <div style="width: 100px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-045.html b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-045.html
new file mode 100644
index 00000000000..e5381df7cc1
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-045.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/6794#issuecomment-2125293490">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; width: 0px; height: 100px;">
+ <div style="background: green; aspect-ratio: 1;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-046.html b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-046.html
new file mode 100644
index 00000000000..e6ac10a32b4
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-046.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/6794#issuecomment-2125293490">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; flex-direction: column; width: 100px; height: 0px;">
+ <div style="background: green; aspect-ratio: 1;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-047.html b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-047.html
new file mode 100644
index 00000000000..06fa3ba2372
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-047.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/6794#issuecomment-2125293490">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; width: 0px; height: 100px;">
+ <div style="background: green; aspect-ratio: 1; height: 100%;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-048.html b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-048.html
new file mode 100644
index 00000000000..8d00a08f04a
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-048.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/6794#issuecomment-2125293490">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; flex-direction: column; width: 100px; height: 0px;">
+ <div style="background: green; aspect-ratio: 1; width: 100%;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-049.html b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-049.html
new file mode 100644
index 00000000000..c69950742e3
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-049.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/6794#issuecomment-2125293490">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; width: 0px; height: 100px;">
+ <div style="background: green; aspect-ratio: 1/2;">
+ <div style="width: 100px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-050.html b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-050.html
new file mode 100644
index 00000000000..c7e74e699c1
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-050.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/6794#issuecomment-2125293490">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; flex-direction: column; width: 100px; height: 0px;">
+ <div style="background: green; aspect-ratio: 2/1;">
+ <div style="height: 100px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-051.html b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-051.html
new file mode 100644
index 00000000000..0556c1c1ff3
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-051.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/6794#issuecomment-2125293490">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; width: 0px; height: 100px;">
+ <div style="background: green; aspect-ratio: 1/2; height: 100%;">
+ <div style="width: 100px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-052.html b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-052.html
new file mode 100644
index 00000000000..c046c2ed129
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-052.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/6794#issuecomment-2125293490">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; flex-direction: column; width: 100px; height: 0px;">
+ <div style="background: green; aspect-ratio: 2/1; width: 100%;">
+ <div style="height: 100px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-053.html b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-053.html
new file mode 100644
index 00000000000..05b9874798c
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-053.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/6794#issuecomment-2125293490">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; flex-direction: column; width: 100px; height: 0px;">
+ <div style="background: green; aspect-ratio: 1; width: 100px; height: 100px;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-054.html b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-054.html
new file mode 100644
index 00000000000..5e2cd7a4f76
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/aspect-ratio/flex-aspect-ratio-054.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/6794#issuecomment-2125293490">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; width: 0px; height: 100px;">
+ <div style="background: green; aspect-ratio: 1; width: 100px; height: 100px;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-1-ref.html b/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-1-ref.html
new file mode 100644
index 00000000000..8d77455c4db
--- /dev/null
+++ b/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-1-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS text decoration test: emphasis marks and punctuation</title>
+
+<style>
+span { text-emphasis: filled circle; }
+</style>
+
+<p>The punctuation should <b>not</b> have emphasis marks:</p>
+<p><span>Abc</span> (<span>def</span>) <span>gh</span>? <span>Ijk</span>.
+<span>Lm</span>, <span>n</span>-<span>op</span>!
+[<span>Qrst</span>…<span>uv</span>] <span>wx</span>/<span>yz</span>.</p>
diff --git a/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-1.html b/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-1.html
new file mode 100644
index 00000000000..f965566c0d7
--- /dev/null
+++ b/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-1.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS text decoration test: emphasis marks and punctuation</title>
+<link rel="match" href="text-emphasis-punctuation-1-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css-text-decor/#text-emphasis-style-property">
+<meta name="assert" content="emphasis marks are not drawn for punctuation (with a small set of exceptions)">
+
+<style>
+.emph { text-emphasis: filled circle; }
+</style>
+
+<p>The punctuation should <b>not</b> have emphasis marks:</p>
+<p class="emph">Abc (def) gh? Ijk. Lm, n-op! [Qrst…uv] wx/yz.</p>
diff --git a/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-2-ref.html b/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-2-ref.html
new file mode 100644
index 00000000000..503e999788c
--- /dev/null
+++ b/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-2-ref.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS text decoration test: emphasis marks and punctuation</title>
+
+<style>
+span { text-emphasis: filled circle; }
+</style>
+
+<p>The punctuation should <b>not</b> have emphasis marks:</p>
+<!-- Example text from https://www.ohchr.org/en/human-rights/universal-declaration/translations/chinese -->
+<p lang="zh"><span>1948年12月10日</span>,<span>联合国大会通过并颁布</span>《<span>世界人权宣言</span>》。<span>这一具有历史意义的</span
+>《<span>宣言</span>》<span>颁布后</span>,<span>大会要求所有会员国广为宣传</span>,<span>并且</span>“<span>不分国家或领土的政治地位</span
+>,<span>主要在各级学校和其他教育机构加以传播</span>、<span>展示</span>、<span>阅读和阐述</span>。”《<span>宣言</span>》<span>全文如下</span>:</p>
diff --git a/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-2.html b/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-2.html
new file mode 100644
index 00000000000..1a48f9d32cb
--- /dev/null
+++ b/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-2.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS text decoration test: emphasis marks and punctuation</title>
+<link rel="match" href="text-emphasis-punctuation-2-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css-text-decor/#text-emphasis-style-property">
+<meta name="assert" content="emphasis marks are not drawn for punctuation (with a small set of exceptions)">
+
+<style>
+.emph { text-emphasis: filled circle; }
+</style>
+
+<p>The punctuation should <b>not</b> have emphasis marks:</p>
+<!-- Example text from https://www.ohchr.org/en/human-rights/universal-declaration/translations/chinese -->
+<p lang="zh" class="emph">1948年12月10日,联合国大会通过并颁布《世界人权宣言》。这一具有历史意义的《宣言》颁布后,大会要求所有会员国广为宣传,并且“不分国家或领土的政治地位,主要在各级学校和其他教育机构加以传播、展示、阅读和阐述。”《宣言》全文如下:</p>
diff --git a/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-3-ref.html b/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-3-ref.html
new file mode 100644
index 00000000000..f73638a1ea6
--- /dev/null
+++ b/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-3-ref.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS text decoration test: emphasis marks and punctuation</title>
+
+<style>
+p { line-height: 2; }
+</style>
+
+<p>A few punctuation marks <b>do</b> get emphasis marks:</p>
+<p lang="ja">
+ [<ruby>a<rt>&#x2022;</rt>b<rt>&#x2022;</rt>c<rt>&#x2022;</rt></ruby>
+ <!-- list from https://drafts.csswg.org/css-text-decor/#text-emphasis-style-property -->
+ <ruby>&#x0023;<rt>&#x2022;</rt></ruby> <!-- # NUMBER SIGN -->
+ <ruby>&#x0025;<rt>&#x2022;</rt></ruby> <!-- % PERCENT SIGN -->
+ <ruby>&#x0026;<rt>&#x2022;</rt></ruby> <!-- & AMPERSAND -->
+ <ruby>&#x0040;<rt>&#x2022;</rt></ruby> <!-- @ COMMERCIAL AT -->
+ <ruby>&#x00A7;<rt>&#x2022;</rt></ruby> <!-- § SECTION SIGN -->
+ <ruby>&#x00B6;<rt>&#x2022;</rt></ruby> <!-- ¶ PILCROW SIGN -->
+ <ruby>&#x0609;<rt>&#x2022;</rt></ruby> <!-- ؉ ARABIC-INDIC PER MILLE SIGN -->
+ <ruby>&#x060A;<rt>&#x2022;</rt></ruby> <!-- ؊ ARABIC-INDIC PER TEN THOUSAND SIGN -->
+ <ruby>&#x066A;<rt>&#x2022;</rt></ruby> <!-- ٪ ARABIC PERCENT SIGN -->
+ <ruby>&#x2030;<rt>&#x2022;</rt></ruby> <!-- ‰ PER MILLE SIGN -->
+ <ruby>&#x2031;<rt>&#x2022;</rt></ruby> <!-- ‱ PER TEN THOUSAND SIGN -->
+ <ruby>&#x204A;<rt>&#x2022;</rt></ruby> <!-- ⁊ TIRONIAN SIGN ET -->
+ <ruby>&#x204B;<rt>&#x2022;</rt></ruby> <!-- ⁋ REVERSED PILCROW SIGN -->
+ <ruby>&#x2053;<rt>&#x2022;</rt></ruby> <!-- ⁓ SWUNG DASH -->
+ <ruby>&#x303D;<rt>&#x2022;</rt></ruby> <!-- 〽️ PART ALTERNATION MARK -->
+ <br>
+ <!-- characters with NFKD equivalence to the above, from UnicodeData.txt -->
+ <ruby>&#xFE5F;<rt>&#x2022;</rt></ruby> <!-- SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;; -->
+ <ruby>&#xFE60;<rt>&#x2022;</rt></ruby> <!-- SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;; -->
+ <ruby>&#xFE6A;<rt>&#x2022;</rt></ruby> <!-- SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;; -->
+ <ruby>&#xFE6B;<rt>&#x2022;</rt></ruby> <!-- SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;; -->
+ <ruby>&#xFF03;<rt>&#x2022;</rt></ruby> <!-- FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;; -->
+ <ruby>&#xFF05;<rt>&#x2022;</rt></ruby> <!-- FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;; -->
+ <ruby>&#xFF06;<rt>&#x2022;</rt></ruby> <!-- FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;; -->
+ <ruby>&#xFF20;<rt>&#x2022;</rt></ruby> <!-- FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;; -->
+ <ruby>x<rt>&#x2022;</rt>y<rt>&#x2022;</rt>z<rt>&#x2022;</rt></ruby>]
+</p>
diff --git a/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-3.html b/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-3.html
new file mode 100644
index 00000000000..4c0d81cb5f6
--- /dev/null
+++ b/tests/wpt/tests/css/css-text-decor/text-emphasis-punctuation-3.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS text decoration test: emphasis marks and punctuation</title>
+<link rel="match" href="text-emphasis-punctuation-3-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css-text-decor/#text-emphasis-style-property">
+<meta name="assert" content="emphasis marks are not drawn for punctuation (with a small set of exceptions)">
+
+<style>
+p { line-height: 2; }
+.emph { text-emphasis: filled dot; }
+</style>
+
+<p>A few punctuation marks <b>do</b> get emphasis marks:</p>
+<p lang="ja" class="emph">
+ [abc
+ <!-- list from https://drafts.csswg.org/css-text-decor/#text-emphasis-style-property -->
+ &#x0023; <!-- # NUMBER SIGN -->
+ &#x0025; <!-- % PERCENT SIGN -->
+ &#x0026; <!-- & AMPERSAND -->
+ &#x0040; <!-- @ COMMERCIAL AT -->
+ &#x00A7; <!-- § SECTION SIGN -->
+ &#x00B6; <!-- ¶ PILCROW SIGN -->
+ &#x0609; <!-- ؉ ARABIC-INDIC PER MILLE SIGN -->
+ &#x060A; <!-- ؊ ARABIC-INDIC PER TEN THOUSAND SIGN -->
+ &#x066A; <!-- ٪ ARABIC PERCENT SIGN -->
+ &#x2030; <!-- ‰ PER MILLE SIGN -->
+ &#x2031; <!-- ‱ PER TEN THOUSAND SIGN -->
+ &#x204A; <!-- ⁊ TIRONIAN SIGN ET -->
+ &#x204B; <!-- ⁋ REVERSED PILCROW SIGN -->
+ &#x2053; <!-- ⁓ SWUNG DASH -->
+ &#x303D; <!-- 〽️ PART ALTERNATION MARK -->
+ <br>
+ <!-- characters with NFKD equivalence to the above, from UnicodeData.txt -->
+ &#xFE5F; <!-- SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;; -->
+ &#xFE60; <!-- SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;; -->
+ &#xFE6A; <!-- SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;; -->
+ &#xFE6B; <!-- SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;; -->
+ &#xFF03; <!-- FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;; -->
+ &#xFF05; <!-- FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;; -->
+ &#xFF06; <!-- FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;; -->
+ &#xFF20; <!-- FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;; -->
+ xyz]
+</p>
diff --git a/tests/wpt/tests/css/css-values/attr-all-types.html b/tests/wpt/tests/css/css-values/attr-all-types.html
index 4e9dd9a6bd9..9418ed0865d 100644
--- a/tests/wpt/tests/css/css-values/attr-all-types.html
+++ b/tests/wpt/tests/css/css-values/attr-all-types.html
@@ -30,10 +30,10 @@
function test_valid_attr(property, attrString, attrValue, expectedValue) {
var elem = document.getElementById("attr");
elem.setAttribute("data-foo", attrValue);
- elem.style[property]= attrString;
+ elem.style.setProperty(property, attrString);
var expectedElem = document.getElementById("expected");
- expectedElem.style[property] = expectedValue;
+ expectedElem.style.setProperty(property, expectedValue);
test(() => {
assert_equals(window.getComputedStyle(elem).getPropertyValue(property),
@@ -42,8 +42,8 @@
"\' should be valid for the property \'" + property + "\'.");
});
- elem.style[property] = null;
- expectedElem.style[property] = null;
+ elem.style.setProperty(property, null);
+ expectedElem.style.setProperty(property, null);
}
function test_invalid_attr(property, attrString, attrValue) {
@@ -51,14 +51,14 @@
var expectedValue = window.getComputedStyle(elem).getPropertyValue(property);
elem.setAttribute("data-foo", attrValue);
- elem.style[property]= attrString;
+ elem.style.setProperty(property, attrString);
test(() => {
assert_equals(window.getComputedStyle(elem).getPropertyValue(property), expectedValue,
"Setting property \'" + property + "\' to the value \'" + attrString +
"\', where \'data-foo=" + attrValue + "\' should not change it's value.");
});
- elem.style[property] = null;
+ elem.style.setProperty(property, null);
}
function test_dimension_types_and_units() {
diff --git a/tests/wpt/tests/css/css-values/calc-size/animation/calc-size-height-interpolation.html b/tests/wpt/tests/css/css-values/calc-size/animation/calc-size-height-interpolation.html
index b37b57bf26d..2126bd8faed 100644
--- a/tests/wpt/tests/css/css-values/calc-size/animation/calc-size-height-interpolation.html
+++ b/tests/wpt/tests/css/css-values/calc-size/animation/calc-size-height-interpolation.html
@@ -13,6 +13,9 @@
width: 600px;
height: 300px;
}
+html.no-parent-height .parent {
+ height: auto;
+}
.target {
display: block;
}
@@ -332,4 +335,65 @@
to: 'calc-size(auto, size * 3)',
});
+ test_interpolation({
+ property: 'height',
+ from: 'calc-size(20%, size)',
+ to: 'calc-size(60%, size)',
+ }, [
+ { at: 0, expect: '60px' },
+ { at: 0.5, expect: '120px' },
+ { at: 1, expect: '180px' },
+ ]);
+
+ document.documentElement.classList.add("no-parent-height");
+
+ // repeat the previous test, but with height:auto on the parent
+ test_interpolation({
+ property: 'height',
+ from: 'calc-size(20%, size)',
+ to: 'calc-size(60%, size)',
+ }, [
+ { at: 0, expect: '100px' },
+ { at: 0.5, expect: '100px' },
+ { at: 1, expect: '100px' },
+ ]);
+
+ test_interpolation({
+ property: 'height',
+ from: 'calc-size(50px, size)',
+ to: 'calc-size(60%, size)',
+ }, [
+ { at: 0, expect: '100px' },
+ { at: 0.5, expect: '100px' },
+ { at: 1, expect: '100px' },
+ ]);
+
+ test_interpolation({
+ property: 'height',
+ from: 'calc-size(50px, size)',
+ to: 'calc-size(200px, size)',
+ }, [
+ { at: 0, expect: '50px' },
+ { at: 0.5, expect: '125px' },
+ { at: 1, expect: '200px' },
+ ]);
+
+ document.documentElement.classList.remove("no-parent-height");
+
+ test_no_interpolation({
+ property: 'height',
+ from: 'calc-size(50%, size)',
+ to: 'calc-size(min-content, size)',
+ });
+
+ test_interpolation({
+ property: 'height',
+ from: 'calc-size(50px, size)',
+ to: 'calc-size(min-content, size)',
+ }, [
+ { at: 0, expect: '50px' },
+ { at: 0.5, expect: '75px' },
+ { at: 1, expect: '100px' },
+ ]);
+
</script>
diff --git a/tests/wpt/tests/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html b/tests/wpt/tests/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html
index b761cb04661..354d108f1da 100644
--- a/tests/wpt/tests/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html
+++ b/tests/wpt/tests/css/css-values/calc-size/animation/calc-size-interpolation-expansion.html
@@ -95,6 +95,38 @@ var TESTS = [
0.75: "calc-size(fit-content, 5px + (80px + min(10px + 20px + size * 3, -30px + (10px + size * 3) * 2) + (10px + size * 3) * 2) * 0.75)",
},
},
+ {
+ property: "width",
+ start: "calc-size(50%, size)",
+ end: "calc-size(calc-size(45%, (size * 2)), size + 20px)",
+ expected: {
+ 0.75: "calc-size(100%, size * 0.5 * 0.25 + (20px + size * 0.45 * 2) * 0.75)",
+ },
+ },
+ {
+ property: "width",
+ start: "calc-size(40%, size)",
+ end: "calc-size(calc-size(10px, (size * 2)), size + 20px)",
+ expected: {
+ 0.75: "calc-size(100%, 30px + size * 0.4 * 0.25)",
+ },
+ },
+ {
+ property: "width",
+ start: "calc-size(80px, size)",
+ end: "calc-size(calc-size(10px, (size * 2)), size + 20px)",
+ expected: {
+ 0.75: "calc-size(any, 50px)",
+ },
+ },
+ {
+ property: "width",
+ start: "calc-size(80px, size)",
+ end: "calc-size(calc-size(any, 20px), size + 20px)",
+ expected: {
+ 0.75: "calc-size(any, 50px)",
+ },
+ },
];
let e = document.getElementById("test");
diff --git a/tests/wpt/tests/css/css-values/calc-size/calc-size-aspect-ratio-003.html b/tests/wpt/tests/css/css-values/calc-size/calc-size-aspect-ratio-003.html
new file mode 100644
index 00000000000..3a91792fbd2
--- /dev/null
+++ b/tests/wpt/tests/css/css-values/calc-size/calc-size-aspect-ratio-003.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-values-5/#calc-size">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<!-- The auto height is 50px, the auto min-size is 150px, which passing through the calc-size() yields 100px. -->
+<div style="aspect-ratio: 2/1; width: 100px; min-height: calc-size(auto, size - 50px); background: green;">
+ <div style="height: 150px;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-values/calc-size/calc-size-aspect-ratio-004.html b/tests/wpt/tests/css/css-values/calc-size/calc-size-aspect-ratio-004.html
new file mode 100644
index 00000000000..f4f0b66b1ea
--- /dev/null
+++ b/tests/wpt/tests/css/css-values/calc-size/calc-size-aspect-ratio-004.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-values-5/#calc-size">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<!-- The auto width is 50px, the auto min-size is 150px, which passing through the calc-size() yields 100px. -->
+<div style="aspect-ratio: 1/2; height: 100px; min-width: calc-size(auto, size - 50px); background: green;">
+ <div style="width: 150px;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-values/calc-size/calc-size-aspect-ratio-005.html b/tests/wpt/tests/css/css-values/calc-size/calc-size-aspect-ratio-005.html
new file mode 100644
index 00000000000..70f0ffe9a3f
--- /dev/null
+++ b/tests/wpt/tests/css/css-values/calc-size/calc-size-aspect-ratio-005.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-values-5/#calc-size">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="width: fit-content; background: green;">
+ <!-- The auto width is 50px, the auto min-size is 150px, which passing through the calc-size() yields 100px. -->
+ <div style="aspect-ratio: 1/2; height: 100px; min-width: calc-size(auto, size - 50px);">
+ <div style="width: 150px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-001.html b/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-001.html
new file mode 100644
index 00000000000..22aa9d90bb5
--- /dev/null
+++ b/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-001.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-values-5/#calc-size">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#min-size-auto">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; width: 0px; height: 100px;">
+ <!-- The auto min-size is 80px, then through the calc-size() is 100px. -->
+ <div style="min-width: calc-size(auto, size + 20px); background: green;">
+ <div style="width: 80px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-002.html b/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-002.html
new file mode 100644
index 00000000000..0b93341fc0b
--- /dev/null
+++ b/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-002.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-values-5/#calc-size">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#min-size-auto">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; width: 0px; height: 100px;">
+ <!-- The auto min-size is 60px (the specified-size suggestion), then through the calc-size() is 100px. -->
+ <div style="min-width: calc-size(auto, size + 40px); width: 60px; background: green;">
+ <div style="width: 80px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-003.html b/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-003.html
new file mode 100644
index 00000000000..22858da4735
--- /dev/null
+++ b/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-003.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-values-5/#calc-size">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#min-size-auto">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; width: 0px; height: 100px;">
+ <!-- The auto min-size is 60px (the content-size suggestion), then through the calc-size() is 100px. -->
+ <div style="min-width: calc-size(auto, size + 40px); width: 80px; background: green;">
+ <div style="width: 60px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-004.html b/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-004.html
new file mode 100644
index 00000000000..759fc326859
--- /dev/null
+++ b/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-004.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-values-5/#calc-size">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#min-size-auto">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; flex-direction: column; width: 100px; height: 0px;">
+ <!-- The auto min-size is 80px, then through the calc-size() is 100px. -->
+ <div style="min-height: calc-size(auto, size + 20px); background: green;">
+ <div style="height: 80px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-005.html b/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-005.html
new file mode 100644
index 00000000000..01f142e16e1
--- /dev/null
+++ b/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-005.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-values-5/#calc-size">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#min-size-auto">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; flex-direction: column; height: 0px; width: 100px;">
+ <!-- The auto min-size is 60px (the specified-size suggestion), then through the calc-size() is 100px. -->
+ <div style="min-height: calc-size(auto, size + 40px); height: 60px; background: green;">
+ <div style="height: 80px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-006.html b/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-006.html
new file mode 100644
index 00000000000..02e9f993bd9
--- /dev/null
+++ b/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-006.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-values-5/#calc-size">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#min-size-auto">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="display: flex; flex-direction: column; height: 0px; width: 100px;">
+ <!-- The auto min-size is 60px (the content-size suggestion), then through the calc-size() is 100px. -->
+ <div style="min-height: calc-size(auto, size + 40px); height: 80px; background: green;">
+ <div style="height: 60px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-007.html b/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-007.html
new file mode 100644
index 00000000000..987764e7213
--- /dev/null
+++ b/tests/wpt/tests/css/css-values/calc-size/calc-size-flex-007.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-values-5/#calc-size">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<p>Test passes if there is a filled green square and <strong>no red</strong>.
+<div style="display: flex; flex-wrap: wrap-reverse; width: 100px; height: 100px; position: relative;">
+ <div style="background: red; max-height: 80px; height: calc-size(auto, size / 2); flex: 1;"></div>
+ <div style="background: green; position: absolute; inset: 0;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-values/calc-size/calc-size-grid-repeat.html b/tests/wpt/tests/css/css-values/calc-size/calc-size-grid-repeat.html
new file mode 100644
index 00000000000..a6526507aab
--- /dev/null
+++ b/tests/wpt/tests/css/css-values/calc-size/calc-size-grid-repeat.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-values-5/#calc-size">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<p>Test passes if there is a filled green square.</p>
+<div style="width: fit-content; background: green; height: 100px;">
+ <!-- During the min/max content size calculation, the min-content isn't resolvable. -->
+ <div style="box-sizing: border-box; padding: 5px; display: grid; grid-template-columns: repeat(auto-fill, 90px); min-width: 60px; max-width: calc-size(min-content, size * 1000);"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-values/calc-size/calc-size-height.html b/tests/wpt/tests/css/css-values/calc-size/calc-size-height.html
index f2232943bd3..540280c872a 100644
--- a/tests/wpt/tests/css/css-values/calc-size/calc-size-height.html
+++ b/tests/wpt/tests/css/css-values/calc-size/calc-size-height.html
@@ -35,6 +35,7 @@ let basic_tests = [
{ value: "calc-size(30px, 15em)", expected: "300px" },
{ value: "calc-size(calc-size(any, 30px), 15em)", expected: "300px" },
{ value: "calc-size(calc-size(2in, 30px), 15em)", expected: "300px" },
+ { value: "calc-size(calc-size(any, 300px), size * 2)", expected: "600px" },
{ value: "calc-size(calc-size(min-content, 30px), 15em)", expected: "300px" },
{ value: "calc-size(calc-size(min-content, size), size)", expected: "10px" },
{ value: "calc-size(any, 31% + 12px)", expected_auto: "12px", expected_definite: "43px" },
diff --git a/tests/wpt/tests/css/css-values/calc-size/calc-size-parsing.html b/tests/wpt/tests/css/css-values/calc-size/calc-size-parsing.html
index 0cc34923dd3..6db2635e5ef 100644
--- a/tests/wpt/tests/css/css-values/calc-size/calc-size-parsing.html
+++ b/tests/wpt/tests/css/css-values/calc-size/calc-size-parsing.html
@@ -43,6 +43,7 @@ test_valid_value("width", "calc-size(fit-content, 50% + size / 2)");
test_valid_value("width", "calc-size(any, 25em)");
test_valid_value("width", "calc-size(any, 40%)");
test_valid_value("width", "calc-size(any, 50px + 30%)", "calc-size(any, 30% + 50px)");
+test_valid_value("width", "calc-size(calc-size(any, 30px), size)");
test_invalid_value("width", "calc-size(any, size)");
test_invalid_value("width", "calc-size(any, fit-content)");
test_invalid_value("width", "calc-size(any, max-content)");
@@ -106,4 +107,9 @@ test_invalid_value("max-height", "calc-size(content, size)");
test_invalid_value("min-width", "calc-size(content, size)");
test_invalid_value("min-height", "calc-size(content, size)");
+test_valid_value("width", "calc-size(0px, 0px)");
+test_invalid_value("width", "calc-size(0, 0px)");
+test_invalid_value("width", "calc-size(0px, 0)");
+test_invalid_value("width", "calc-size(0, 0)");
+
</script>
diff --git a/tests/wpt/tests/css/css-view-transitions/active-view-transition-on-non-root.html b/tests/wpt/tests/css/css-view-transitions/active-view-transition-on-non-root.html
new file mode 100644
index 00000000000..9870b15cca9
--- /dev/null
+++ b/tests/wpt/tests/css/css-view-transitions/active-view-transition-on-non-root.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>View transitions: active-view-transition should only apply to the root element</title>
+<link rel="help" href="https://www.w3.org/TR/css-transitions-2/">
+<link rel="author" href="mailto:vmpstr@chromium.org">
+<link rel="match" href="view-transition-types-one-green-square-ref.html">
+
+<script src="/common/reftest-wait.js"></script>
+<style>
+
+body { background: lightpink; }
+
+#target {
+ view-transition-name: target;
+ background: green;
+ width: 100px;
+ height: 100px;
+}
+
+main:active-view-transition #target {
+ background: red;
+}
+
+::view-transition-group(*) {
+ animation-play-state: paused;
+}
+</style>
+<main>
+ <div id="target"></div>
+</main>
+<script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
+function runTest() {
+ let transition = document.startViewTransition();
+ transition.ready.then(takeScreenshot);
+}
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
+</html>
diff --git a/tests/wpt/tests/css/css-view-transitions/active-view-transition-type-on-non-root.html b/tests/wpt/tests/css/css-view-transitions/active-view-transition-type-on-non-root.html
new file mode 100644
index 00000000000..f4225485b86
--- /dev/null
+++ b/tests/wpt/tests/css/css-view-transitions/active-view-transition-type-on-non-root.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>View transitions: active-view-transition-type should only apply to the root element</title>
+<link rel="help" href="https://www.w3.org/TR/css-transitions-2/">
+<link rel="author" href="mailto:vmpstr@chromium.org">
+<link rel="match" href="view-transition-types-one-green-square-ref.html">
+
+<script src="/common/reftest-wait.js"></script>
+<style>
+
+body { background: lightpink; }
+
+#target {
+ view-transition-name: target;
+ background: green;
+ width: 100px;
+ height: 100px;
+}
+
+main:active-view-transition-type(type-name) #target {
+ background: red;
+}
+
+::view-transition-group(*) {
+ animation-play-state: paused;
+}
+</style>
+<main>
+ <div id="target"></div>
+</main>
+<script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
+function runTest() {
+ let transition = document.startViewTransition({
+ types: ["type-name"]
+ });
+ transition.ready.then(takeScreenshot);
+}
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
+</html>
diff --git a/tests/wpt/tests/css/css-view-transitions/nested/contain-direct.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/contain-direct.tentative.html
index f4b5cf659cd..8cc856883df 100644
--- a/tests/wpt/tests/css/css-view-transitions/nested/contain-direct.tentative.html
+++ b/tests/wpt/tests/css/css-view-transitions/nested/contain-direct.tentative.html
@@ -10,7 +10,7 @@
<body>
<div class="green contain-ref">
<div>
- <div class="test"></article>
+ <div class="test"></div>
</div>
</div>
</body> \ No newline at end of file
diff --git a/tests/wpt/tests/css/css-view-transitions/nested/contain-nested.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/contain-nested.tentative.html
index 34d100800b0..643aad7b6db 100644
--- a/tests/wpt/tests/css/css-view-transitions/nested/contain-nested.tentative.html
+++ b/tests/wpt/tests/css/css-view-transitions/nested/contain-nested.tentative.html
@@ -10,7 +10,7 @@
<body>
<div class="green contain-ref">
<div class="red">
- <div class="test"></article>
+ <div class="test"></div>
</div>
</div>
</body> \ No newline at end of file
diff --git a/tests/wpt/tests/css/css-view-transitions/nested/contain-on-self.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/contain-on-self.tentative.html
index bc5e5b49f27..f8662850bb9 100644
--- a/tests/wpt/tests/css/css-view-transitions/nested/contain-on-self.tentative.html
+++ b/tests/wpt/tests/css/css-view-transitions/nested/contain-on-self.tentative.html
@@ -10,7 +10,7 @@
<body>
<div class="green contain-ref">
<div class="red">
- <div class="test contain-ref"></article>
+ <div class="test contain-ref"></div>
</div>
</div>
</body> \ No newline at end of file
diff --git a/tests/wpt/tests/css/css-view-transitions/nested/nearest-direct.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/nearest-direct.tentative.html
index bc49ef8d264..a42e5a847c0 100644
--- a/tests/wpt/tests/css/css-view-transitions/nested/nearest-direct.tentative.html
+++ b/tests/wpt/tests/css/css-view-transitions/nested/nearest-direct.tentative.html
@@ -10,7 +10,7 @@
<body>
<div class="green">
<div>
- <div class="test nearest-ref"></article>
+ <div class="test nearest-ref"></div>
</div>
</div>
</body> \ No newline at end of file
diff --git a/tests/wpt/tests/css/css-view-transitions/nested/nearest-ignores-nearest-name.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/nearest-ignores-nearest-name.tentative.html
index 0afa170eaec..ddae634f87a 100644
--- a/tests/wpt/tests/css/css-view-transitions/nested/nearest-ignores-nearest-name.tentative.html
+++ b/tests/wpt/tests/css/css-view-transitions/nested/nearest-ignores-nearest-name.tentative.html
@@ -11,7 +11,7 @@
<div style="view-transition-name: nearest">
<div class="green">
<div>
- <div class="test nearest-ref"></article>
+ <div class="test nearest-ref"></div>
</div>
</div>
</div>
diff --git a/tests/wpt/tests/css/css-view-transitions/nested/nearest-nested.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/nearest-nested.tentative.html
index 1c4f153427d..9ec3e8f95ff 100644
--- a/tests/wpt/tests/css/css-view-transitions/nested/nearest-nested.tentative.html
+++ b/tests/wpt/tests/css/css-view-transitions/nested/nearest-nested.tentative.html
@@ -11,7 +11,7 @@
<div class="red">
<div class="green">
<div>
- <div class="test nearest-ref"></article>
+ <div class="test nearest-ref"></div>
</div>
</div>
</div>
diff --git a/tests/wpt/tests/css/css-view-transitions/nested/nested-group-in-pseudo-basic.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/nested-group-in-pseudo-basic.tentative.html
index 2cacf7a759c..77241d06b73 100644
--- a/tests/wpt/tests/css/css-view-transitions/nested/nested-group-in-pseudo-basic.tentative.html
+++ b/tests/wpt/tests/css/css-view-transitions/nested/nested-group-in-pseudo-basic.tentative.html
@@ -29,6 +29,7 @@
::view-transition-group(main) {
background: green;
+ animation-play-state: paused;
}
::view-transition-group(section) {
background: inherit;
diff --git a/tests/wpt/tests/css/css-view-transitions/nested/resources/compute-common.css b/tests/wpt/tests/css/css-view-transitions/nested/resources/compute-common.css
index 762300d04fa..20337ccce5f 100644
--- a/tests/wpt/tests/css/css-view-transitions/nested/resources/compute-common.css
+++ b/tests/wpt/tests/css/css-view-transitions/nested/resources/compute-common.css
@@ -51,6 +51,9 @@ html.no-match::view-transition {
view-transition-group: contain;
}
+::view-transition-group(*) {
+ animation-play-state: paused;
+}
::view-transition-group(green) {
background: green;
}
diff --git a/tests/wpt/tests/css/css-view-transitions/shadow-part-with-class-inside-shadow-important.html b/tests/wpt/tests/css/css-view-transitions/shadow-part-with-class-inside-shadow-important.html
new file mode 100644
index 00000000000..34d98be1fa4
--- /dev/null
+++ b/tests/wpt/tests/css/css-view-transitions/shadow-part-with-class-inside-shadow-important.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<title>View transitions: shadow parts </title>
+<link rel="help" href="https://drafts.csswg.org/css-view-transitions-1/">
+<link rel="match" href="names-are-tree-scoped-ref.html">
+<script src="/common/reftest-wait.js"></script>
+<style>
+div {
+ width: 100px;
+ height: 100px;
+ background: red;
+}
+
+::part(party) {
+ view-transition-name: party;
+ view-transition-class: red;
+}
+
+:root { view-transition-name: none; }
+html::view-transition-group(*) { animation-play-state: paused; }
+html::view-transition-old(*) { animation: unset; opacity: 0 }
+html::view-transition-new(*) { animation: unset; opacity: 0 }
+html::view-transition-group(party) {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background: green;
+}
+html::view-transition-group(party.red) {
+ background: red;
+}
+</style>
+
+<custom-component>
+ <template shadowrootmode="open">
+ <style>
+ div {
+ width: 100px;
+ height: 100px;
+ }
+ </style>
+ <div part="party" style="view-transition-class: none !important"></div>
+ </template>
+</custom-component>
+
+<script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
+function runTest() {
+ document.startViewTransition().ready.then(takeScreenshot);
+}
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
+
+</body>
diff --git a/tests/wpt/tests/css/css-view-transitions/shadow-part-with-class-inside-shadow.html b/tests/wpt/tests/css/css-view-transitions/shadow-part-with-class-inside-shadow.html
new file mode 100644
index 00000000000..ad89ce230b5
--- /dev/null
+++ b/tests/wpt/tests/css/css-view-transitions/shadow-part-with-class-inside-shadow.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<title>View transitions: shadow parts </title>
+<link rel="help" href="https://drafts.csswg.org/css-view-transitions-1/">
+<link rel="match" href="names-are-tree-scoped-ref.html">
+<script src="/common/reftest-wait.js"></script>
+<style>
+div {
+ width: 100px;
+ height: 100px;
+ background: red;
+}
+
+::part(party) {
+ view-transition-name: party;
+}
+
+:root { view-transition-name: none; }
+html::view-transition-group(*) { animation-play-state: paused; }
+html::view-transition-old(*) { animation: unset; opacity: 0 }
+html::view-transition-new(*) { animation: unset; opacity: 0 }
+html::view-transition-group(party) {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background: green;
+}
+html::view-transition-group(party.red) {
+ background: red;
+}
+</style>
+
+<custom-component>
+ <template shadowrootmode="open">
+ <style>
+ div {
+ width: 100px;
+ height: 100px;
+ }
+ </style>
+ <div part="party" style="view-transition-class: red"></div>
+ </template>
+</custom-component>
+
+<script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
+function runTest() {
+ document.startViewTransition().ready.then(takeScreenshot);
+}
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
+
+</body>
diff --git a/tests/wpt/tests/css/css-view-transitions/shadow-part-with-class.html b/tests/wpt/tests/css/css-view-transitions/shadow-part-with-class.html
new file mode 100644
index 00000000000..090fceeb14b
--- /dev/null
+++ b/tests/wpt/tests/css/css-view-transitions/shadow-part-with-class.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<title>View transitions: shadow parts </title>
+<link rel="help" href="https://drafts.csswg.org/css-view-transitions-1/">
+<link rel="match" href="names-are-tree-scoped-ref.html">
+<script src="/common/reftest-wait.js"></script>
+<style>
+div {
+ width: 100px;
+ height: 100px;
+ background: red;
+}
+
+::part(party) {
+ view-transition-name: party;
+ view-transition-class: green;
+}
+
+:root { view-transition-name: none; }
+html::view-transition-group(*) { animation-play-state: paused; }
+html::view-transition-old(*) { animation: unset; opacity: 0 }
+html::view-transition-new(*) { animation: unset; opacity: 0 }
+html::view-transition-group(party) {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background: yellow;
+}
+html::view-transition-group(party.red) {
+ background: red;
+}
+html::view-transition-group(party.green) {
+ background: green;
+}
+</style>
+
+<custom-component>
+ <template shadowrootmode="open">
+ <style>
+ div {
+ width: 100px;
+ height: 100px;
+ }
+ </style>
+ <div part="party" style="view-transition-class: red"></div>
+ </template>
+</custom-component>
+
+<script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
+function runTest() {
+ document.startViewTransition().ready.then(takeScreenshot);
+}
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
+
+</body>
diff --git a/tests/wpt/tests/css/css-view-transitions/view-transition-types-matches-ref.html b/tests/wpt/tests/css/css-view-transitions/view-transition-types-matches-ref.html
index 80b1c6a1000..7f697364c29 100644
--- a/tests/wpt/tests/css/css-view-transitions/view-transition-types-matches-ref.html
+++ b/tests/wpt/tests/css/css-view-transitions/view-transition-types-matches-ref.html
@@ -11,7 +11,7 @@
}
#container {
display: grid;
- grid-template-columns: repeat(3, 1fr);
+ grid-template-columns: repeat(3, 100px);
grid-gap: 10px;
}
body { background: lightpink; }
diff --git a/tests/wpt/tests/css/css-view-transitions/view-transition-types-matches.html b/tests/wpt/tests/css/css-view-transitions/view-transition-types-matches.html
index ef15d97fb99..c84819e8c72 100644
--- a/tests/wpt/tests/css/css-view-transitions/view-transition-types-matches.html
+++ b/tests/wpt/tests/css/css-view-transitions/view-transition-types-matches.html
@@ -12,15 +12,14 @@ html:active-view-transition #positive1 { background: green; }
html:active-view-transition-type(foo) #positive2 { background: green; }
html:active-view-transition-type(foo, bar) #positive3 { background: green; }
html:active-view-transition-type(bar, baz, ba0) #positive4 { background: green; }
-html:has(:active-view-transition-type(bar)) #positive5 { background: green; }
-html:active-view-transition:active-view-transition-type(foo) #positive6 { background: green; }
+html:active-view-transition:active-view-transition-type(foo) #positive5 { background: green; }
/* specificity checks, both a-v-t and a-v-t-t are equal */
-html:active-view-transition-type(foo, bar) #positive7 { background: red; }
-html:active-view-transition #positive7 { background: green; }
+html:active-view-transition-type(foo, bar) #positive6 { background: red; }
+html:active-view-transition #positive6 { background: green; }
-html:active-view-transition #positive8 { background: red; }
-html:active-view-transition-type(foo, bar) #positive8 { background: green; }
+html:active-view-transition #positive7 { background: red; }
+html:active-view-transition-type(foo, bar) #positive7 { background: green; }
/* negative checks */
html:active-view-transition-type(fooo) #negative1 { background: red; }
@@ -31,6 +30,7 @@ html:active-view-transition(foo) #negative4 { background: red; }
html:active-view-transition-type(foo,) #negative5 { background: red; }
html:active-view-transition-type() #negative6 { background: red; }
html:active-view-transition-type(,) #negative7 { background: red; }
+html:has(:active-view-transition-type(bar)) #negative8 { background: red; }
.test {
width: 100px;
@@ -41,9 +41,8 @@ html:active-view-transition-type(,) #negative7 { background: red; }
#positive3 { view-transition-name: positive3; background: red }
#positive4 { view-transition-name: positive4; background: red }
#positive5 { view-transition-name: positive5; background: red }
-#positive6 { view-transition-name: positive6; background: red }
+#positive6 { view-transition-name: positive6; background: yellow }
#positive7 { view-transition-name: positive7; background: yellow }
-#positive8 { view-transition-name: positive8; background: yellow }
#negative1 { view-transition-name: negative1; background: green }
#negative2 { view-transition-name: negative2; background: green }
#negative3 { view-transition-name: negative3; background: green }
@@ -51,10 +50,11 @@ html:active-view-transition-type(,) #negative7 { background: red; }
#negative5 { view-transition-name: negative5; background: green }
#negative6 { view-transition-name: negative6; background: green }
#negative7 { view-transition-name: negative7; background: green }
+#negative8 { view-transition-name: negative8; background: green }
#container {
display: grid;
- grid-template-columns: repeat(3, 1fr);
+ grid-template-columns: repeat(3, 100px);
grid-gap: 10px;
}
@@ -89,7 +89,6 @@ html:active-view-transition::view-transition { background: lightpink }
<div class="test" id="positive5"></div>
<div class="test" id="positive6"></div>
<div class="test" id="positive7"></div>
- <div class="test" id="positive8"></div>
<div class="test" id="negative1"></div>
<div class="test" id="negative2"></div>
<div class="test" id="negative3"></div>
@@ -97,6 +96,7 @@ html:active-view-transition::view-transition { background: lightpink }
<div class="test" id="negative5"></div>
<div class="test" id="negative6"></div>
<div class="test" id="negative7"></div>
+ <div class="test" id="negative8"></div>
</div>
<script>
diff --git a/tests/wpt/tests/css/css-view-transitions/view-transition-types-reserved-mutation.html b/tests/wpt/tests/css/css-view-transitions/view-transition-types-reserved-mutation.html
index ba8b5e1e3c8..c17cff92af6 100644
--- a/tests/wpt/tests/css/css-view-transitions/view-transition-types-reserved-mutation.html
+++ b/tests/wpt/tests/css/css-view-transitions/view-transition-types-reserved-mutation.html
@@ -41,7 +41,7 @@
#container {
display: grid;
- grid-template-columns: repeat(3, 1fr);
+ grid-template-columns: repeat(3, 100px);
grid-gap: 10px;
}
diff --git a/tests/wpt/tests/css/css-view-transitions/view-transition-types-reserved-ref.html b/tests/wpt/tests/css/css-view-transitions/view-transition-types-reserved-ref.html
index 9195d081147..774500481fe 100644
--- a/tests/wpt/tests/css/css-view-transitions/view-transition-types-reserved-ref.html
+++ b/tests/wpt/tests/css/css-view-transitions/view-transition-types-reserved-ref.html
@@ -11,7 +11,7 @@
}
#container {
display: grid;
- grid-template-columns: repeat(3, 1fr);
+ grid-template-columns: repeat(3, 100px);
grid-gap: 10px;
}
body { background: lightpink; }
diff --git a/tests/wpt/tests/css/css-view-transitions/view-transition-types-reserved.html b/tests/wpt/tests/css/css-view-transitions/view-transition-types-reserved.html
index 1dca3774aa4..871b4104d75 100644
--- a/tests/wpt/tests/css/css-view-transitions/view-transition-types-reserved.html
+++ b/tests/wpt/tests/css/css-view-transitions/view-transition-types-reserved.html
@@ -22,7 +22,7 @@ html:active-view-transition-type(-ua-foo, -UA-foo) #negative2 { background: red;
#container {
display: grid;
- grid-template-columns: repeat(3, 1fr);
+ grid-template-columns: repeat(3, 100px);
grid-gap: 10px;
}
diff --git a/tests/wpt/tests/css/cssom-view/scrollWidthHeight-negative-margin-001.html b/tests/wpt/tests/css/cssom-view/scrollWidthHeight-negative-margin-001.html
new file mode 100644
index 00000000000..057854d98e7
--- /dev/null
+++ b/tests/wpt/tests/css/cssom-view/scrollWidthHeight-negative-margin-001.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>scroll{Width,Height} with visible overflow and negative margins.</title>
+<link rel="help" href="https://drafts.csswg.org/cssom-view/#extension-to-the-element-interface">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1906475">
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="author" title="Mozilla" href="https://mozilla.org">
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<style>
+body { margin: 0 }
+.wrapper {
+ width: 90px;
+ border: 10px solid #d1d1d2;
+}
+.inner {
+ margin: -10px;
+ height: 100px;
+ width: 100px;
+ background-color: blue;
+}
+</style>
+<div class="wrapper" style="overflow: visible">
+ <div class="inner"></div>
+</div>
+<div class="wrapper" style="overflow: hidden">
+ <div class="inner"></div>
+</div>
+<div class="wrapper" style="overflow: auto">
+ <div class="inner"></div>
+</div>
+<div class="wrapper" style="overflow: clip">
+ <div class="inner"></div>
+</div>
+<script>
+for (let wrapper of document.querySelectorAll(".wrapper")) {
+ test(function() {
+ assert_equals(wrapper.scrollWidth, 90, "scrollWidth");
+ assert_equals(wrapper.scrollHeight, 90, "scrollHeight");
+ }, "scrollWidth/Height with negative margins: " + wrapper.style.cssText);
+}
+</script>
diff --git a/tests/wpt/tests/css/cssom-view/scrollWidthHeight-negative-margin-002.html b/tests/wpt/tests/css/cssom-view/scrollWidthHeight-negative-margin-002.html
new file mode 100644
index 00000000000..cd5964f5c1a
--- /dev/null
+++ b/tests/wpt/tests/css/cssom-view/scrollWidthHeight-negative-margin-002.html
@@ -0,0 +1,100 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>scroll{Width,Height} with visible overflow and negative margins.</title>
+<link rel="help" href="https://drafts.csswg.org/cssom-view/#extension-to-the-element-interface">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1906475">
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="author" title="Mozilla" href="https://mozilla.org">
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<style>
+body { margin: 0 }
+.wrapper {
+ width: 80px;
+ height: 80px;
+ border: 1px solid #d1d1d2;
+ padding: 1px 4px 8px 16px;
+ border-width: 1px 2px 3px 4px;
+ border-right-width: 50px;
+ border-bottom-width: 40px;
+}
+.inner {
+ margin: -100px;
+ height: 300px;
+ width: 300px;
+ background-color: blue;
+}
+</style>
+<div class="wrapper">
+ <div class="inner"></div>
+</div>
+<script>
+const wrapper = document.querySelector(".wrapper");
+const contentBox = {
+ width: 80,
+ height: 80,
+};
+const paddingBox = {
+ width: contentBox.width + 4 + 16,
+ height: contentBox.height + 1 + 8,
+};
+for (let display of ["block", "flex", "grid"]) {
+ for (let flexDirection of ["row", "row-reverse", "column", "column-reverse"]) {
+ if (flexDirection != "row" && display != "flex") {
+ // Don't bother retesting with all flexDirection values unless we're actually a flex container
+ continue;
+ }
+ for (let flexWrap of ["", "wrap-reverse"]) {
+ if (flexWrap != "" && display != "flex") {
+ // Don't bother retesting with all flexWrap values unless we're actually a flex container
+ continue;
+ }
+ for (let direction of ["ltr", "rtl"]) {
+ for (let writingMode of ["horizontal-tb", "vertical-lr", "vertical-rl"]) {
+ for (let overflow of ["visible", "hidden", "auto", "clip", "scroll"]) {
+ wrapper.style.display = display;
+ wrapper.style.overflow = overflow;
+ wrapper.style.direction = direction;
+ wrapper.style.writingMode = writingMode;
+ wrapper.style.flexDirection = flexDirection;
+ wrapper.style.flexWrap = flexWrap;
+ // Suppress scrollbars because they get added to the padding are
+ // and would need to account for them in flexbox.
+ wrapper.style.scrollbarWidth = display == "flex" ? "none" : "";
+ let vertical = writingMode.startsWith("vertical");
+ let scrollToTop = vertical && direction == "rtl";
+ let scrollToLeft = (!vertical && direction == "rtl") || writingMode == "vertical-rl";
+ let flexMainAxisIsVertical = flexDirection.startsWith("row") == vertical;
+ if (display == "flex") {
+ if (flexDirection.endsWith("-reverse")) {
+ if (flexMainAxisIsVertical) {
+ scrollToTop = !scrollToTop;
+ } else {
+ scrollToLeft = !scrollToLeft;
+ }
+ }
+ if (flexWrap == "wrap-reverse") {
+ if (flexMainAxisIsVertical) {
+ scrollToLeft = !scrollToLeft;
+ } else {
+ scrollToTop = !scrollToTop;
+ }
+ }
+ }
+ test(function() {
+ assert_greater_than_equal(wrapper.scrollWidth, paddingBox.width, "scrollWidth should be at least padding box width");
+ let padding = display == "flex" && !flexMainAxisIsVertical ? paddingBox.width - contentBox.width : 0;
+ assert_equals(wrapper.scrollWidth, (scrollToLeft ? 204 : 216) - padding, "scrollWidth");
+ }, "scrollWidth with negative margins: " + wrapper.style.cssText);
+ test(function() {
+ assert_greater_than_equal(wrapper.scrollHeight, paddingBox.height, "scrollHeight should be at least padding box height");
+ let padding = display == "flex" && flexMainAxisIsVertical ? paddingBox.width - contentBox.width : 0;
+ assert_equals(wrapper.scrollHeight, (scrollToTop ? 208 : 201) - padding, "scrollHeight");
+ }, "scrollHeight with negative margins: " + wrapper.style.cssText);
+ }
+ }
+ }
+ }
+ }
+}
+</script>
diff --git a/tests/wpt/tests/css/selectors/user-invalid-form-submission-invalidation-ref.html b/tests/wpt/tests/css/selectors/user-invalid-form-submission-invalidation-ref.html
new file mode 100644
index 00000000000..1d1933b827a
--- /dev/null
+++ b/tests/wpt/tests/css/selectors/user-invalid-form-submission-invalidation-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<style>
+.red {
+ border: 3px solid red;
+}
+.green {
+ border: 3px solid green;
+}
+</style>
+
+<form>
+ <input class=red required>
+ <input class=red required>
+ <input class=green>
+ <button>submit</button>
+</form>
+
+<script>
+document.querySelector('button').click();
+</script>
diff --git a/tests/wpt/tests/css/selectors/user-invalid-form-submission-invalidation.html b/tests/wpt/tests/css/selectors/user-invalid-form-submission-invalidation.html
new file mode 100644
index 00000000000..578ea8d4c50
--- /dev/null
+++ b/tests/wpt/tests/css/selectors/user-invalid-form-submission-invalidation.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<link rel=author href="mailto:jarhar@chromium.org">
+<link rel=help href="https://issues.chromium.org/issues/357889498">
+<link rel=match href="user-invalid-form-submission-invalidation-ref.html">
+
+<style>
+input:user-invalid {
+ border: 3px solid red;
+}
+input:user-valid {
+ border: 3px solid green;
+}
+</style>
+
+<form>
+ <input required>
+ <input required>
+ <input>
+ <button>submit</button>
+</form>
+
+<script>
+requestAnimationFrame(() => {
+ document.querySelector('button').click();
+ document.documentElement.classList.remove('reftest-wait');
+});
+</script>
diff --git a/tests/wpt/tests/custom-elements/upgrading/upgrade-custom-element-error-event.html b/tests/wpt/tests/custom-elements/upgrading/upgrade-custom-element-error-event.html
new file mode 100644
index 00000000000..4803443644e
--- /dev/null
+++ b/tests/wpt/tests/custom-elements/upgrading/upgrade-custom-element-error-event.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<link rel="help" href="https://dom.spec.whatwg.org/#concept-create-element">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../resources/custom-elements-helpers.js"></script>
+<body>
+<script>
+// Returns a promise which will resolve with the next error event fired at any
+// of `windows`, after the invocation of this function. Once one does, this
+// function removes its listeners and produces that error event so that it can
+// be examined (most notably for which global proxy it was targeted at).
+async function nextErrorEvent(windows) {
+ let listener;
+ let p = new Promise((resolve, reject) => {
+ listener = (event) => { resolve(event); event.preventDefault(); };
+ });
+ for (let w of windows) {
+ w.addEventListener('error', listener);
+ }
+ try {
+ return await p;
+ } finally {
+ for (let w of windows) {
+ w.removeEventListener('error', listener);
+ }
+ }
+}
+const supportsCustomizedBuiltinElements = (function() {
+ let supported = false;
+ customElements.define('feature-detect', class extends HTMLDivElement {}, { get extends() { supported = true; return "div"; } });
+ return supported;
+})();
+
+promise_test(async t => {
+ let w = await create_window_in_test(t, `<script>self.MyElement = class extends HTMLElement { constructor() { throw new Error(); } };</`+`script>`);
+ let w2 = await create_window_in_test(t);
+ w2.customElements.define('my-element', w.MyElement);
+ let nextErrorPromise = nextErrorEvent([self, w, w2]);
+ let elem = w2.document.createElement('my-element');
+ let errorEvent = await nextErrorPromise;
+ assert_true(elem instanceof w2.HTMLUnknownElement, 'element should be an HTMLUnknownElement');
+ if (errorEvent.error) {
+ assert_true(errorEvent.error instanceof w.Error, 'error should be an instance created inside the MyElement constructor (if it was not muted)');
+ }
+ assert_equals(errorEvent.target, w, `error event should target definition's global but instead targets ${event.target === w2 ? 'document\'s global' : 'test harness global'}`);
+}, 'autonomous: exception thrown in constructor is reported to definition\'s global');
+
+promise_test(async t => {
+ let w = await create_window_in_test(t, `<script>self.MyElement = class extends HTMLElement { constructor() { this.textContent = 'hello!'; } };</`+`script>`);
+ let w2 = await create_window_in_test(t);
+ w2.customElements.define('my-element', w.MyElement);
+ let nextErrorPromise = nextErrorEvent([self, w, w2]);
+ let elem = w2.document.createElement('my-element');
+ let errorEvent = await nextErrorPromise;
+ assert_true(elem instanceof w2.HTMLUnknownElement, 'element should be an HTMLUnknownElement');
+ assert_equals(errorEvent.target, w, `error event should target definition's global but instead targets ${event.currentTarget === w2 ? 'document\'s global' : 'test harness global'}`);
+}, 'autonomous: exception thrown by spec due to invalid element state is reported to definition\'s global');
+
+promise_test(async t => {
+ assert_implements(supportsCustomizedBuiltinElements, 'customized built-in elements not supported');
+ let w = await create_window_in_test(t, `<script>self.MyDivElement = class extends HTMLDivElement { constructor() { throw new Error(); } };</`+`script>`);
+ let w2 = await create_window_in_test(t);
+ w2.customElements.define('my-div', w.MyDivElement, {extends: 'div'});
+ let nextErrorPromise = nextErrorEvent([self, w, w2]);
+ let elem = w2.document.createElement('div', {is: 'my-div'});
+ let errorEvent = await nextErrorPromise;
+ assert_equals(Object.getPrototypeOf(elem), w2.HTMLDivElement.prototype, 'element should be an HTMLDivElement (and not inherited from it)');
+ assert_true(errorEvent.error instanceof w.Error, 'error should be an instance created inside the MyElement constructor');
+ assert_equals(errorEvent.target, w, `error event should target definition's global but instead targets ${event.target === w2 ? 'document\'s global' : 'test harness global'}`);
+}, 'customized built-in: exception thrown in constructor is reported to definition\'s global');
+
+promise_test(async t => {
+ assert_implements(supportsCustomizedBuiltinElements, 'customized built-in elements not supported');
+ let w = await create_window_in_test(t, `<script>self.MyDivElement = class extends HTMLDivElement { constructor() { return document.createElement('div'); } };</`+`script>`);
+ let w2 = await create_window_in_test(t);
+ w2.customElements.define('my-div', w.MyDivElement, {extends: 'div'});
+ let nextErrorPromise = nextErrorEvent([self, w, w2]);
+ let elem = w2.document.createElement('div', {is: 'my-div'});
+ let errorEvent = await nextErrorPromise;
+ assert_equals(Object.getPrototypeOf(elem), w2.HTMLDivElement.prototype, 'element should be an HTMLDivElement (and not inherited from it)');
+ assert_equals(errorEvent.target, w, `error event should target definition's global but instead targets ${event.currentTarget === w2 ? 'document\'s global' : 'test harness global'}`);
+}, 'customized built-in: exception thrown by spec due to not returning the same value is reported to definition\'s global');
+</script>
+</body> \ No newline at end of file
diff --git a/tests/wpt/tests/digital-credentials/digital-credentials-static-methods.tentative.https.html b/tests/wpt/tests/digital-credentials/digital-credentials-static-methods.tentative.https.html
new file mode 100644
index 00000000000..5e00861124f
--- /dev/null
+++ b/tests/wpt/tests/digital-credentials/digital-credentials-static-methods.tentative.https.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<title>Digital Credential static methods.</title>
+<link rel="help" href="https://wicg.github.io/digital-credentials/" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body></body>
+<script type="module">
+ /**
+ * @see https://www.w3.org/TR/credential-management/#dom-credential-isconditionalmediationavailable
+ */
+ promise_test(async (t) => {
+ const result = await DigitalCredential.isConditionalMediationAvailable();
+ assert_equals(result, false);
+ }, "check default isConditionalMediationAvailable() behavior, inherited from Credential interface.");
+
+ /**
+ * @see https://www.w3.org/TR/credential-management/#dom-credential-willrequestconditionalcreation
+ */
+ promise_test(async (t) => {
+ const result = await DigitalCredential.willRequestConditionalCreation();
+ assert_equals(result, undefined);
+ }, "check default willRequestConditionalCreation() behavior, inherited from Credential interface");
+</script>
diff --git a/tests/wpt/tests/dom/events/Event-dispatch-throwing-multiple-globals.html b/tests/wpt/tests/dom/events/Event-dispatch-throwing-multiple-globals.html
new file mode 100644
index 00000000000..a56fdf6af86
--- /dev/null
+++ b/tests/wpt/tests/dom/events/Event-dispatch-throwing-multiple-globals.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<script>
+function createIframe(t, srcdoc = '') {
+ let iframe = document.createElement('iframe');
+ iframe.srcdoc = srcdoc;
+ t.add_cleanup(() => iframe.remove());
+ return new Promise((resolve, reject) => {
+ iframe.addEventListener('load', () => resolve(iframe.contentWindow));
+ document.body.appendChild(iframe);
+ });
+}
+
+// Returns a promise which will resolve with the next error event fired at any
+// of `windows`, after the invocation of this function. Once one does, this
+// function removes its listeners and produces that error event so that it can
+// be examined (most notably for which global proxy it was targeted at).
+async function nextErrorEvent(windows) {
+ let listener;
+ let p = new Promise((resolve, reject) => {
+ listener = (event) => { resolve(event); event.preventDefault(); };
+ });
+ for (let w of windows) {
+ w.addEventListener('error', listener);
+ }
+ try {
+ return await p;
+ } finally {
+ for (let w of windows) {
+ w.removeEventListener('error', listener);
+ }
+ }
+}
+
+promise_test(async t => {
+ let w = await createIframe(t, `<script>function listener() { throw new Error(); }<`+`/script>`);
+ let w2 = await createIframe(t);
+
+ let target = new w2.EventTarget();
+ target.addEventListener('party', w.listener);
+ let nextErrorPromise = nextErrorEvent([self, w, w2]);
+ target.dispatchEvent(new Event('party'));
+ let errorEvent = await nextErrorPromise;
+ if (errorEvent.error) {
+ assert_true(errorEvent.error instanceof w.Error, 'error should be an instance created inside the listener function');
+ }
+ assert_equals(errorEvent.target, w, `error event should target listener's global but instead targets ${event.currentTarget === w2 ? 'target\'s global' : 'test harness global'}`);
+}, 'exception thrown in event listener function should result in error event on listener\'s global');
+
+promise_test(async t => {
+ let w = await createIframe(t, `<script>listener = {};<`+`/script>`);
+ let w2 = await createIframe(t, `<script>handleEvent = () => { throw new Error; };<`+`/script>`);
+ let w3 = await createIframe(t);
+ w.listener.handleEvent = w2.handleEvent;
+
+ let target = new w3.EventTarget();
+ target.addEventListener('party', w.listener);
+ let nextErrorPromise = nextErrorEvent([self, w, w2, w3]);
+ target.dispatchEvent(new Event('party'));
+ let errorEvent = await nextErrorPromise;
+ if (errorEvent.error) {
+ assert_true(errorEvent.error instanceof w2.Error, 'error should be an instance created inside the listener function');
+ }
+ assert_equals(errorEvent.target, w, `error event should target listener's global but instead targets ${event.currentTarget === w2 ? 'target\'s global' : event.currentTarget === w3 ? 'function\'s global' : 'test harness global'}`);
+}, 'exception thrown in event listener interface object should result in error event on listener\'s global');
+</script>
+</body>
diff --git a/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-basic.html b/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-basic.html
new file mode 100644
index 00000000000..1b9df69ec77
--- /dev/null
+++ b/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-basic.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
+<meta name="variant" content="?include=target-basic"/>
+<meta name="variant" content="?include=scroll-over-scrollable-child"/>
+<meta name="variant" content="?include=transaction-not-bound-to-scroll-frame"/>
+<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>
+<script src="/common/subset-tests-by-key.js"></script>
+<script src="scroll_support.js"></script>
+<style>
+body {
+ margin: 0;
+ padding: 0;
+ height: 200vh;
+}
+
+.spacer {
+ width: 100%;
+ height: 25px;
+ padding: 0;
+ margin: 0;
+}
+
+#scrollableDiv {
+ width: 100%;
+ height: 500px;
+ overflow: scroll;
+ background: yellow;
+}
+
+#innerDiv {
+ width: 100%;
+ height: 4000px;
+ background: red;
+}
+
+</style>
+<head>
+<body onload=runTest()>
+<div id="firstRootSpacer" class="spacer" style="background: cyan"></div>
+<div id="secondRootSpacer" class="spacer" style="background: magenta"></div>
+<div id="scrollableDiv">
+ <div id="innerDiv">
+ <div id="firstInnerSpacer" class="spacer" style="background: green">
+ </div>
+ <div id="secondInnerSpacer" class="spacer" style="background: blue">
+ </div>
+ </div>
+</div>
+</body>
+
+<script>
+
+let variants = [
+ // Ensure that the wheel transaction fires all wheel events to the initial
+ // target.
+ {
+ key: 'target-basic',
+ origin: "viewport",
+ scrollX: 40,
+ scrollY: 2,
+ scrollingElement: document.scrollingElement,
+ targetElement: firstRootSpacer,
+ title: 'Wheel events should be captured to one target #1',
+ },
+ // Ensure that the wheel transaction fires all wheel events to the initial
+ // target, even when another scroll frame is under the mouse cursor.
+ {
+ key: 'scroll-over-scrollable-child',
+ origin: "viewport",
+ scrollX: 40,
+ scrollY: 27,
+ scrollingElement: document.scrollingElement,
+ targetElement: secondRootSpacer,
+ title: 'Wheel events should be captured to one target #2',
+ },
+ // Ensure that the wheel transaction targets the topmost-element, which is
+ // not the scrollable element.
+ {
+ key: 'transaction-not-bound-to-scroll-frame',
+ origin: innerDiv,
+ scrollX: 40,
+ scrollY: 2,
+ scrollingElement: scrollableDiv,
+ targetElement: innerDiv,
+ title: 'The wheel event transactions target may not be a scroll frame',
+ },
+];
+
+function runTest() {
+ async function testBasic(testInfo, t) {
+ await waitForCompositorReady();
+
+ await waitForCompositorCommit();
+
+ let wheelEventTargets = [];
+ function pushTargetToWheelEventTargets(e) {
+ wheelEventTargets.push(e.target)
+ }
+
+ window.addEventListener("wheel", pushTargetToWheelEventTargets, {passive: true});
+
+ // Scroll past the boundary of the original element to ensure all events in
+ // transaction have the same target.
+ await new test_driver.Actions()
+ .addWheel("wheel1")
+ .scroll(testInfo.scrollX, testInfo.scrollY, 0, 30, {origin: testInfo.origin})
+ .pause(1)
+ .scroll(testInfo.scrollX, testInfo.scrollY, 0, 30, {origin: testInfo.origin})
+ .pause(1)
+ .scroll(testInfo.scrollX, testInfo.scrollY, 0, 30, {origin: testInfo.origin})
+ .send();
+
+ // TODO(dlrobertson): Use the scrollend event here to wait for the
+ // wheel scroll to finish instead of waitForAnimationEnd().
+ await waitForAnimationEnd(() => { return testInfo.scrollingElement.scrollTop; });
+ await waitForCompositorCommit();
+
+ // Ensure that all the captured wheel events are the expected target.
+ wheelEventTargets.forEach((wheelEventTarget, i) => {
+ assert_equals(wheelEventTarget, testInfo.targetElement,
+ "Wheel event at index `" + i + "` does not have the expected target");
+ });
+
+ assert_greater_than(testInfo.scrollingElement.scrollTop, 0,
+ "The scrolling element has scrolled");
+ }
+
+ variants.forEach((testInfo) => {
+ subsetTestByKey(testInfo.key, promise_test, t => testBasic(testInfo, t), testInfo.title);
+ });
+}
+</script>
+</html>
diff --git a/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-multiple-action-chains.html b/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-multiple-action-chains.html
new file mode 100644
index 00000000000..3b46b2f99a9
--- /dev/null
+++ b/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-multiple-action-chains.html
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
+<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>
+<script src="scroll_support.js"></script>
+<style>
+body {
+ margin: 0;
+ padding: 0;
+ height: 200vh;
+}
+
+#initial {
+ background: red;
+ width: 100%;
+ height: 25px;
+ padding: 0;
+ margin: 0;
+}
+
+#second {
+ background: green;
+ width: 100%;
+ height: 200vh;
+ padding: 0;
+ margin: 0;
+}
+
+</style>
+<head>
+<body>
+<div id="initial"></div>
+<div id="second"></div>
+</body>
+
+<script>
+
+promise_test(async (t) => {
+ await new Promise(resolve => addEventListener("load", resolve, {once: true}));
+
+ await waitForCompositorReady();
+
+ await waitForCompositorCommit();
+
+ let firstEventTargets = [];
+ let secondEventTargets = [];
+ let isFirstGroup = true;
+ window.addEventListener("wheel", (e) => {
+ if (isFirstGroup) {
+ firstEventTargets.push(e.target);
+ } else {
+ secondEventTargets.push(e.target);
+ }
+ }, {passive: true});
+
+ await waitForCompositorCommit();
+
+ // The first action chain should target the initial element
+ await new test_driver.Actions()
+ .addWheel("wheel1")
+ .scroll(40, 2, 0, 30, {origin: "viewport"})
+ .send();
+
+ // Start logging event targets in the second transaction
+ isFirstGroup = false;
+
+ // The second chain should target the second element and the prior wheel event
+ // group should have no impact on this action chain.
+ await new test_driver.Actions()
+ .addWheel("wheel1")
+ .scroll(40, 30, 0, 30, {origin: "viewport"})
+ .send();
+
+ // TODO(dlrobertson): Use the scrollend event here to wait for the
+ // wheel scroll to finish instead of waitForAnimationEnd().
+ await waitForAnimationEnd(() => { return document.scrollingElement.scrollTop; });
+ await waitForCompositorCommit();
+
+ assert_greater_than(firstEventTargets.length, 0,
+ "There should be at least one event in the first transaction");
+ assert_greater_than(secondEventTargets.length, 0,
+ "There should be at least one event in the second transaction");
+
+ firstEventTargets.forEach((wheelEventTarget, i) => {
+ assert_equals(wheelEventTarget, initial,
+ "Wheel event at index `" + i + "` did not target the initial element");
+ });
+
+ secondEventTargets.forEach((wheelEventTarget, i) => {
+ assert_equals(wheelEventTarget, second,
+ "Wheel event at index `" + i + "` did not target the second element");
+ });
+}, "Two separate webdriver action chains should have different wheel event transactions");
+</script>
+</html>
diff --git a/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-display-change.html b/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-display-change.html
new file mode 100644
index 00000000000..6ca3c78b74c
--- /dev/null
+++ b/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-display-change.html
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
+<meta name="variant" content="?include=none"/>
+<meta name="variant" content="?include=contents"/>
+<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>
+<script src="/common/subset-tests-by-key.js"></script>
+<script src="scroll_support.js"></script>
+<style>
+body {
+ margin: 0;
+ padding: 0;
+ height: 200vh;
+}
+
+.spacer {
+ width: 100%;
+ height: 25px;
+ padding: 0;
+ margin: 0;
+}
+
+</style>
+<head>
+<body onload=runTest()>
+<div id="initialTarget" class="spacer" style="background: red"></div>
+<div id="firstRootSpacer" class="spacer" style="background: green"></div>
+<div id="secondRootSpacer" class="spacer" style="background: blue"></div>
+</body>
+
+<script>
+
+let variants = [
+ "none",
+ "contents",
+]
+
+function runTest() {
+ async function testDisplayChange(display, t) {
+ await waitForCompositorReady();
+
+ await waitForCompositorCommit();
+
+ let wheelEventTargets = [];
+ let makeInitialTargetNone = false;
+
+ // Modify the initial element the wheel event is targetted at to
+ // display: <variant> once we fire the first wheel event, then log
+ // the subsequent wheel event targets.
+ function makeInitialElementNone(e) {
+ wheelEventTargets.push(e.target);
+ if (!makeInitialTargetNone) {
+ makeInitialTargetNone = true;
+ e.target.style.display = display;
+ }
+ }
+ window.addEventListener("wheel", makeInitialElementNone, {passive: true});
+
+ await waitForCompositorCommit();
+
+ await new test_driver.Actions()
+ .addWheel("wheel1")
+ .scroll(40, 2, 0, 30, {origin: "viewport"})
+ .pause(1)
+ .scroll(40, 2, 0, 30, {origin: "viewport"})
+ .send();
+
+ // TODO(dlrobertson): Use the scrollend event here to wait for the
+ // wheel scroll to finish instead of waitForAnimationEnd().
+ await waitForAnimationEnd(() => { return document.scrollingElement.scrollTop; });
+ await waitForCompositorCommit();
+
+ // The first wheel event should be targetted at the modified element.
+ assert_equals(wheelEventTargets.shift(), initialTarget,
+ "Initial wheel event is has the modified element as the target");
+
+ wheelEventTargets.forEach((wheelEventTarget, i) => {
+ // TODO(dlrobertson): This assertion is pretty weak, but browsers seem to disagree
+ // on what element the event should target. Find out what the target should be here
+ // and make this assertion more restrictive.
+ assert_not_equals(wheelEventTarget, initialTarget,
+ "Wheel event at index `" + i + "` targetted the initial element");
+ });
+
+ assert_greater_than(document.scrollingElement.scrollTop, 0, "The document has scrolled");
+ }
+
+ variants.forEach((variant) => {
+ subsetTestByKey(variant, promise_test, t => testDisplayChange(variant, t),
+ "Modify the initial wheel event target to display:" + variant);
+ });
+}
+</script>
+</html>
diff --git a/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-elements.html b/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-elements.html
new file mode 100644
index 00000000000..0109b7b6b18
--- /dev/null
+++ b/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-elements.html
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"/>
+<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>
+<script src="scroll_support.js"></script>
+<style>
+body {
+ margin: 0;
+ padding: 0;
+ height: 200vh;
+}
+
+.spacer {
+ width: 100%;
+ height: 25px;
+ padding: 0;
+ margin: 0;
+ font: 25px/1 Ahem;
+}
+
+</style>
+<head>
+<body>
+<div id="firstRootSpacer" class="spacer" style="background: green">X</div>
+<div id="secondRootSpacer" class="spacer" style="background: blue"></div>
+</body>
+
+<script>
+
+promise_test(async (t) => {
+ // Wheel event transactions target elements, not nodes. A wheel event
+ // transaction that begins over a text node should have an event target for
+ // the containing element.
+ await waitForCompositorReady();
+
+ await waitForCompositorCommit();
+
+ let wheelEventTargets = [];
+
+ window.addEventListener("wheel", (e) => {
+ wheelEventTargets.push(e.target);
+ }, {passive: true});
+
+ await waitForCompositorCommit();
+
+ await new test_driver.Actions()
+ .addWheel("wheel1")
+ .scroll(12, 12, 0, 30, {origin: "viewport"})
+ .pause(1)
+ .scroll(12, 12, 0, 30, {origin: "viewport"})
+ .send();
+
+ // TODO(dlrobertson): Use the scrollend event here to wait for the
+ // wheel scroll to finish instead of waitForAnimationEnd().
+ await waitForAnimationEnd(() => { return document.scrollingElement.scrollTop; });
+ await waitForCompositorCommit();
+
+ // All of the wheel events should have the first div as their target.
+ wheelEventTargets.forEach((wheelEventTarget, i) => {
+ assert_equals(wheelEventTarget, firstRootSpacer,
+ "Wheel event at index `" + i + "` does not have the expected target");
+ });
+
+ assert_greater_than(document.scrollingElement.scrollTop, 0, "The document has scrolled");
+}, "Wheel event transactions target elements");
+</script>
+</html>
diff --git a/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-move.html b/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-move.html
new file mode 100644
index 00000000000..a739d1cd547
--- /dev/null
+++ b/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-move.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
+<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>
+<script src="scroll_support.js"></script>
+<style>
+body {
+ margin: 0;
+ padding: 0;
+ height: 200vh;
+}
+
+.spacer {
+ width: 100%;
+ height: 25px;
+ padding: 0;
+ margin: 0;
+}
+
+</style>
+<head>
+<body>
+<div id="initialTarget" class="spacer" style="background: red"></div>
+<div id="firstRootSpacer" class="spacer" style="background: green"></div>
+<div id="secondRootSpacer" class="spacer" style="background: blue"></div>
+</body>
+
+<script>
+
+promise_test(async (t) => {
+ await new Promise(resolve => addEventListener("load", resolve, {once: true}));
+
+ await waitForCompositorReady();
+
+ await waitForCompositorCommit();
+
+ let wheelEventTargets = [];
+ let movedInitialTarget = false;
+
+ // Move the initial element the wheel event is targetted at once we fire the
+ // first wheel event, then log the subsequent wheel event targets.
+ function moveInitialElement(e) {
+ wheelEventTargets.push(e.target);
+ if (!movedInitialTarget) {
+ movedInitialTarget = true;
+ secondRootSpacer.insertAdjacentElement('afterend', e.target);
+ }
+ }
+ window.addEventListener("wheel", moveInitialElement, {passive: true});
+
+ await waitForCompositorCommit();
+
+ await new test_driver.Actions()
+ .addWheel("wheel1")
+ .scroll(40, 2, 0, 30, {origin: "viewport"})
+ .pause(1)
+ .scroll(40, 2, 0, 30, {origin: "viewport"})
+ .send();
+
+ // TODO(dlrobertson): Use the scrollend event here to wait for the
+ // wheel scroll to finish instead of waitForAnimationEnd().
+ await waitForAnimationEnd(() => { return document.scrollingElement.scrollTop; });
+ await waitForCompositorCommit();
+
+ // The first wheel event should be targetted at the moved element.
+ assert_equals(wheelEventTargets.shift(), initialTarget,
+ "Initial wheel event has the moved element as the target");
+
+ wheelEventTargets.forEach((wheelEventTarget, i) => {
+ // TODO(dlrobertson): This assertion is pretty weak, but browsers seem to disagree
+ // on what element the event should target. Find out what the target should be here
+ // and make this assertion more restrictive.
+ assert_not_equals(wheelEventTarget, initialTarget,
+ "Wheel event at index `" + i + "` targetted the initial element");
+ });
+ assert_greater_than(document.scrollingElement.scrollTop, 0, "The document has scrolled");
+}, "Move the initial wheel event target.");
+</script>
+</html>
diff --git a/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-removal.html b/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-removal.html
new file mode 100644
index 00000000000..f81efd22e22
--- /dev/null
+++ b/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-removal.html
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
+<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>
+<script src="scroll_support.js"></script>
+<style>
+body {
+ margin: 0;
+ padding: 0;
+ height: 200vh;
+}
+
+.spacer {
+ width: 100%;
+ height: 25px;
+ padding: 0;
+ margin: 0;
+}
+
+</style>
+<head>
+<body>
+<div id="initialTarget" class="spacer" style="background: red"></div>
+<div id="firstRootSpacer" class="spacer" style="background: green"></div>
+<div id="secondRootSpacer" class="spacer" style="background: blue"></div>
+</body>
+
+<script>
+
+promise_test(async (t) => {
+ await new Promise(resolve => addEventListener("load", resolve, {once: true}));
+
+ await waitForCompositorReady();
+
+ await waitForCompositorCommit();
+
+
+ let initialTarget = null;
+ let wheelEventTargets = [];
+ let removedInitialTarget = false;
+
+ // Remove the initial element the wheel event is targetted at once we fire the
+ // first wheel event, then log the subsequent wheel event targets.
+ function removeInitialElement(e) {
+ wheelEventTargets.push(e.target);
+ if (!removedInitialTarget) {
+ initialTarget = e.target;
+ e.target.remove();
+ removedInitialTarget = true;
+ initialTarget.addEventListener("wheel", () => {
+ assert_true(false, "wheel event should never be fired after the target is removed")
+ }, {passive: true});
+ }
+ }
+ window.addEventListener("wheel", removeInitialElement, {passive: true});
+
+ await waitForCompositorCommit();
+
+ await new test_driver.Actions()
+ .addWheel("wheel1")
+ .scroll(40, 2, 0, 30, {origin: "viewport"})
+ .pause(1)
+ .scroll(40, 2, 0, 30, {origin: "viewport"})
+ .send();
+
+ // TODO(dlrobertson): Use the scrollend event here to wait for the
+ // wheel scroll to finish instead of waitForAnimationEnd().
+ await waitForAnimationEnd(() => { return document.scrollingElement.scrollTop; });
+ await waitForCompositorCommit();
+
+ assert_true(removedInitialTarget, "Removed the initial target");
+ // The first wheel event should be targetted at the removed element.
+ assert_equals(wheelEventTargets.shift(), initialTarget,
+ "Initial wheel event has the removed element as the target");
+
+ wheelEventTargets.forEach((wheelEventTarget, i) => {
+ // TODO(dlrobertson): This assertion is pretty weak, but browsers seem to disagree
+ // on what element the event should target. Find out what the target should be here
+ // and make this assertion more restrictive.
+ assert_not_equals(wheelEventTarget, initialTarget,
+ "Wheel event at index `" + i + "` targetted the initial element");
+ });
+ assert_greater_than(document.scrollingElement.scrollTop, 0, "The document has scrolled");
+}, "Remove the initial wheel event target.");
+</script>
+</html>
diff --git a/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-resize.html b/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-resize.html
new file mode 100644
index 00000000000..eb7431fca47
--- /dev/null
+++ b/tests/wpt/tests/dom/events/scrolling/wheel-event-transactions-target-resize.html
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
+<meta name="variant" content="?include=passive-false"/>
+<meta name="variant" content="?include=passive-true"/>
+<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>
+<script src="/common/subset-tests-by-key.js"></script>
+<script src="scroll_support.js"></script>
+<style>
+body {
+ margin: 0;
+ padding: 0;
+ height: 200vh;
+}
+
+.spacer {
+ width: 100%;
+ height: 25px;
+ padding: 0;
+ margin: 0;
+}
+
+</style>
+<head>
+<body onload=runTest()>
+<div id="initialTarget" class="spacer" style="background: red"></div>
+<div id="firstRootSpacer" class="spacer" style="background: green"></div>
+<div id="secondRootSpacer" class="spacer" style="background: blue"></div>
+</body>
+
+<script>
+
+let variants = [
+ {
+ key: "passive-false",
+ passive: false,
+ },
+ {
+ key: "passive-true",
+ passive: true,
+ },
+];
+
+function runTest() {
+ async function testResizeTarget(passive, t) {
+ await waitForCompositorReady();
+
+ await waitForCompositorCommit();
+
+ let wheelEventTargets = [];
+ let resizedInitialTarget = false;
+
+ // Resize the initial element the wheel event is targetted at once we fire the
+ // first wheel event, then log the subsequent wheel event targets.
+ function resizeInitialElement(e) {
+ wheelEventTargets.push(e.target);
+ if (!resizedInitialTarget) {
+ resizedInitialTarget = true;
+ e.target.style.height = '10px';
+ }
+ }
+ window.addEventListener("wheel", resizeInitialElement, {passive: passive});
+
+ await waitForCompositorCommit();
+
+ await new test_driver.Actions()
+ .addWheel("wheel1")
+ .scroll(2, 2, 0, 30, {origin: "viewport"})
+ .pause(1)
+ .scroll(2, 2, 0, 30, {origin: "viewport"})
+ .send();
+
+ // TODO(dlrobertson): Use the scrollend event here to wait for the
+ // wheel scroll to finish instead of waitForAnimationEnd().
+ await waitForAnimationEnd(() => { return document.scrollingElement.scrollTop; });
+ await waitForCompositorCommit();
+
+ wheelEventTargets.forEach((wheelEventTarget, i) => {
+ assert_equals(wheelEventTarget, initialTarget,
+ "Wheel event at `" + i + "` does not match the expected target")
+ });
+ assert_greater_than(document.scrollingElement.scrollTop, 0, "The document has scrolled");
+ }
+
+ variants.forEach((variant) => {
+ subsetTestByKey(variant.key, promise_test, t => testResizeTarget(variant.passive, t),
+ "Resize the initial target and use a passive:" + variant.passive + " listener");
+ });
+}
+</script>
+</html>
diff --git a/tests/wpt/tests/dom/nodes/moveBefore/tentative/pointer-events.html b/tests/wpt/tests/dom/nodes/moveBefore/tentative/pointer-events.html
new file mode 100644
index 00000000000..a5d34fe4005
--- /dev/null
+++ b/tests/wpt/tests/dom/nodes/moveBefore/tentative/pointer-events.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<title>Pointer capture should not be released when moving</title>
+<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>
+<section id="old_parent">
+ <div id="item"></div>
+</section>
+<section id="new_parent">
+</section>
+<style>
+ #item {
+ width: 100px;
+ height: 100px;
+ background: green;
+ }
+</style>
+<script>
+ promise_test(async function (t) {
+ const item = document.querySelector("#item");
+ let pointerId = 0;
+ item.addEventListener("pointerdown", e => {
+ pointerId = e.pointerId;
+ });
+ await new test_driver.Actions()
+ .pointerMove(1, 1, {origin: item})
+ .pointerDown()
+ .pointerMove(10, 10, {origin: item})
+ .send();
+
+ item.setPointerCapture(pointerId);
+
+ assert_true(item.hasPointerCapture(pointerId), "Item has pointer capture before move");
+ document.querySelector("#new_parent").moveBefore(item, null);
+ assert_true(item.hasPointerCapture(pointerId), "Item has pointer capture after move");
+ document.querySelector("#old_parent").insertBefore(item, null);
+ assert_false(item.hasPointerCapture(pointerId), "Item lost pointer capture after insert");
+ });
+</script>
diff --git a/tests/wpt/tests/dom/nodes/moveBefore/tentative/selection-preserve.html b/tests/wpt/tests/dom/nodes/moveBefore/tentative/selection-preserve.html
new file mode 100644
index 00000000000..04b81c9a056
--- /dev/null
+++ b/tests/wpt/tests/dom/nodes/moveBefore/tentative/selection-preserve.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+<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>
+</head>
+<body>
+<div id=old_parent><span id=text>Text</span></div>
+<div id="new_parent"></div>
+</body>
+<script>
+ 'use strict';
+
+ promise_test(async t => {
+ const text = document.querySelector("#text");
+ const old_parent = document.querySelector("#old_parent");
+ const new_parent = document.querySelector("#new_parent");
+ const event_watcher = new EventWatcher(t, text, ["mouseup"]);
+ const actions_promise = new test_driver.Actions()
+ .pointerMove(0, 0, {origin: text})
+ .pointerDown()
+ .pointerMove(text.clientWidth, text.clientHeight, {origin: text})
+ .pointerUp()
+ .send();
+ await event_watcher.wait_for(["mouseup"]);
+ assert_equals(getSelection().anchorNode.textContent, "Text");
+ new_parent.moveBefore(text, null);
+ assert_equals(getSelection().anchorNode.textContent, "Text");
+ }, "moveBefore should not reset text selection");
+</script>
+</html> \ No newline at end of file
diff --git a/tests/wpt/tests/dom/observable/tentative/observable-constructor.window.js b/tests/wpt/tests/dom/observable/tentative/observable-constructor.window.js
index d2b597c8190..878fc456c10 100644
--- a/tests/wpt/tests/dom/observable/tentative/observable-constructor.window.js
+++ b/tests/wpt/tests/dom/observable/tentative/observable-constructor.window.js
@@ -111,7 +111,7 @@ promise_test(async t => {
// 1. A traditional event listener
// 2. An observable
event_target.addEventListener('customevent', e => parentResults.push(e));
- const source = event_target.on('customevent');
+ const source = event_target.when('customevent');
source.subscribe(e => parentResults.push(e));
// Detach the iframe and fire an event at the event target. The parent will
diff --git a/tests/wpt/tests/dom/observable/tentative/observable-event-target.any.js b/tests/wpt/tests/dom/observable/tentative/observable-event-target.any.js
index 0f7ace2acc0..9f5d5541a03 100644
--- a/tests/wpt/tests/dom/observable/tentative/observable-event-target.any.js
+++ b/tests/wpt/tests/dom/observable/tentative/observable-event-target.any.js
@@ -1,12 +1,12 @@
test(() => {
const target = new EventTarget();
- assert_implements(target.on, "The EventTarget interface has an `on` method");
- assert_equals(typeof target.on, "function",
- "EventTarget should have the on method");
+ assert_implements(target.when, "The EventTarget interface has an `when` method");
+ assert_equals(typeof target.when, "function",
+ "EventTarget should have the when method");
- const testEvents = target.on("test");
+ const testEvents = target.when("test");
assert_true(testEvents instanceof Observable,
- "EventTarget.on returns an Observable");
+ "EventTarget.when() returns an Observable");
const results = [];
testEvents.subscribe({
@@ -24,11 +24,11 @@ test(() => {
target.dispatchEvent(event);
assert_array_equals(results, [event, event]);
-}, "EventTarget.on() returns an Observable");
+}, "EventTarget.when() returns an Observable");
test(() => {
const target = new EventTarget();
- const testEvents = target.on("test");
+ const testEvents = target.when("test");
const ac = new AbortController();
const results = [];
testEvents.subscribe({
@@ -58,7 +58,7 @@ test(() => {
test(() => {
const target = new EventTarget();
- const testEvents = target.on("test");
+ const testEvents = target.when("test");
const results = [];
testEvents.subscribe(e => results.push(e));
testEvents.subscribe(e => results.push(e));
diff --git a/tests/wpt/tests/dom/observable/tentative/observable-event-target.window.js b/tests/wpt/tests/dom/observable/tentative/observable-event-target.window.js
index 77a137a3622..fa3ae1d3b02 100644
--- a/tests/wpt/tests/dom/observable/tentative/observable-event-target.window.js
+++ b/tests/wpt/tests/dom/observable/tentative/observable-event-target.window.js
@@ -9,8 +9,8 @@ test(() => {
document.querySelector('body').appendChild(document.createElement('div'));
const body = document.querySelector('body');
- const captureObservable = body.on('click', {capture: true});
- const bubbleObservable = body.on('click', {capture: false});
+ const captureObservable = body.when('click', {capture: true});
+ const bubbleObservable = body.when('click', {capture: false});
const results = [];
captureObservable.subscribe(e => results.push(e.eventPhase));
@@ -24,7 +24,7 @@ test(() => {
test(() => {
const target = new EventTarget();
- const observable = target.on('event', {passive: true});
+ const observable = target.when('event', {passive: true});
observable.subscribe(event => {
assert_false(event.defaultPrevented);
// Should do nothing, since `observable` is "passive".
diff --git a/tests/wpt/tests/dom/observable/tentative/observable-from.any.js b/tests/wpt/tests/dom/observable/tentative/observable-from.any.js
index 80408ddced7..900362d8c3a 100644
--- a/tests/wpt/tests/dom/observable/tentative/observable-from.any.js
+++ b/tests/wpt/tests/dom/observable/tentative/observable-from.any.js
@@ -23,7 +23,7 @@ test(() => {
test(() => {
const target = new EventTarget();
- const observable = target.on('custom');
+ const observable = target.when('custom');
const from_observable = Observable.from(observable);
assert_equals(observable, from_observable);
}, "from(): Given an observable, it returns that exact observable");
diff --git a/tests/wpt/tests/dom/observable/tentative/observable-inspect.any.js b/tests/wpt/tests/dom/observable/tentative/observable-inspect.any.js
index 8aff741d267..2b67dd9f3d3 100644
--- a/tests/wpt/tests/dom/observable/tentative/observable-inspect.any.js
+++ b/tests/wpt/tests/dom/observable/tentative/observable-inspect.any.js
@@ -391,7 +391,7 @@ test(() => {
const controller = new AbortController();
- self.on('error').take(1).subscribe(e =>
+ self.when('error').take(1).subscribe(e =>
results.push(e.message + ', from report exception'));
result.subscribe({
diff --git a/tests/wpt/tests/editing/crashtests/replace-document-root-and-refocus-window.html b/tests/wpt/tests/editing/crashtests/replace-document-root-and-refocus-window.html
new file mode 100644
index 00000000000..b2923054684
--- /dev/null
+++ b/tests/wpt/tests/editing/crashtests/replace-document-root-and-refocus-window.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<script>
+document.addEventListener("DOMContentLoaded", () => {
+ document.designMode = "on";
+ let win;
+ try {
+ win = top.open("data:text/html,This is new window");
+ } catch (e) {
+ }
+ document.designMode = "off";
+ document.documentElement.innerHTML = document.documentElement.innerHTML;
+ win?.close();
+ focus();
+}, {once: true});
+</script>
+</head>
+<body>
+<small contenteditable></small>
+</body>
+</html>
diff --git a/tests/wpt/tests/editing/other/no-beforeinput-when-no-selection.html b/tests/wpt/tests/editing/other/no-beforeinput-when-no-selection.html
new file mode 100644
index 00000000000..098a95863a6
--- /dev/null
+++ b/tests/wpt/tests/editing/other/no-beforeinput-when-no-selection.html
@@ -0,0 +1,87 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>beforeinput should not be fired if there is no selection and builtin editor does nothing</title>
+<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 src="../include/editor-test-utils.js"></script>
+<script>
+"use strict";
+
+/**
+ * Currently, browsers do not dispatch `beforeinput` event for user operation
+ * when an editable element has focus but there is no selection ranges.
+ * This checks the result of each basic common features.
+ */
+
+addEventListener("load", () => {
+ const editingHost = document.querySelector("div[contenteditable]");
+ const utils = new EditorTestUtils(editingHost);
+
+ function promiseFocusAndRemoveAllRanges() {
+ return new Promise(resolve => {
+ document.activeElement?.blur();
+ editingHost.addEventListener("focus", () => {
+ // Chrome and Safari set selection immediately after "focus" event
+ // dispatching. Therefore, we need to wait for a tick.
+ requestAnimationFrame(() => {
+ getSelection().removeAllRanges();
+ resolve(getSelection().rangeCount);
+ });
+ }, {once: true});
+ editingHost.focus();
+ });
+ }
+
+ async function runTest(t, initialInnerHTML, func) {
+ editingHost.innerHTML = initialInnerHTML;
+ assert_equals(
+ await promiseFocusAndRemoveAllRanges(),
+ 0,
+ `${t.name}: Selection.removeAllRanges() should make its rangeCount 0`
+ );
+ let beforeInput;
+ function onBeforeInput(event) {
+ beforeInput = event;
+ }
+ addEventListener("beforeinput", onBeforeInput);
+ await func();
+ removeEventListener("beforeinput", onBeforeInput);
+ assert_equals(
+ beforeInput,
+ undefined,
+ `${t.name}: beforeinput event should not be fired (inputType="${
+ beforeInput?.inputType
+ }", data="${beforeInput?.data}")`
+ );
+ }
+
+ promise_test(async t => {
+ await runTest(t, "<br>", () => utils.sendKey("a"));
+ }, 'Typing "a"');
+
+ promise_test(async t => {
+ await runTest(t, "abc<br>", () => utils.sendBackspaceKey());
+ }, 'Typing Backspace');
+
+ promise_test(async t => {
+ await runTest(t, "abc<br>", () => utils.sendDeleteKey());
+ }, 'Typing Delete');
+
+ promise_test(async t => {
+ await runTest(t, "<br>", () => utils.sendEnterKey());
+ }, 'Typing Enter');
+
+ promise_test(async t => {
+ await runTest(t, "<br>", () => utils.sendEnterKey(utils.kShift));
+ }, 'Typing Shift + Enter');
+}, {once: true});
+</script>
+<head>
+<body>
+<div contenteditable>abc</div>
+</html>
diff --git a/tests/wpt/tests/editing/run/undo-redo.html b/tests/wpt/tests/editing/run/undo-redo.html
index 391349eeef4..0cb20754d71 100644
--- a/tests/wpt/tests/editing/run/undo-redo.html
+++ b/tests/wpt/tests/editing/run/undo-redo.html
@@ -147,6 +147,13 @@ const tests = [
doc.execCommand("forwarddelete");
}
},
+ {
+ description: "delete at start of second paragraph ending with a non editable item",
+ editorInnerHTML: "<p>A line</p><p>[]Second line with <b contenteditable='false'>non-editable item</b></p>",
+ run: (win, doc, editingHost) => {
+ doc.execCommand("delete");
+ }
+ }
];
for (const curTest of tests) {
diff --git a/tests/wpt/tests/fenced-frame/notify-event-prevent-caching.https.html b/tests/wpt/tests/fenced-frame/notify-event-prevent-caching.https.html
index ad2d0115131..a3824aa4110 100644
--- a/tests/wpt/tests/fenced-frame/notify-event-prevent-caching.https.html
+++ b/tests/wpt/tests/fenced-frame/notify-event-prevent-caching.https.html
@@ -158,5 +158,65 @@
}, 'Test that fenced frame notifyEvent() cannot reuse a cached event' +
' after dispatch finishes, even if it has never been notified before.');
+
+ promise_test(async (t) => {
+ const fencedframe = await attachFencedFrameContext(
+ {generator_api: 'fledge'});
+
+ // First, click and cache a click event.
+ await fencedframe.execute(() => {
+ window.first_click_listener = (e) => {
+ window.cached_event = e;
+ };
+ document.addEventListener('click', window.first_click_listener);
+ });
+
+ await multiClick(10, 10, fencedframe.element);
+
+ // Next, register a new click listener to catch the cached event when it's
+ // re-dispatched.
+ await fencedframe.execute(async () => {
+ document.removeEventListener('click', window.first_click_listener);
+ window.click_promise = new Promise((resolve, reject) => {
+ document.addEventListener('click', (e) => {
+ try {
+ assert_true(navigator.userActivation.isActive);
+ window.fence.notifyEvent(e);
+ reject('notifyEvent() should not fire.')
+ } catch (err) {
+ if (err.name != 'SecurityError') {
+ reject('Unexpected error: ' + err.message);
+ }
+
+ resolve('PASS');
+ }
+ });
+ });
+
+ // We need user activation when re-dispatching the event, which will
+ // ensure that the re-dispatch is the sole reason for notifyEvent()
+ // failing to fire. We'll simulate a mousedown to provide transient
+ // activation, and *then* re-dispatch the cached click event, in an
+ // attempt to scam an additional notifyEvent().
+ document.addEventListener('mousedown', (e) => {
+ document.dispatchEvent(window.cached_event);
+ });
+ });
+
+ // Send a mousedown event to the fenced frame. We can't send a full
+ // click because it will interfere with the manual event dispatch.
+ let actions = new test_driver.Actions();
+ for (let i = 0; i < 3; i++) {
+ await actions.pointerMove(10, 10, {origin: fencedframe.element})
+ .pointerDown()
+ .send();
+ }
+
+ await fencedframe.execute(async () => {
+ await window.click_promise;
+ });
+
+ }, 'Test that re-dispatching a cached click event does not allow it to be' +
+ ' used with notifyEvent()');
</script>
</body>
diff --git a/tests/wpt/tests/html/dom/render-blocking/support/utils.js b/tests/wpt/tests/html/dom/render-blocking/support/utils.js
index 8a9a537e96d..944ef86d8ff 100644
--- a/tests/wpt/tests/html/dom/render-blocking/support/utils.js
+++ b/tests/wpt/tests/html/dom/render-blocking/support/utils.js
@@ -1,4 +1,5 @@
function generateParserDelay(seconds = 1) {
+ seconds += (Math.random() / 10.0);
document.write(`
<script src="/loading/resources/dummy.js?pipe=trickle(d${seconds})"></script>
`);
diff --git a/tests/wpt/tests/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-adopt-lazy-iframe-from-script-disabled-document.html b/tests/wpt/tests/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-adopt-lazy-iframe-from-script-disabled-document.html
new file mode 100644
index 00000000000..724e8c1708d
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-adopt-lazy-iframe-from-script-disabled-document.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Test lazy loading iframe remains lazy loading originally created
+ in a script-disabled document, then got adopted to a regular document</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+<script>
+ const t = async_test("Test lazy loading iframe remains lazy loading originally created" +
+ "in a script-disabled document, then got adopted to a regular document");
+
+ const lazyIFrameInScriptDisabledDocumentOnLoad =
+ t.unreached_func("lazy loading iframe shoudn't be loaded because it's not visible");
+
+ window.addEventListener("load", t.step_func(() => {
+ const parser = new DOMParser();
+ const remoteDoc = `
+ <!DOCTYPE html>
+ <html>
+ <iframe
+ id="lazyIFrameInScriptDisabledDocument"
+ src="resources/subframe.html"
+ loading="lazy"
+ width="600"
+ height="400"
+ style="display: none"
+ >
+ Your browser does not support iframes.
+ </iframe>
+ </html>`;
+
+ const htmlDoc = parser.parseFromString(remoteDoc, "text/html");
+ var newIframe = htmlDoc.getElementById("lazyIFrameInScriptDisabledDocument");
+ newIframe.onload = lazyIFrameInScriptDisabledDocumentOnLoad;
+
+ document.body.appendChild(newIframe);
+
+ // Give some time to the "load" event to fire.
+ t.step_timeout(t.step_func_done(), 2000);
+ }));
+</script>
+</html>
diff --git a/tests/wpt/tests/html/semantics/embedded-content/the-img-element/update-the-image-data/not-broken-while-load-task-scheduled.html b/tests/wpt/tests/html/semantics/embedded-content/the-img-element/update-the-image-data/not-broken-while-load-task-scheduled.html
new file mode 100644
index 00000000000..82b860a4700
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/embedded-content/the-img-element/update-the-image-data/not-broken-while-load-task-scheduled.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<title>Image shouldn't be broken while load task is scheduled.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<script>
+async function run_test(prop) {
+ let img = new Image();
+ img.width = 50;
+ img.height = 50;
+ img.alt = "Anything non-empty";
+ img[prop] = `/images/green.png?not-broken-while-load-task-scheduled-` + Math.random();
+ let load = new Promise(r => img.addEventListener("load", r, { once: true }));
+ document.body.appendChild(img);
+
+ assert_equals(img.clientWidth, 50, "clientWidth");
+ assert_equals(img.clientHeight, 50, "clientHeight");
+ assert_equals(getComputedStyle(img).height, "50px", "Computed height");
+ assert_equals(getComputedStyle(img).width, "50px", "Computed height");
+
+ await load;
+
+ assert_equals(img.clientWidth, 50, "clientWidth");
+ assert_equals(img.clientHeight, 50, "clientHeight");
+ assert_equals(getComputedStyle(img).height, "50px", "Computed height");
+ assert_equals(getComputedStyle(img).width, "50px", "Computed height");
+}
+
+promise_test(() => run_test("src"));
+promise_test(() => run_test("srcset"));
+</script>
diff --git a/tests/wpt/tests/html/semantics/forms/the-label-element/control-active-with-multiple-clicks.html b/tests/wpt/tests/html/semantics/forms/the-label-element/control-active-with-multiple-clicks.html
index 1b5c6a3b939..a14249ee816 100644
--- a/tests/wpt/tests/html/semantics/forms/the-label-element/control-active-with-multiple-clicks.html
+++ b/tests/wpt/tests/html/semantics/forms/the-label-element/control-active-with-multiple-clicks.html
@@ -3,6 +3,7 @@
<head>
<link rel="help" href="https://html.spec.whatwg.org/multipage/semantics-other.html#being-actively-pointed-at">
<meta name="assert" content="Additionally, any element that is the labeled control of a label element that is currently matching :active, also matches :active.">
+<meta name="timeout" content="long">
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
diff --git a/tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-even-less-good-value-rendering.html b/tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-even-less-good-value-rendering.html
new file mode 100644
index 00000000000..07c0b89a067
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-even-less-good-value-rendering.html
@@ -0,0 +1,5 @@
+<!doctype html>
+<title>meter appearance none rendering</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui/#valdef-appearance-none">
+<link rel="mismatch" href="reference/meter-appearance-auto-even-less-good-value-rendering.html">
+<meter value="0.9" low="0.6" high="0.7" style="appearance: none;"></meter>
diff --git a/tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-optimum-value-rendering.html b/tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-optimum-value-rendering.html
new file mode 100644
index 00000000000..7ed863d6085
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-optimum-value-rendering.html
@@ -0,0 +1,5 @@
+<!doctype html>
+<title>meter appearance none rendering</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui/#valdef-appearance-none">
+<link rel="mismatch" href="reference/meter-appearance-auto-optimum-value-rendering.html">
+<meter value="0.5" style="appearance: none;"></meter>
diff --git a/tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-rendering.html b/tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-rendering.html
new file mode 100644
index 00000000000..2b0227892ab
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-rendering.html
@@ -0,0 +1,5 @@
+<!doctype html>
+<title>meter appearance none rendering</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui/#valdef-appearance-none">
+<link rel="mismatch" href="reference/meter-appearance-auto-rendering-ref.html">
+<meter style="appearance: none;"></meter>
diff --git a/tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-suboptimum-value-rendering.html b/tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-suboptimum-value-rendering.html
new file mode 100644
index 00000000000..80cefe10270
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/forms/the-meter-element/meter-appearance-none-suboptimum-value-rendering.html
@@ -0,0 +1,5 @@
+<!doctype html>
+<title>meter appearance none rendering</title>
+<link rel="help" href="https://drafts.csswg.org/css-ui/#valdef-appearance-none">
+<link rel="mismatch" href="reference/meter-appearance-auto-suboptimum-value-rendering-ref.html">
+<meter value="0.9" high="0.7" style="appearance: none;"></meter>
diff --git a/tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-even-less-good-value-rendering.html b/tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-even-less-good-value-rendering.html
new file mode 100644
index 00000000000..854ec5d5e75
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-even-less-good-value-rendering.html
@@ -0,0 +1,3 @@
+<!doctype html>
+<title>meter appearance auto rendering</title>
+<meter value="0.9" low="0.6" high="0.7"></meter>
diff --git a/tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-optimum-value-rendering.html b/tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-optimum-value-rendering.html
new file mode 100644
index 00000000000..4b0b819f95b
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-optimum-value-rendering.html
@@ -0,0 +1,3 @@
+<!doctype html>
+<title>meter appearance auto rendering</title>
+<meter value="0.5"></meter>
diff --git a/tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-rendering-ref.html b/tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-rendering-ref.html
new file mode 100644
index 00000000000..44e80ae8150
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-rendering-ref.html
@@ -0,0 +1,3 @@
+<!doctype html>
+<title>meter appearance auto rendering</title>
+<meter></meter>
diff --git a/tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-suboptimum-value-rendering-ref.html b/tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-suboptimum-value-rendering-ref.html
new file mode 100644
index 00000000000..bbffd4cf3ac
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/forms/the-meter-element/reference/meter-appearance-auto-suboptimum-value-rendering-ref.html
@@ -0,0 +1,3 @@
+<!doctype html>
+<title>meter appearance auto rendering</title>
+<meter value="0.9" high="0.7"></meter>
diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-disabled.tentative.html b/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-disabled.tentative.html
new file mode 100644
index 00000000000..60530b417d5
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-disabled.tentative.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<link rel=author href="mailto:jarhar@chromium.org">
+<link rel=help href="https://issues.chromium.org/issues/40265812">
+<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>
+
+<select id=defaultbutton disabled style="appearance:base-select">
+ <option>one</option>
+ <option>two</option>
+</select>
+
+<select id=custombutton disabled style="appearance:base-select">
+ <button>button</button>
+ <option>one</option>
+ <option>two</option>
+</select>
+
+<script>
+['defaultbutton', 'custombutton'].forEach(id => {
+ promise_test(async () => {
+ const select = document.getElementById(id);
+ select.focus();
+ assert_not_equals(document.activeElement, select,
+ 'select should not be focusable when disabled.');
+
+ await test_driver.click(select);
+ assert_false(select.matches(':open'),
+ 'select should not be open after clicking when disabled.');
+
+ const button = select.querySelector('button');
+ if (button) {
+ button.focus();
+ assert_not_equals(document.activeElement, button,
+ 'select button should not be focusable when select is disabled.');
+
+ await test_driver.click(button);
+ assert_false(select.matches(':open'),
+ 'select should not be open after clicking button when disabled.');
+ }
+ }, `${id}: <select disabled> should prevent focus and activation with appearance:base-select.`);
+});
+</script>
diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-fallback-datalist-animations.tentative.html b/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-fallback-datalist-animations.tentative.html
new file mode 100644
index 00000000000..2fd4f99cd18
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-fallback-datalist-animations.tentative.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<link rel=author href="mailto:jarhar@chromium.org">
+<link rel=help href="https://github.com/whatwg/html/issues/9799">
+<link rel=help href="https://issues.chromium.org/issues/359279550">
+<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>
+
+<style>
+select {
+ appearance: base-select;
+}
+
+select::select-fallback-datalist {
+ transition-behavior: allow-discrete;
+ transition-duration: 100s;
+ transition-property: display, overlay, opacity, color;
+ transition-timing-function: steps(1, jump-both);
+ opacity: 0;
+ color: black;
+}
+
+select::select-fallback-datalist:popover-open {
+ opacity: 1;
+ color: rgb(200, 0, 0);
+}
+@starting-style {
+ select::select-fallback-datalist:popover-open {
+ opacity: 0;
+ color: black;
+ }
+}
+</style>
+
+<select>
+ <option>one</option>
+ <option>two</option>
+</select>
+
+<script>
+const select = document.querySelector('select');
+const firstOption = document.querySelector('option');
+
+promise_test(async () => {
+ assert_equals(document.styleSheets[0].cssRules.length, 4,
+ 'All 4 of the CSS rules should have been parsed.');
+
+ assert_equals(getComputedStyle(firstOption).color, 'rgb(0, 0, 0)',
+ 'option color should be black before animation starts.');
+ await test_driver.bless();
+ select.showPicker();
+ await new Promise(requestAnimationFrame);
+ await new Promise(requestAnimationFrame);
+ assert_equals(getComputedStyle(firstOption).color, 'rgb(100, 0, 0)',
+ 'option color should start animating when opening the picker.');
+}, 'select::select-fallback-datalist should support author provided top layer animations.');
+</script>
diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-keyboard-behavior.tentative.html b/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-keyboard-behavior.tentative.html
index ff27aeb3a99..54dba61af4c 100644
--- a/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-keyboard-behavior.tentative.html
+++ b/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-keyboard-behavior.tentative.html
@@ -58,6 +58,8 @@ const ArrowUp = '\uE013';
const ArrowRight = '\uE014';
const ArrowDown = '\uE015';
const Space = ' ';
+const Tab = '\uE004';
+const Shift = '\uE008';
const form = document.querySelector('form');
const notform = document.getElementById('notform');
@@ -218,5 +220,49 @@ for (const id of ['defaultbutton-defaultdatalist',
assert_equals(select.value, 'one',
'The selects value should change after pressing enter on a different option.');
}, `${id}: When the listbox is open, the enter key should commit the selected option.`);
+
+ promise_test(async t => {
+ addCloseCleanup(t);
+
+ const customButton = select.querySelector('button');
+ if (customButton) {
+ customButton.focus();
+ await test_driver.send_keys(customButton, Space);
+ } else {
+ select.focus();
+ await test_driver.send_keys(select, Space);
+ }
+ assert_true(select.matches(':open'),
+ 'Space should open the listbox.');
+ assert_equals(document.activeElement, select.querySelector('.one'),
+ 'The first option should be focused when opening the listbox.');
+
+ await test_driver.send_keys(document.activeElement, Tab);
+ assert_false(select.matches(':open'),
+ 'Tab should close the listbox.');
+
+ // TODO(crbug.com/40263709): Remove this blur when focus on close is improved.
+ document.activeElement.blur();
+
+ if (customButton) {
+ customButton.focus();
+ await test_driver.send_keys(customButton, Space);
+ } else {
+ await test_driver.send_keys(select, Space);
+ }
+ assert_true(select.matches(':open'),
+ 'Second space should open the listbox.');
+ assert_equals(document.activeElement, select.querySelector('.one'),
+ 'The first option should be focused when opening the listbox.');
+
+ const actions = new test_driver.Actions()
+ .keyDown(Shift)
+ .keyDown(Tab)
+ .keyUp(Tab)
+ .keyUp(Shift);
+ await actions.send();
+ assert_false(select.matches(':open'),
+ 'Shift+tab should close the listbox.');
+ }, `${id}: When the listbox is open, the tab key should close the listbox.`);
}
</script>
diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-size-multiple-new-content-ref.html b/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-size-multiple-new-content-ref.html
new file mode 100644
index 00000000000..dccff7311d1
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-size-multiple-new-content-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+
+<select size=5>
+ <option>one</option>
+ <hr>
+ <option>two</option>
+ <optgroup label=optgroup>
+ <option>three</option>
+ </optgroup>
+</select>
+
+<select multiple size=5>
+ <option>one</option>
+ <hr>
+ <option>two</option>
+ <optgroup label=optgroup>
+ <option>three</option>
+ </optgroup>
+</select>
diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-size-multiple-new-content.tentative.html b/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-size-multiple-new-content.tentative.html
new file mode 100644
index 00000000000..169f1096255
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/forms/the-select-element/stylable-select/select-size-multiple-new-content.tentative.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<link rel=author href="mailto:jarhar@chromium.org">
+<link rel=help href="https://issues.chromium.org/issues/357047901">
+<link rel=match href="select-size-multiple-new-content-ref.html">
+
+<select size=5>
+ <datalist>
+ <option>one</option>
+ <hr>
+ <div><option>two</option></div>
+ <optgroup label=optgroup>
+ <option>three</option>
+ </optgroup>
+ </datalist>
+</select>
+
+<select multiple size=5>
+ <datalist>
+ <option>one</option>
+ <hr>
+ <div><option>two</option></div>
+ <optgroup label=optgroup>
+ <option>three</option>
+ </optgroup>
+ </datalist>
+</select>
diff --git a/tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/bidi/subscription.html.ini b/tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/bidi/subscription.html.ini
index c357f765ab9..7c3127d167a 100644
--- a/tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/bidi/subscription.html.ini
+++ b/tests/wpt/tests/infrastructure/metadata/infrastructure/webdriver/bidi/subscription.html.ini
@@ -1,2 +1 @@
-disabled:
- if product != "chrome": @True
+disabled: https://github.com/web-platform-tests/wpt/issues/47544
diff --git a/tests/wpt/tests/largest-contentful-paint/background-image-set-image.html b/tests/wpt/tests/largest-contentful-paint/background-image-set-image.html
new file mode 100644
index 00000000000..4dbb97c7f5e
--- /dev/null
+++ b/tests/wpt/tests/largest-contentful-paint/background-image-set-image.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+ <title>Background image-set images should be LCP candidates</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <style>
+ .background {
+ width: calc(100vw - 40px);
+ height: calc(100vw - 40px);
+ max-width: 100px;
+ max-height: 100px;
+ background: #eee image-set('/images/lcp-100x50.png' type('image/png')) center center no-repeat;
+ background-size: cover;
+ }
+ </style>
+</head>
+
+<body>
+ <div class="background"></div>
+ <p>fallback</p>
+
+ <script>
+ promise_test(async (t) => {
+ t.step_timeout(async () => {
+ let lcpEntryNames =
+ await new Promise(resolve => {
+ new PerformanceObserver((list) => {
+ resolve(list.getEntries().map(e => e.url));
+ }).observe({ type: "largest-contentful-paint", buffered: true });
+ });
+
+ assert_true(lcpEntryNames.find(e => e.includes('lcp-100x50')),
+ 'Background image-set image should be an LCP candidate.');
+ }, 100);
+ }, "Background image-set images should be eligible for LCP candidates");
+ </script>
+</body>
+
+</html> \ No newline at end of file
diff --git a/tests/wpt/tests/long-animation-frame/tentative/loaf-source-location-redirect.html b/tests/wpt/tests/long-animation-frame/tentative/loaf-source-location-redirect.html
index c0bb96b1ec5..6a2068523c3 100644
--- a/tests/wpt/tests/long-animation-frame/tentative/loaf-source-location-redirect.html
+++ b/tests/wpt/tests/long-animation-frame/tentative/loaf-source-location-redirect.html
@@ -62,7 +62,7 @@ function test_source_location_with_redirect({path, type, name}) {
if (cors) {
assert_not_equals(result, "empty", "CORS-ok scripts should expose sourceLocation");
} else {
- assert_not_equals(result, "post-redirect", "No-CORS classic scripts should not expose post-redirect URL");
+ assert_equals(result, "pre-redirect", "No-CORS classic scripts should expose pre-redirect URL");
assert_equals(script.sourceCharPosition, type === "script-block" ? 0 : -1, "No-CORS classic scripts should not expose character index");
}
}, `Test ${type} with ${scriptType}`);
diff --git a/tests/wpt/tests/mediacapture-extensions/GUM-backgroundBlur.https.html b/tests/wpt/tests/mediacapture-extensions/GUM-backgroundBlur.https.html
index 5383e088a62..4fba3692f6a 100644
--- a/tests/wpt/tests/mediacapture-extensions/GUM-backgroundBlur.https.html
+++ b/tests/wpt/tests/mediacapture-extensions/GUM-backgroundBlur.https.html
@@ -1,12 +1,12 @@
<!DOCTYPE html>
<html>
<head>
-<title>Test background blur support</title>
+<title>Test background blur and segmentation mask support</title>
<link rel="help" href="https://w3c.github.io/mediacapture-extensions/">
</head>
<body>
<h1 class="instructions">Description</h1>
-<p class="instructions">This test checks background blur support.</p>
+<p class="instructions">This test checks background blur and segmentation mask support.</p>
<div id='log'></div>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
@@ -14,7 +14,8 @@
"use strict";
const constraintSet = {
- backgroundBlur: true
+ backgroundBlur: true,
+ backgroundSegmentationMask: true,
};
Object.keys(constraintSet).forEach(property => {
diff --git a/tests/wpt/tests/mimesniff/META.yml b/tests/wpt/tests/mimesniff/META.yml
index fd41c87fad8..739628b8045 100644
--- a/tests/wpt/tests/mimesniff/META.yml
+++ b/tests/wpt/tests/mimesniff/META.yml
@@ -1,3 +1,4 @@
spec: https://mimesniff.spec.whatwg.org/
suggested_reviewers:
- annevk
+ - GPHemsley
diff --git a/tests/wpt/tests/partitioned-popins/META.yml b/tests/wpt/tests/partitioned-popins/META.yml
new file mode 100644
index 00000000000..b9d43340c8a
--- /dev/null
+++ b/tests/wpt/tests/partitioned-popins/META.yml
@@ -0,0 +1,3 @@
+spec: https://explainers-by-googlers.github.io/partitioned-popins/
+suggested_reviewers:
+ - arichiv
diff --git a/tests/wpt/tests/partitioned-popins/partitioned-popins.cookies.tentative.sub.https.window.js b/tests/wpt/tests/partitioned-popins/partitioned-popins.cookies.tentative.sub.https.window.js
new file mode 100644
index 00000000000..d98e08a7396
--- /dev/null
+++ b/tests/wpt/tests/partitioned-popins/partitioned-popins.cookies.tentative.sub.https.window.js
@@ -0,0 +1,43 @@
+// META: script=/resources/testdriver.js
+// META: script=/resources/testdriver-vendor.js
+
+'use strict';
+
+// Step 1 (main window) Set up listener to resolve messages as they come in.
+// Step 2 (main-window) Open window for other origin.
+// Step 3 (other-window) Write first-party cookies and report success.
+// Step 4 (main-window) Embed iframe for other origin.
+// Step 5 (main-iframe) Write third-party cookies and report success.
+// Step 6 (main-window) Open partitioned popin for other origin.
+// Step 7 (main-popin) Check for first-/third-party cookies and report success.
+// Step 8 (main-window) Cleanup.
+
+async_test(t => {
+ const id = String(Math.random());
+ // Step 1
+ window.addEventListener("message", t.step_func(e => {
+ switch (e.data.type) {
+ case 'window-set':
+ // Step 4
+ assert_equals(e.data.message, "Set first-party data");
+ const iframe = document.createElement("iframe");
+ iframe.src = "https://{{hosts[alt][]}}:{{ports[https][0]}}/partitioned-popins/resources/partitioned-popins.cookies-iframe.html?id="+id;
+ document.body.appendChild(iframe);
+ break;
+ case 'iframe-set':
+ // Step 6
+ assert_equals(e.data.message, "Set third-party data");
+ window.open("https://{{hosts[alt][]}}:{{ports[https][0]}}/partitioned-popins/resources/partitioned-popins.cookies-popin.py?id="+id, '_blank', 'popin');
+ break;
+ case 'popin-read':
+ // Step 8
+ // We want to see the same behavior a cross-site iframe would have, initially only SameSite=None, then first-party strict and lax come back for an inner fetch.
+ assert_equals(e.data.message, "ReadOnLoad:FirstPartyNone-ThirdPartyNone-,ReadOnFetch:FirstPartyStrict-FirstPartyLax-FirstPartyNone-ThirdPartyNone-");
+ t.done();
+ break;
+ }
+ }));
+
+ // Step 2
+ window.open("https://{{hosts[alt][]}}:{{ports[https][0]}}/partitioned-popins/resources/partitioned-popins.cookies-window.html?id="+id, '_blank', 'popup');
+}, "Verify Partitioned Popins only have access to third-party cookies");
diff --git a/tests/wpt/tests/partitioned-popins/partitioned-popins.localStorage.tentative.sub.https.window.js b/tests/wpt/tests/partitioned-popins/partitioned-popins.localStorage.tentative.sub.https.window.js
new file mode 100644
index 00000000000..d8444604c9e
--- /dev/null
+++ b/tests/wpt/tests/partitioned-popins/partitioned-popins.localStorage.tentative.sub.https.window.js
@@ -0,0 +1,42 @@
+// META: script=/resources/testdriver.js
+// META: script=/resources/testdriver-vendor.js
+
+'use strict';
+
+// Step 1 (main window) Set up listener to resolve messages as they come in.
+// Step 2 (main-window) Open window for other origin.
+// Step 3 (other-window) Write first-party localStorage key and report success.
+// Step 4 (main-window) Embed iframe for other origin.
+// Step 5 (main-iframe) Write third-party localStorage key and report success.
+// Step 6 (main-window) Open partitioned popin for other origin.
+// Step 7 (main-popin) Check localStorage for first-/third-party keys and report success.
+// Step 8 (main-window) Cleanup.
+
+async_test(t => {
+ const id = String(Date.now());
+ // Step 1
+ window.addEventListener("message", t.step_func(e => {
+ switch (e.data.type) {
+ case 'window-set':
+ // Step 4
+ assert_equals(e.data.message, "Set first-party data");
+ const iframe = document.createElement("iframe");
+ iframe.src = "https://{{hosts[alt][]}}:{{ports[https][0]}}/partitioned-popins/resources/partitioned-popins.localStorage-iframe.html?id="+id;
+ document.body.appendChild(iframe);
+ break;
+ case 'iframe-set':
+ // Step 6
+ assert_equals(e.data.message, "Set third-party data");
+ window.open("https://{{hosts[alt][]}}:{{ports[https][0]}}/partitioned-popins/resources/partitioned-popins.localStorage-popin.html?id="+id, '_blank', 'popin');
+ break;
+ case 'popin-read':
+ // Step 8
+ assert_equals(e.data.message, "Found:ThirdParty-");
+ t.done();
+ break;
+ }
+ }));
+
+ // Step 2
+ window.open("https://{{hosts[alt][]}}:{{ports[https][0]}}/partitioned-popins/resources/partitioned-popins.localStorage-window.html?id="+id, '_blank', 'popup');
+}, "Verify Partitioned Popins only have access to third-party localStorage");
diff --git a/tests/wpt/tests/partitioned-popins/resources/get_cookies.py b/tests/wpt/tests/partitioned-popins/resources/get_cookies.py
new file mode 100644
index 00000000000..78c3f0c2433
--- /dev/null
+++ b/tests/wpt/tests/partitioned-popins/resources/get_cookies.py
@@ -0,0 +1,10 @@
+import json
+from cookies.resources.helpers import makeCookieHeader, readCookies, setNoCacheAndCORSHeaders
+
+from wptserve.utils import isomorphic_decode
+
+def main(request, response):
+ headers = setNoCacheAndCORSHeaders(request, response)
+ cookies = readCookies(request)
+ decoded_cookies = {isomorphic_decode(key): isomorphic_decode(val) for key, val in cookies.items()}
+ return headers, json.dumps(decoded_cookies)
diff --git a/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.cookies-iframe.html b/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.cookies-iframe.html
new file mode 100644
index 00000000000..43ef731278e
--- /dev/null
+++ b/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.cookies-iframe.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<meta charset="utf-8">
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script>
+(async function() {
+ // Step 5 (partitioned-popins/partitioned-popins.cookies.tentative.sub.https.window.js)
+ const id = (new URLSearchParams(window.location.search)).get("id");
+ test_driver.set_test_context(window.top);
+ document.cookie = "third-party-strict=" + id + "; Partitioned; SameSite=Strict; Secure";
+ document.cookie = "third-party-lax=" + id + "; Partitioned; SameSite=Lax; Secure";
+ document.cookie = "third-party-none=" + id + "; Partitioned; SameSite=None; Secure";
+ window.top.postMessage({type: "iframe-set", message: "Set third-party data"}, "*");
+})();
+</script>
diff --git a/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.cookies-popin.py b/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.cookies-popin.py
new file mode 100644
index 00000000000..db48e781b94
--- /dev/null
+++ b/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.cookies-popin.py
@@ -0,0 +1,56 @@
+from cookies.resources.helpers import makeCookieHeader, readCookies, setNoCacheAndCORSHeaders
+def main(request, response):
+ id = request.GET[b'id']
+ headers = setNoCacheAndCORSHeaders(request, response)
+ headers[0] = (b"Content-Type", b"text/html")
+ cookies = readCookies(request)
+ message = b"ReadOnLoad:"
+ if cookies.get(b"first-party-strict") == id:
+ message += b"FirstPartyStrict-"
+ if cookies.get(b"first-party-lax") == id:
+ message += b"FirstPartyLax-"
+ if cookies.get(b"first-party-none") == id:
+ message += b"FirstPartyNone-"
+ if cookies.get(b"third-party-strict") == id:
+ message += b"ThirdPartyStrict-"
+ if cookies.get(b"third-party-lax") == id:
+ message += b"ThirdPartyLax-"
+ if cookies.get(b"third-party-none") == id:
+ message += b"ThirdPartyNone-"
+ document = b"""
+<!doctype html>
+<meta charset="utf-8">
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script>
+(async function() {
+ // Step 7 (partitioned-popins/partitioned-popins.cookies.tentative.sub.https.window.js)
+ const id = (new URLSearchParams(window.location.search)).get("id");
+ test_driver.set_test_context(window.top);
+ let resp = await fetch("/partitioned-popins/resources/get_cookies.py", {credentials: 'include'});
+ let resp_json = await resp.json();
+ let message = \"""" + message + b""",ReadOnFetch:";
+ if (resp_json["first-party-strict"] == id) {
+ message += "FirstPartyStrict-";
+ }
+ if (resp_json["first-party-lax"] == id) {
+ message += "FirstPartyLax-";
+ }
+ if (resp_json["first-party-none"] == id) {
+ message += "FirstPartyNone-";
+ }
+ if (resp_json["third-party-strict"] == id) {
+ message += "ThirdPartyStrict-";
+ }
+ if (resp_json["third-party-lax"] == id) {
+ message += "ThirdPartyLax-";
+ }
+ if (resp_json["third-party-none"] == id) {
+ message += "ThirdPartyNone-";
+ }
+ window.opener.postMessage({type: "popin-read", message: message}, "*");
+ window.close();
+})();
+</script>
+"""
+ return headers, document \ No newline at end of file
diff --git a/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.cookies-window.html b/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.cookies-window.html
new file mode 100644
index 00000000000..66880c3255d
--- /dev/null
+++ b/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.cookies-window.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<meta charset="utf-8">
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script>
+(async function() {
+ // Step 3 (partitioned-popins/partitioned-popins.cookies.tentative.sub.https.window.js)
+ const id = (new URLSearchParams(window.location.search)).get("id");
+ test_driver.set_test_context(window.top);
+ document.cookie = "first-party-strict=" + id + "; SameSite=Strict; Secure";
+ document.cookie = "first-party-lax=" + id + "; SameSite=Lax; Secure";
+ document.cookie = "first-party-none=" + id + "; SameSite=None; Secure";
+ window.opener.postMessage({type: "window-set", message: "Set first-party data"}, "*");
+ window.close();
+})();
+</script>
diff --git a/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.localStorage-iframe.html b/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.localStorage-iframe.html
new file mode 100644
index 00000000000..d2833c71852
--- /dev/null
+++ b/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.localStorage-iframe.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<meta charset="utf-8">
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script>
+(async function() {
+ // Step 5 (partitioned-popins/partitioned-popins.localStorage.tentative.sub.https.window.js)
+ test_driver.set_test_context(window.top);
+ window.localStorage.setItem("third-party", (new URLSearchParams(window.location.search)).get("id"));
+ window.top.postMessage({type: "iframe-set", message: "Set third-party data"}, "*");
+})();
+</script>
diff --git a/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.localStorage-popin.html b/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.localStorage-popin.html
new file mode 100644
index 00000000000..87a6ab95fa2
--- /dev/null
+++ b/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.localStorage-popin.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<meta charset="utf-8">
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script>
+(async function() {
+ // Step 7 (partitioned-popins/partitioned-popins.localStorage.tentative.sub.https.window.js)
+ const id = (new URLSearchParams(window.location.search)).get("id");
+ test_driver.set_test_context(window.top);
+ let message = "Found:";
+ if (window.localStorage.getItem("first-party") == id) {
+ message += "FirstParty-";
+ } else if (window.localStorage.getItem("third-party") == id) {
+ message += "ThirdParty-";
+ }
+ window.opener.postMessage({type: "popin-read", message: message}, "*");
+ window.close();
+})();
+</script>
diff --git a/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.localStorage-window.html b/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.localStorage-window.html
new file mode 100644
index 00000000000..1d5106e0509
--- /dev/null
+++ b/tests/wpt/tests/partitioned-popins/resources/partitioned-popins.localStorage-window.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<meta charset="utf-8">
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script>
+(async function() {
+ // Step 3 (partitioned-popins/partitioned-popins.localStorage.tentative.sub.https.window.js)
+ test_driver.set_test_context(window.top);
+ window.localStorage.setItem("first-party", (new URLSearchParams(window.location.search)).get("id"));
+ window.opener.postMessage({type: "window-set", message: "Set first-party data"}, "*");
+ window.close();
+})();
+</script>
diff --git a/tests/wpt/tests/resource-timing/internal-resources-not-counted.html b/tests/wpt/tests/resource-timing/internal-resources-not-counted.html
new file mode 100644
index 00000000000..a746e2adfa3
--- /dev/null
+++ b/tests/wpt/tests/resource-timing/internal-resources-not-counted.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Resource Timing should not include internal resources</title>
+<link rel="author" title="Google" href="http://www.google.com/" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+
+<p>This test validates that image resources which are part of an element's
+UA-defined interface are not exposed to the performance timeline. This uses an
+&lt;audio&gt; element as an example of an element with internal resources used
+for the playback controls, and verifies that resource timing entries are not
+created.
+</p>
+
+<!-- This element will render with internal resources for playback controls -->
+<audio controls></audio>
+
+<script>
+ async_test(t => {
+ const observer = new PerformanceObserver(t.step_func_done(events => {
+ events.getEntries().forEach(entry => {
+ assert_true(entry.initiatorType == "script" || entry.initiatorType == "img",
+ "Resources loaded from this test should have initiatorType 'script' or 'img', but \"" +
+ entry.name + "\" has '" + entry.initiatorType + "'.");
+ });
+ }));
+
+ // Wait for one more resource to load before attaching listener, and then get
+ // buffered entries.
+ const image = document.createElement("img");
+ image.src = "resources/blue.png";
+ image.addEventListener("load", t.step_func(ev => {
+ observer.observe({type: "resource", buffered: true});
+ }));
+ document.body.appendChild(image);
+
+ }, "Resource timing should not include internal resources.");
+</script>
diff --git a/tests/wpt/tests/dom/ranges/Range-isPointInRange-shadowdom.tentative.html b/tests/wpt/tests/selection/shadow-dom/tentative/Range-isPointInRange.html
index e6768693ff1..e6768693ff1 100644
--- a/tests/wpt/tests/dom/ranges/Range-isPointInRange-shadowdom.tentative.html
+++ b/tests/wpt/tests/selection/shadow-dom/tentative/Range-isPointInRange.html
diff --git a/tests/wpt/tests/shadow-dom/selection-collapse-and-extend.tentative.html b/tests/wpt/tests/selection/shadow-dom/tentative/Selection-collapse-and-extend.html
index 3d0bc5009d5..3d0bc5009d5 100644
--- a/tests/wpt/tests/shadow-dom/selection-collapse-and-extend.tentative.html
+++ b/tests/wpt/tests/selection/shadow-dom/tentative/Selection-collapse-and-extend.html
diff --git a/tests/wpt/tests/shadow-dom/selection-getComposedRanges-collapsed.tentative.html b/tests/wpt/tests/selection/shadow-dom/tentative/Selection-getComposedRanges-collapsed.html
index 99ab82eb39c..99ab82eb39c 100644
--- a/tests/wpt/tests/shadow-dom/selection-getComposedRanges-collapsed.tentative.html
+++ b/tests/wpt/tests/selection/shadow-dom/tentative/Selection-getComposedRanges-collapsed.html
diff --git a/tests/wpt/tests/shadow-dom/selection-getComposedRanges.tentative.html b/tests/wpt/tests/selection/shadow-dom/tentative/Selection-getComposedRanges.html
index a69188a62ee..a69188a62ee 100644
--- a/tests/wpt/tests/shadow-dom/selection-getComposedRanges.tentative.html
+++ b/tests/wpt/tests/selection/shadow-dom/tentative/Selection-getComposedRanges.html
diff --git a/tests/wpt/tests/selection/shadow-dom/select-later-become-slotted-content.tentative.html b/tests/wpt/tests/selection/shadow-dom/tentative/Selection-later-become-slotted-content.html
index d44930479d4..d44930479d4 100644
--- a/tests/wpt/tests/selection/shadow-dom/select-later-become-slotted-content.tentative.html
+++ b/tests/wpt/tests/selection/shadow-dom/tentative/Selection-later-become-slotted-content.html
diff --git a/tests/wpt/tests/shadow-dom/focus-navigation/reading-flow/tentative/grid-order-with-display-contents.html b/tests/wpt/tests/shadow-dom/focus-navigation/reading-flow/tentative/grid-order-with-display-contents.html
index 022ec3aa31e..b69f3d20799 100644
--- a/tests/wpt/tests/shadow-dom/focus-navigation/reading-flow/tentative/grid-order-with-display-contents.html
+++ b/tests/wpt/tests/shadow-dom/focus-navigation/reading-flow/tentative/grid-order-with-display-contents.html
@@ -19,7 +19,7 @@
}
</style>
-<div class="test-case" data-expect="order1,order2,order3,order4"
+<div class="test-case" data-expect="order1,order3,order2,order4"
data-description="Items in display contents are sorted in same grid container.">
<div class="wrapper">
<div style="display: contents">
@@ -33,7 +33,7 @@
</div>
</div>
-<div class="test-case" data-expect="order1B,order2B,order3B,order4B,div1B,div2B"
+<div class="test-case" data-expect="div1B,order1B,order3B,div2B,order2B,order4B"
data-description="Items in display contents are sorted in same grid container, with focusable display contents divs at the end of the focus sequence.">
<div class="wrapper">
<div id="div1B" style="display: contents" tabindex="0">
@@ -47,6 +47,32 @@
</div>
</div>
+<div class="test-case" data-expect="A1,A2,A3,B1,B2,B3,C1,C2,C3,D1,D2,D3"
+ data-description="Grid items are in nested display contents containers.">
+ <div class=box>
+ <div style="display:contents" tabindex="0" id="A1">
+ <div style="display:contents" tabindex="0" id="A2">
+ <button style="order: 4" id="A3">A</button>
+ </div>
+ </div>
+ <div style="display:contents" tabindex="0" id="B1">
+ <div style="display:contents" tabindex="0" id="B2">
+ <button style="order: 3" id="B3">B</button>
+ </div>
+ </div>
+ <div style="display:contents" tabindex="0" id="C1">
+ <div style="display:contents" tabindex="0" id="C2">
+ <button style="order: 1" id="C3">C</button>
+ </div>
+ </div>
+ <div style="display:contents" tabindex="0" id="D1">
+ <div style="display:contents" tabindex="0" id="D2">
+ <button style="order: 2" id="D3">D</button>
+ </div>
+ </div>
+ </div>
+</div>
+
<script>
runFocusTestCases();
</script>
diff --git a/tests/wpt/tests/shadow-dom/focus-navigation/reading-flow/tentative/grid-order-with-nested-grids.html b/tests/wpt/tests/shadow-dom/focus-navigation/reading-flow/tentative/grid-order-with-nested-grids.html
index 5daabefd7ff..990dbac846b 100644
--- a/tests/wpt/tests/shadow-dom/focus-navigation/reading-flow/tentative/grid-order-with-nested-grids.html
+++ b/tests/wpt/tests/shadow-dom/focus-navigation/reading-flow/tentative/grid-order-with-nested-grids.html
@@ -40,32 +40,6 @@
</div>
</div>
-<div class="test-case" data-expect="C,D,B,A"
- data-description="Grid items are in display contents containers.">
- <div class=box>
- <div style="display:contents" tabindex="0">
- <div style="display:contents" tabindex="0">
- <button style="order: 4" id="A">A</button>
- </div>
- </div>
- <div style="display:contents" tabindex="0">
- <div style="display:contents" tabindex="0">
- <button style="order: 3" id="B">B</button>
- </div>
- </div>
- <div style="display:contents" tabindex="0">
- <div style="display:contents" tabindex="0">
- <button style="order: 1" id="C">C</button>
- </div>
- </div>
- <div style="display:contents" tabindex="0">
- <div style="display:contents" tabindex="0">
- <button style="order: 2" id="D">D</button>
- </div>
- </div>
- </div>
-</div>
-
<div class="test-case"
data-expect="wrapper,div3,button3b,button3a,div2,button2,div1,button1b,button1a"
data-description="Grid items are grid containers.">
diff --git a/tests/wpt/tests/shadow-dom/reference-target/tentative/README.md b/tests/wpt/tests/shadow-dom/reference-target/tentative/README.md
new file mode 100644
index 00000000000..5c43d245d8a
--- /dev/null
+++ b/tests/wpt/tests/shadow-dom/reference-target/tentative/README.md
@@ -0,0 +1,9 @@
+# Reference Target tentative tests
+
+Tests in this directory are for the proposed Reference Target feature for
+shadow dom. This is not yet standardized and browsers should not be expected to
+pass these tests.
+
+See the explainer at
+https://github.com/WICG/aom/blob/gh-pages/reference-target-explainer.md for
+more information about the API.
diff --git a/tests/wpt/tests/shadow-dom/reference-target/tentative/anchor.html b/tests/wpt/tests/shadow-dom/reference-target/tentative/anchor.html
new file mode 100644
index 00000000000..d8c6f41460b
--- /dev/null
+++ b/tests/wpt/tests/shadow-dom/reference-target/tentative/anchor.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML>
+<html>
+
+<head>
+ <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 src="/wai-aria/scripts/aria-utils.js"></script>
+ <style>
+ body {
+ margin: 0;
+ }
+
+ [popover] {
+ position: absolute;
+ left: anchor(right);
+ top: anchor(top);
+ margin: 0;
+ }
+ </style>
+</head>
+
+<body>
+ <div>
+ <x-anchor id="x-anchor-1">
+ <template shadowrootmode="open" shadowrootreferencetarget="anchor">
+ <style>
+ div {
+ width: 100px;
+ height: 100px;
+ }
+
+ #anchor {
+ background-color: yellow;
+ }
+ </style>
+
+ <div></div>
+ <div id="anchor"></div>
+ </template>
+ </x-anchor>
+ <div id="popover-1" popover anchor="x-anchor-1">Popover content</div>
+ </div>
+
+ <script>
+ test(function () {
+ const popover = document.getElementById("popover-1");
+ popover.showPopover();
+ assert_equals(popover.offsetLeft, 100, "popover.offsetLeft");
+ assert_equals(popover.offsetTop, 100, "popover.offsetTop");
+ }, "ShadowRoot ReferenceTarget works with anchor attribute.");
+ </script>
+</body>
+
+</html>
diff --git a/tests/wpt/tests/shadow-dom/reference-target/tentative/aria-labelledby.html b/tests/wpt/tests/shadow-dom/reference-target/tentative/aria-labelledby.html
new file mode 100644
index 00000000000..2ff154f97c6
--- /dev/null
+++ b/tests/wpt/tests/shadow-dom/reference-target/tentative/aria-labelledby.html
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML>
+<html>
+
+<head>
+<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 src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+
+<body>
+
+<!-- 1. Declaratively defined custom label -->
+
+<x-label1 id="x-label1">
+ <template shadowrootmode="closed" shadowrootreferencetarget="label1">
+ <span>FAIL IF INCLUDED</span>
+ <label id="label1">Label 1</label>
+ </template>
+</x-label1>
+<input class="ex" aria-labelledby="x-label1" data-expectedlabel="Label 1">
+
+<!-- 2. Imperatively defined custom element -->
+
+<script>
+ customElements.define(
+ "x-label2",
+ class XLabel2 extends HTMLElement {
+ constructor() {
+ super();
+
+ this.shadowRoot_ = this.attachShadow({ mode: "closed" });
+ this.shadowRoot_.innerHTML = `
+ <span>FAIL IF INCLUDED</span>
+ <label id="label2">
+ <slot></slot>
+ </label>
+ `;
+ this.shadowRoot_.referenceTarget = "label2";
+ }
+ }
+ );
+</script>
+<x-label2 id="x-label2">Label 2</x-label2>
+<input class="ex" aria-labelledby="x-label2" data-expectedlabel="Label 2">
+
+<script>
+ AriaUtils.verifyLabelsBySelector('.ex');
+</script>
+
+</body>
+
+</html>
diff --git a/tests/wpt/tests/shadow-dom/reference-target/tentative/label-descendant.html b/tests/wpt/tests/shadow-dom/reference-target/tentative/label-descendant.html
new file mode 100644
index 00000000000..2b29efd648a
--- /dev/null
+++ b/tests/wpt/tests/shadow-dom/reference-target/tentative/label-descendant.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML>
+<html>
+
+<head>
+<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 src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+
+<body>
+<!-- 1. Label applies to descendant custom element that uses shadowrootreferencetarget -->
+
+<label>
+ Input 1
+ <div>
+ <x-input1 id="x-input1">
+ <template shadowrootmode="open" shadowrootreferencetarget="input1">
+ <input id="input1">
+ </template>
+ </x-input1>
+ </div>
+</label>
+
+<script>
+ promise_test(async t => {
+ const x_input = document.getElementById('x-input1');
+ const input = x_input.shadowRoot.getElementById('input1');
+
+ // The label should apply to the input element and not the host.
+ assert_equals(await test_driver.get_computed_label(x_input), "");
+ assert_equals(await test_driver.get_computed_label(input), "Input 1");
+ }, "Label applies to descendant custom element that uses shadowrootreferencetarget");
+</script>
+
+<!-- 2. Label applies to multiple layers of descendant custom elements that use shadowrootreferencetarget -->
+
+<label>
+ Input 2
+ <x-outer2 id="x-outer2">
+ <template shadowrootmode="open" shadowrootreferencetarget="x-inner2">
+ <x-inner2 id="x-inner2">
+ <template shadowrootmode="open" shadowrootreferencetarget="input2">
+ <input id="input2">
+ </template>
+ </x-inner2>
+ </template>
+ </x-outer2>
+</label>
+
+<script>
+ promise_test(async t => {
+ const outer = document.getElementById('x-outer2');
+ const inner = outer.shadowRoot.getElementById('x-inner2');
+ const input = inner.shadowRoot.getElementById('input2');
+
+ // The label should apply to the input element and not any of the hosts.
+ assert_equals(await test_driver.get_computed_label(outer), "");
+ assert_equals(await test_driver.get_computed_label(inner), "");
+ assert_equals(await test_driver.get_computed_label(input), "Input 2");
+ }, "Label applies to multiple layers of descendant custom elements that use shadowrootreferencetarget");
+</script>
+
+</body>
+
+</html>
diff --git a/tests/wpt/tests/shadow-dom/reference-target/tentative/label-for.html b/tests/wpt/tests/shadow-dom/reference-target/tentative/label-for.html
new file mode 100644
index 00000000000..06fab55abd2
--- /dev/null
+++ b/tests/wpt/tests/shadow-dom/reference-target/tentative/label-for.html
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML>
+<html>
+
+<head>
+<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 src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+
+<body>
+<!-- 1. Label for attribute targets a custom element using shadowrootreferencetarget -->
+
+<label for="x-input1">Input 1</label>
+<x-input1 id="x-input1">
+ <template shadowrootmode="open" shadowrootreferencetarget="input1">
+ <input id="input1">
+ </template>
+</x-input1>
+
+<script>
+ promise_test(async t => {
+ const x_input = document.getElementById('x-input1');
+ const input = x_input.shadowRoot.getElementById('input1');
+
+ // The label should apply to the input element and not the host.
+ assert_equals(await test_driver.get_computed_label(x_input), "");
+ assert_equals(await test_driver.get_computed_label(input), "Input 1");
+ }, "Label for attribute targets a custom element using shadowrootreferencetarget");
+</script>
+
+<!-- 2. Label for attribute targets a custom element using shadowrootreferencetarget inside multiple layers of shadow roots -->
+
+<label for="x-outer2">Input 2</label>
+<x-outer2 id="x-outer2">
+ <template shadowrootmode="open" shadowrootreferencetarget="x-inner2">
+ <x-inner2 id="x-inner2">
+ <template shadowrootmode="open" shadowrootreferencetarget="input2">
+ <input id="input2">
+ </template>
+ </x-inner2>
+ </template>
+</x-outer2>
+
+<script>
+ promise_test(async t => {
+ const outer = document.getElementById('x-outer2');
+ const inner = outer.shadowRoot.getElementById('x-inner2');
+ const input = inner.shadowRoot.getElementById('input2');
+
+ // The label should apply to the input element and not any of the hosts.
+ assert_equals(await test_driver.get_computed_label(outer), "");
+ assert_equals(await test_driver.get_computed_label(inner), "");
+ assert_equals(await test_driver.get_computed_label(input), "Input 2");
+ }, "Label for attribute targets a custom element using shadowrootreferencetarget inside multiple layers of shadow roots");
+</script>
+
+
+<!-- 3. Multiple labels targeting a custom element using shadowrootreferencetarget inside multiple layers of shadow roots -->
+
+<label for="x-outer3">A</label>
+<x-outer3 id="x-outer3">
+ <template shadowrootmode="open" shadowrootreferencetarget="x-inner3">
+ <label for="x-inner3">B</label>
+ <x-inner3 id="x-inner3">
+ <template shadowrootmode="open" shadowrootreferencetarget="input3">
+ <label for="input3">C</label>
+ <input id="input3">
+ <label for="input3">D</label>
+ </template>
+ </x-inner3>
+ <label for="x-inner3">E</label>
+ </template>
+</x-outer3>
+<label for="x-outer3">F</label>
+
+<script>
+ promise_test(async t => {
+ const outer = document.getElementById('x-outer3');
+ const inner = outer.shadowRoot.getElementById('x-inner3');
+ const input = inner.shadowRoot.getElementById('input3');
+ const computed_label = await test_driver.get_computed_label(input);
+ assert_equals(computed_label, "A B C D E F");
+ }, "Multiple labels targeting a custom element using shadowrootreferencetarget inside multiple layers of shadow roots");
+ </script>
+
+</body>
+
+</html>
diff --git a/tests/wpt/tests/shadow-dom/reference-target/tentative/popovertarget.html b/tests/wpt/tests/shadow-dom/reference-target/tentative/popovertarget.html
new file mode 100644
index 00000000000..5b0619d4a67
--- /dev/null
+++ b/tests/wpt/tests/shadow-dom/reference-target/tentative/popovertarget.html
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML>
+<html>
+
+<head>
+ <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 src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+
+<body>
+ <button id="toggle-button" popovertarget="x-popover-1">Toggle the popover</button>
+ <x-popover-1 id="x-popover-1">
+ <template shadowrootmode="open" shadowrootreferencetarget="popover-1">
+ <div id="popover-1" popover>Popover content inside shadow root</div>
+ </template>
+ </x-popover-1>
+
+ <script>
+ test(function () {
+ const xPopover = document.getElementById("x-popover-1");
+ const popover = xPopover.shadowRoot.getElementById("popover-1");
+
+ let showCount = 0;
+ popover.addEventListener('beforetoggle', (e) => {
+ if (e.newState === "open")
+ ++showCount;
+ });
+
+ const toggleButton = document.getElementById("toggle-button");
+ toggleButton.click();
+
+ assert_equals(showCount, 1, "showCount");
+ }, "Shadow root reference target works with popovertarget attribute.");
+ </script>
+</body>
+
+</html>
diff --git a/tests/wpt/tests/shadow-dom/reference-target/tentative/property-reflection.html b/tests/wpt/tests/shadow-dom/reference-target/tentative/property-reflection.html
new file mode 100644
index 00000000000..078eb28665d
--- /dev/null
+++ b/tests/wpt/tests/shadow-dom/reference-target/tentative/property-reflection.html
@@ -0,0 +1,211 @@
+<!DOCTYPE HTML>
+<html>
+
+<head>
+ <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 src="/wai-aria/scripts/aria-utils.js"></script>
+</head>
+
+<body>
+ <div>
+ <x-div id="x-div">
+ <template shadowrootmode="open" shadowrootreferencetarget="target">
+ <div id="target"></div>
+ </template>
+ </x-div>
+ <x-input id="x-input">
+ <template shadowrootmode="open" shadowrootreferencetarget="target">
+ <input id="target">
+ </template>
+ </x-input>
+ <x-form id="x-form">
+ <template shadowrootmode="open" shadowrootreferencetarget="target">
+ <form id="target"></form>
+ </template>
+ </x-form>
+ <x-datalist id="x-datalist">
+ <template shadowrootmode="open" shadowrootreferencetarget="target">
+ <datalist id="target"></datalist>
+ </template>
+ </x-datalist>
+ <div id="aria-activedescendant-test" aria-activedescendant="x-div"></div>
+ <div id="aria-controls-test" aria-controls="x-div"></div>
+ <div id="aria-describedby-test" aria-describedby="x-div"></div>
+ <div id="aria-details-test" aria-details="x-div"></div>
+ <div id="aria-errormessage-test" aria-errormessage="x-div"></div>
+ <div id="aria-flowto-test" aria-flowto="x-div"></div>
+ <div id="aria-labelledby-test" aria-labelledby="x-div"></div>
+ <div id="aria-owns-test" aria-owns="x-div"></div>
+ <label id="label-for-test" for="x-input"></label>
+ <button id="button-form-test" form="x-form"></button>
+ <input id="input-form-test" form="x-form" />
+ <object id="object-form-test" form="x-form"></object>
+ <label id="label-form-test" for="form-test"></label>
+ <fieldset id="fieldset-form-test" form="x-form">
+ <legend id="legend-form-test"></legend>
+ </fieldset>
+ <output id="output-form-test" form="x-form"></output>
+ <select id="select-form-test" form="x-form">
+ <option id="option-form-test"></option>
+ </select>
+ <textarea id="textarea-form-test" form="x-form"></textarea>
+ <input id="input-datalist-test" list="x-datalist" />
+ <div id="anchor-test" anchor="x-div"></div>
+ <button id="button-commandfor-test" commandfor="x-div"></button>
+ <input id="input-commandfor-test" commandfor="x-div">
+ <button id="button-popovertarget-test" popovertarget="x-div"></button>
+ <input id="input-popovertarget-test" popovertarget="x-div" />
+ <button id="button-interestarget-test" interesttarget="x-div"></button>
+ <input id="input-interestarget-test" interesttarget="x-div">
+ </div>
+ <script>
+ const divHost = document.querySelector("#x-div");
+
+ test(function () {
+ const testElement = document.querySelector("#aria-activedescendant-test");
+ assert_equals(testElement.ariaActiveDescendantElement, divHost);
+ }, "ariaActiveDescendantElement reflects reference target host element");
+
+ test(function () {
+ const testElement = document.querySelector("#aria-controls-test");
+ assert_array_equals(testElement.ariaControlsElements, [divHost]);
+ }, "ariaControlsElements reflects reference target host element");
+
+ test(function () {
+ const testElement = document.querySelector("#aria-describedby-test");
+ assert_array_equals(testElement.ariaDescribedByElements, [divHost]);
+ }, "ariaDescribedByElements reflects reference target host element");
+
+ test(function () {
+ const testElement = document.querySelector("#aria-details-test");
+ assert_array_equals(testElement.ariaDetailsElements, [divHost]);
+ }, "ariaDetailsElements reflects reference target host element");
+
+ test(function () {
+ const testElement = document.querySelector("#aria-errormessage-test");
+ assert_array_equals(testElement.ariaErrorMessageElements, [divHost]);
+ }, "ariaErrorMessageElements reflects reference target host element");
+
+ test(function () {
+ const testElement = document.querySelector("#aria-flowto-test");
+ assert_array_equals(testElement.ariaFlowToElements, [divHost]);
+ }, "ariaFlowToElements reflects reference target host element");
+
+ test(function () {
+ const testElement = document.querySelector("#aria-labelledby-test");
+ assert_array_equals(testElement.ariaLabelledByElements, [divHost]);
+ }, "ariaLabelledByElements reflects reference target host element");
+
+ test(function () {
+ const testElement = document.querySelector("#aria-owns-test");
+ assert_array_equals(testElement.ariaOwnsElements, [divHost]);
+ }, "ariaOwnsElements reflects reference target host element");
+
+ test(function () {
+ const testButton = document.querySelector("#button-form-test");
+ assert_equals(testButton.form, null);
+ }, "HTMLButtonElement.form reflects null when used with a reference target element");
+
+ test(function () {
+ const testInput = document.querySelector("#input-form-test");
+ assert_equals(testInput.form, null);
+ }, "HTMLInputElement.form reflects null when used with a reference target element");
+
+ test(function () {
+ const testObject = document.querySelector("#object-form-test");
+ assert_equals(testObject.form, null);
+ }, "HTMLObjectElement.form reflects null when used with a reference target element");
+
+ test(function () {
+ const testLabel = document.querySelector("#label-form-test");
+ assert_equals(testLabel.form, null);
+ }, "HTMLLabelElement.form reflects null when used with a reference target element");
+
+ test(function () {
+ const testFieldSet = document.querySelector("#fieldset-form-test");
+ assert_equals(testFieldSet.form, null);
+ }, "HTMLFieldSetElement.form reflects null when used with a reference target element");
+
+ test(function () {
+ const testLegend = document.querySelector("#legend-form-test");
+ assert_equals(testLegend.form, null);
+ }, "HTMLLegendElement.form reflects null when used with a reference target element");
+
+ test(function () {
+ const testOutput = document.querySelector("#output-form-test");
+ assert_equals(testOutput.form, null);
+ }, "HTMLOutputElement.form reflects null when used with a reference target element");
+
+ test(function () {
+ const testSelect = document.querySelector("#select-form-test");
+ assert_equals(testSelect.form, null);
+ }, "HTMLSelectElement.form reflects null when used with a reference target element");
+
+ test(function () {
+ const testOption = document.querySelector("#option-form-test");
+ assert_equals(testOption.form, null);
+ }, "HTMLOptionElement.form reflects null when used with a reference target element");
+
+ test(function () {
+ const testTextArea = document.querySelector("#textarea-form-test");
+ assert_equals(testTextArea.form, null);
+ }, "HTMLTextAreaElement.form reflects null when used with a reference target element");
+
+ test(function () {
+ const testElement = document.querySelector("#label-for-test");
+ assert_equals(testElement.htmlFor, "x-input");
+ }, "HTMLLabelElement.htmlFor reflects reference target host element");
+
+ test(function () {
+ const testElement = document.querySelector("#label-for-test");
+ const inputHost = document.querySelector("#x-input");
+ assert_equals(testElement.control, inputHost);
+ }, "HTMLLabelElement.control reflects reference target host element");
+
+ test(function () {
+ const testElement = document.querySelector("#input-datalist-test");
+ assert_equals(testElement.list, null);
+ }, "HTMLInputElement.list reflects null when used with a reference target element");
+
+ test(function () {
+ const testElement = document.querySelector("#anchor-test");
+ assert_equals(testElement.anchorElement, divHost);
+ }, "HTMLElement.anchorElement reflects reference target host element");
+
+ test(function () {
+ const testElement = document.querySelector("#button-commandfor-test");
+ assert_equals(testElement.commandForElement, divHost);
+ }, "HTMLButtonElement.commandForElement reflects reference target host element");
+
+ test(function () {
+ const testElement = document.querySelector("#input-commandfor-test");
+ assert_equals(testElement.commandForElement, divHost);
+ }, "HTMLInputElement.commandForElement reflects reference target host element");
+
+ test(function () {
+ const testElement = document.querySelector("#button-popovertarget-test");
+ assert_equals(testElement.popoverTargetElement, divHost);
+ }, "HTMLButtonElement.popoverTargetElement reflects reference target host element");
+
+ test(function () {
+ const testElement = document.querySelector("#input-popovertarget-test");
+ assert_equals(testElement.popoverTargetElement, divHost);
+ }, "HTMLInputElement.popoverTargetElement reflects reference target host element");
+
+ test(function () {
+ const testElement = document.querySelector("#button-interestarget-test");
+ assert_equals(testElement.interestTargetElement, divHost);
+ }, "HTMLButtonElement.interestTargetElement reflects reference target host element");
+
+ test(function () {
+ const testElement = document.querySelector("#input-interestarget-test");
+ assert_equals(testElement.interestTargetElement, divHost);
+ }, "HTMLInputElement.interestTargetElement reflects reference target host element");
+ </script>
+</body>
+
+</html>
diff --git a/tests/wpt/tests/svg/painting/reftests/non-scaling-stroke-004.html b/tests/wpt/tests/svg/painting/reftests/non-scaling-stroke-004.html
new file mode 100644
index 00000000000..32c745a4e2e
--- /dev/null
+++ b/tests/wpt/tests/svg/painting/reftests/non-scaling-stroke-004.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<title>non-scaling-stroke with scaling</title>
+<link rel="help" href="https://svgwg.org/svg2-draft/painting.html#PaintingVectorEffects" />
+<link rel="match" href="green-100x100.svg" />
+<body>
+<svg>
+ <defs>
+ <style>
+ html, body {
+ width: 100%;
+ height: 100%;
+ border: none;
+ padding: 0;
+ margin: 0;
+ overflow: hidden;
+ }
+ svg {
+ width: 200%;
+ height: 200%;
+ transform: scale(0.1);
+ transform-origin: top left;
+ }
+ </style>
+ </defs>
+ <rect fill="red" width="500" height="500" stroke="green" stroke-width="1000" vector-effect="non-scaling-stroke"/>
+</svg>
+</body>
+</html>
diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorchrome.py b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorchrome.py
index 153e2cb72c1..d972a0eea5f 100644
--- a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorchrome.py
+++ b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorchrome.py
@@ -16,7 +16,7 @@ from .base import (
from .executorwebdriver import (
WebDriverCrashtestExecutor,
WebDriverFedCMProtocolPart,
- WebDriverBidiProtocol,
+ WebDriverProtocol,
WebDriverRefTestExecutor,
WebDriverRun,
WebDriverTestharnessExecutor,
@@ -200,13 +200,13 @@ class ChromeDriverDevToolsProtocolPart(ProtocolPart):
body=body)
-class ChromeDriverProtocol(WebDriverBidiProtocol):
+class ChromeDriverProtocol(WebDriverProtocol):
implements = [
ChromeDriverDevToolsProtocolPart,
ChromeDriverFedCMProtocolPart,
ChromeDriverPrintProtocolPart,
ChromeDriverTestharnessProtocolPart,
- *(part for part in WebDriverBidiProtocol.implements
+ *(part for part in WebDriverProtocol.implements
if part.name != ChromeDriverTestharnessProtocolPart.name and
part.name != ChromeDriverFedCMProtocolPart.name)
]
diff --git a/tests/wpt/tests/url/META.yml b/tests/wpt/tests/url/META.yml
index 094b266b64b..415bd0f094c 100644
--- a/tests/wpt/tests/url/META.yml
+++ b/tests/wpt/tests/url/META.yml
@@ -3,5 +3,4 @@ suggested_reviewers:
- mikewest
- domenic
- annevk
- - GPHemsley
- TimothyGu
diff --git a/tests/wpt/tests/url/README.md b/tests/wpt/tests/url/README.md
index 9b483847568..50227bc4b33 100644
--- a/tests/wpt/tests/url/README.md
+++ b/tests/wpt/tests/url/README.md
@@ -1,7 +1,7 @@
## urltestdata.json / urltestdata-javascript-only.json
-`resources/urltestdata.json` contains URL parsing tests suitable for any URL parser implementation.
-`resources/urltestdata-javascript-only.json` contains URL parsing tests specifically meant
+[`resources/urltestdata.json`](resources/urltestdata.json) contains URL parsing tests suitable for any URL parser implementation.
+[`resources/urltestdata-javascript-only.json`](resources/urltestdata-javascript-only.json) contains URL parsing tests specifically meant
for JavaScript's `URL()` class as well as other languages accepting non-scalar-value strings.
These files are used as a source of tests by `a-element.html`, `failure.html`, `url-constructor.any.js`,
diff --git a/tests/wpt/tests/web-animations/animation-model/animation-types/property-list.js b/tests/wpt/tests/web-animations/animation-model/animation-types/property-list.js
index 2e5e876204b..ee791e884c5 100644
--- a/tests/wpt/tests/web-animations/animation-model/animation-types/property-list.js
+++ b/tests/wpt/tests/web-animations/animation-model/animation-types/property-list.js
@@ -1421,13 +1421,13 @@ const gCSSProperties2 = {
'text-box-edge': {
// https://drafts.csswg.org/css-inline-3/#text-edges
types: [
- { type: 'discrete', options: [ [ 'leading', 'text' ] ] }
+ { type: 'discrete', options: [ [ 'auto', 'text' ] ] }
]
},
'text-box-trim': {
// https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim
types: [
- { type: 'discrete', options: [ [ 'none', 'start' ] ] }
+ { type: 'discrete', options: [ [ 'none', 'trim-start' ] ] }
]
},
'text-decoration': {
@@ -1592,6 +1592,12 @@ const gCSSProperties2 = {
types: [
]
},
+ 'view-transition-class': {
+ // https://drafts.csswg.org/css-view-transitions/#propdef-view-transition-name
+ types: [
+ { type: 'discrete', options: [ [ 'none', 'card scale-animation' ] ] },
+ ]
+ },
'view-transition-name': {
// https://drafts.csswg.org/css-view-transitions/#propdef-view-transition-name
types: [
diff --git a/tests/wpt/tests/webdriver/tests/bidi/browsing_context/navigate/error.py b/tests/wpt/tests/webdriver/tests/bidi/browsing_context/navigate/error.py
index ba23e773000..c6c32b88dee 100644
--- a/tests/wpt/tests/webdriver/tests/bidi/browsing_context/navigate/error.py
+++ b/tests/wpt/tests/webdriver/tests/bidi/browsing_context/navigate/error.py
@@ -1,9 +1,14 @@
+import asyncio
import pytest
+from webdriver.bidi.error import UnknownErrorException
from . import navigate_and_assert
pytestmark = pytest.mark.asyncio
+NAVIGATION_STARTED_EVENT = "browsingContext.navigationStarted"
+USER_PROMPT_OPENED_EVENT = "browsingContext.userPromptOpened"
+
@pytest.mark.parametrize(
"url",
@@ -16,7 +21,284 @@ pytestmark = pytest.mark.asyncio
"protocol",
"host",
"port",
- ]
+ ],
)
async def test_invalid_address(bidi_session, new_tab, url):
await navigate_and_assert(bidi_session, new_tab, url, expected_error=True)
+
+
+async def test_with_csp_meta_tag(
+ bidi_session,
+ inline,
+ new_tab,
+):
+ same_origin_url = inline("<div>foo</div>")
+ cross_origin_url = inline("<div>bar</div>", domain="alt")
+ page_url = inline(
+ f"""
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta
+ http-equiv="Content-Security-Policy"
+ content="default-src 'self'" />
+ </head>
+ <body><iframe src="{same_origin_url}"></iframe></body>
+</html>
+"""
+ )
+ await bidi_session.browsing_context.navigate(
+ context=new_tab["context"], url=page_url, wait="complete"
+ )
+
+ contexts = await bidi_session.browsing_context.get_tree(root=new_tab["context"])
+ iframe_context = contexts[0]["children"][0]["context"]
+
+ # Make sure that cross-origin navigation in iframe failed.
+ with pytest.raises(UnknownErrorException):
+ await bidi_session.browsing_context.navigate(
+ context=iframe_context, url=cross_origin_url, wait="complete"
+ )
+
+
+@pytest.mark.parametrize(
+ "header",
+ [
+ "Content-Security-Policy, default-src 'self'",
+ "Cross-Origin-Embedder-Policy, require-corp",
+ ],
+)
+async def test_with_content_blocking_header_in_top_context(
+ bidi_session,
+ subscribe_events,
+ inline,
+ new_tab,
+ wait_for_event,
+ wait_for_future_safe,
+ header,
+):
+ same_origin_url = inline("<div>foo</div>")
+ cross_origin_url = inline("<div>bar</div>", domain="alt")
+ page_url = inline(
+ f"""<iframe src={same_origin_url}></iframe>""",
+ parameters={"pipe": f"header({header})"},
+ )
+ await bidi_session.browsing_context.navigate(
+ context=new_tab["context"], url=page_url, wait="complete"
+ )
+
+ contexts = await bidi_session.browsing_context.get_tree(root=new_tab["context"])
+ iframe_context = contexts[0]["children"][0]["context"]
+
+ # Make sure that cross-origin navigation in iframe failed.
+ with pytest.raises(UnknownErrorException):
+ await bidi_session.browsing_context.navigate(
+ context=iframe_context, url=cross_origin_url, wait="complete"
+ )
+
+
+@pytest.mark.parametrize(
+ "header_value",
+ [
+ "SAMEORIGIN",
+ "DENY",
+ ],
+)
+async def test_with_x_frame_options_header(
+ bidi_session,
+ subscribe_events,
+ inline,
+ new_tab,
+ wait_for_event,
+ wait_for_future_safe,
+ header_value,
+):
+ iframe_url_without_header = inline("<div>bar</div>")
+ iframe_url_with_header = inline(
+ "<div>foo</div>",
+ parameters={"pipe": f"header(X-Frame-Options, {header_value})"},
+ )
+ page_url = inline(
+ f"""<iframe src={iframe_url_without_header}></iframe>""", domain="alt"
+ )
+ await bidi_session.browsing_context.navigate(
+ context=new_tab["context"], url=page_url, wait="complete"
+ )
+
+ contexts = await bidi_session.browsing_context.get_tree(root=new_tab["context"])
+ iframe_context = contexts[0]["children"][0]["context"]
+
+ # Make sure that cross-origin navigation in iframe failed.
+ with pytest.raises(UnknownErrorException):
+ await bidi_session.browsing_context.navigate(
+ context=iframe_context, url=iframe_url_with_header, wait="complete"
+ )
+
+
+async def test_with_new_navigation(
+ bidi_session,
+ subscribe_events,
+ inline,
+ url,
+ new_tab,
+ wait_for_event,
+ wait_for_future_safe,
+):
+ slow_page_url = url(
+ "/webdriver/tests/bidi/browsing_context/support/empty.html?pipe=trickle(d10)"
+ )
+ await subscribe_events(events=[NAVIGATION_STARTED_EVENT])
+
+ on_navigation_started = wait_for_event(NAVIGATION_STARTED_EVENT)
+ task = asyncio.ensure_future(
+ bidi_session.browsing_context.navigate(
+ context=new_tab["context"], url=slow_page_url, wait="complete"
+ )
+ )
+ await wait_for_future_safe(on_navigation_started)
+ second_url = inline("<div>foo</div>")
+
+ # Trigger the second navigation which should fail the first one.
+ await bidi_session.browsing_context.navigate(
+ context=new_tab["context"], url=second_url, wait="none"
+ )
+
+ # Make sure that the first navigation failed.
+ with pytest.raises(UnknownErrorException):
+ await task
+
+
+async def test_with_new_navigation_inside_page(
+ bidi_session,
+ subscribe_events,
+ inline,
+ new_tab,
+ wait_for_event,
+ wait_for_future_safe,
+):
+ second_url = inline("<div>foo</div>")
+ slow_page_url = inline(
+ f"""
+<!DOCTYPE html>
+<html>
+ <body>
+ <img src="/webdriver/tests/bidi/browsing_context/support/empty.svg?pipe=trickle(d10)" />
+ <script>
+ location.href = "{second_url}"
+ </script>
+ <img src="/webdriver/tests/bidi/browsing_context/support/empty.svg?pipe=trickle(d10)" />
+ </body>
+</html>
+"""
+ )
+
+ # Make sure that the navigation failed.
+ with pytest.raises(UnknownErrorException):
+ await bidi_session.browsing_context.navigate(
+ context=new_tab["context"], url=slow_page_url, wait="complete"
+ )
+
+
+@pytest.mark.parametrize("type_hint", ["tab", "window"])
+async def test_close_context(
+ bidi_session,
+ url,
+ subscribe_events,
+ wait_for_event,
+ wait_for_future_safe,
+ type_hint,
+):
+ await subscribe_events(events=[NAVIGATION_STARTED_EVENT])
+
+ new_context = await bidi_session.browsing_context.create(type_hint=type_hint)
+ slow_page_url = url(
+ "/webdriver/tests/bidi/browsing_context/support/empty.html?pipe=trickle(d10)"
+ )
+
+ on_navigation_started = wait_for_event(NAVIGATION_STARTED_EVENT)
+ task = asyncio.ensure_future(
+ bidi_session.browsing_context.navigate(
+ context=new_context["context"], url=slow_page_url, wait="complete"
+ )
+ )
+ await wait_for_future_safe(on_navigation_started)
+
+ await bidi_session.browsing_context.close(context=new_context["context"])
+
+ # Make sure that the navigation failed.
+ with pytest.raises(UnknownErrorException):
+ await task
+
+
+async def test_close_iframe(
+ bidi_session,
+ subscribe_events,
+ inline,
+ url,
+ new_tab,
+ wait_for_event,
+ wait_for_future_safe,
+):
+ iframe_url = inline("<div>foo</div>")
+ page_url = inline(f"<iframe src={iframe_url}></iframe")
+
+ await bidi_session.browsing_context.navigate(
+ context=new_tab["context"], url=page_url, wait="complete"
+ )
+
+ contexts = await bidi_session.browsing_context.get_tree(root=new_tab["context"])
+ iframe_context = contexts[0]["children"][0]["context"]
+
+ slow_page_url = url(
+ "/webdriver/tests/bidi/browsing_context/support/empty.html?pipe=trickle(d10)"
+ )
+ await subscribe_events(events=[NAVIGATION_STARTED_EVENT])
+
+ on_navigation_started = wait_for_event(NAVIGATION_STARTED_EVENT)
+ # Navigate in the iframe.
+ task = asyncio.ensure_future(
+ bidi_session.browsing_context.navigate(
+ context=iframe_context, url=slow_page_url, wait="complete"
+ )
+ )
+ await wait_for_future_safe(on_navigation_started)
+
+ # Reload the top context to destroy the iframe.
+ await bidi_session.browsing_context.reload(context=new_tab["context"], wait="none")
+
+ # Make sure that the iframe navigation failed.
+ with pytest.raises(UnknownErrorException):
+ await task
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": {"beforeUnload": "ignore"}})
+async def test_beforeunload_rejected(
+ bidi_session,
+ new_tab,
+ inline,
+ setup_beforeunload_page,
+ subscribe_events,
+ wait_for_event,
+ wait_for_future_safe,
+):
+ await subscribe_events(events=[USER_PROMPT_OPENED_EVENT])
+ await setup_beforeunload_page(new_tab)
+
+ url_after = inline("<div>foo</div>")
+
+ on_prompt_opened = wait_for_event(USER_PROMPT_OPENED_EVENT)
+ task = asyncio.ensure_future(
+ bidi_session.browsing_context.navigate(
+ context=new_tab["context"], url=url_after, wait="complete"
+ )
+ )
+ # Wait for the prompt to open.
+ await wait_for_future_safe(on_prompt_opened)
+
+ # Stay on the page to fail the started navigation.
+ await bidi_session.browsing_context.handle_user_prompt(
+ context=new_tab["context"], accept=False
+ )
+
+ with pytest.raises(UnknownErrorException):
+ await task
diff --git a/tests/wpt/tests/webdriver/tests/bidi/browsing_context/navigation_failed/navigation_failed.py b/tests/wpt/tests/webdriver/tests/bidi/browsing_context/navigation_failed/navigation_failed.py
index fcab85fb075..bf72e6e4278 100644
--- a/tests/wpt/tests/webdriver/tests/bidi/browsing_context/navigation_failed/navigation_failed.py
+++ b/tests/wpt/tests/webdriver/tests/bidi/browsing_context/navigation_failed/navigation_failed.py
@@ -282,7 +282,7 @@ async def test_with_new_navigation_inside_page(
</html>
"""
)
- await subscribe_events(events=["browsingContext"])
+ await subscribe_events(events=[NAVIGATION_FAILED_EVENT])
on_navigation_failed = wait_for_event(NAVIGATION_FAILED_EVENT)
result = await bidi_session.browsing_context.navigate(
diff --git a/tests/wpt/tests/webnn/conformance_tests/buffer.https.any.js b/tests/wpt/tests/webnn/conformance_tests/buffer.https.any.js
index 75992f5de85..31a33d9e706 100644
--- a/tests/wpt/tests/webnn/conformance_tests/buffer.https.any.js
+++ b/tests/wpt/tests/webnn/conformance_tests/buffer.https.any.js
@@ -231,6 +231,49 @@ const testWriteWebNNBuffer = (testName) => {
assert_throws_js(
TypeError, () => anotherMLContext.writeBuffer(mlBuffer, inputData));
}, `${testName} / context_mismatch`);
+
+ promise_test(async () => {
+ let mlBuffer =
+ await mlContext.createBuffer({dataType: 'int32', dimensions: [1]});
+
+ // Initialize the buffer.
+ const inputData = Uint8Array.from([0xAA, 0xAA, 0xAA, 0xAA]);
+ mlContext.writeBuffer(mlBuffer, inputData);
+
+ // Writing zero bytes from a zero write size.
+ mlContext.writeBuffer(mlBuffer, Uint8Array.from([0xBB]), 0, 0);
+
+ await assert_buffer_data_equals(mlContext, mlBuffer, inputData);
+
+ // Writing zero bytes at the end of the buffer.
+ mlContext.writeBuffer(
+ mlBuffer, Uint32Array.from([0xBBBBBBBB]), /*srcOffset=*/ 1);
+
+ await assert_buffer_data_equals(mlContext, mlBuffer, inputData);
+ }, `${testName} / zero_write`);
+
+ promise_test(async () => {
+ const bufferDescriptor = {dataType: 'int32', dimensions: [2, 2]};
+ let mlBuffer = await mlContext.createBuffer(bufferDescriptor);
+
+ const bufferByteLength = sizeOfDescriptor(bufferDescriptor);
+ let inputBuffer = new ArrayBuffer(bufferByteLength);
+
+ // Initialize the buffer.
+ const int32View = new Int32Array(inputBuffer);
+ int32View.fill(0xBBBBBBBB);
+
+ mlContext.writeBuffer(mlBuffer, int32View);
+
+ // Writing to a detached buffer should be ignored.
+ const detachedBuffer = inputBuffer.transfer();
+ assert_true(inputBuffer.detached, 'array buffer should be detached.');
+
+ mlContext.writeBuffer(mlBuffer, inputBuffer);
+
+ await assert_buffer_data_equals(
+ mlContext, mlBuffer, new Int32Array(detachedBuffer));
+ }, `${testName} / detached`);
};
/**
diff --git a/tests/wpt/tests/webnn/conformance_tests/clamp.https.any.js b/tests/wpt/tests/webnn/conformance_tests/clamp.https.any.js
index 5ccbe3b8e64..115ddabc6d6 100644
--- a/tests/wpt/tests/webnn/conformance_tests/clamp.https.any.js
+++ b/tests/wpt/tests/webnn/conformance_tests/clamp.https.any.js
@@ -29,6 +29,28 @@ const getClampPrecisionTolerance = (graphResources) => {
const clampTests = [
{
+ 'name': 'clamp float32 0D tensor default options',
+ 'graph': {
+ 'inputs': {
+ 'clampInput': {
+ 'data': [-9.817828178405762],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'clamp',
+ 'arguments': [{'input': 'clampInput'}],
+ 'outputs': 'clampOutput'
+ }],
+ 'expectedOutputs': {
+ 'clampOutput': {
+ 'data': [-9.817828178405762],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
'name': 'clamp float32 1D constant tensor default options',
'graph': {
'inputs': {
diff --git a/tests/wpt/tests/webnn/conformance_tests/hard_sigmoid.https.any.js b/tests/wpt/tests/webnn/conformance_tests/hard_sigmoid.https.any.js
index a5c4d3d6dee..4ab915958e1 100644
--- a/tests/wpt/tests/webnn/conformance_tests/hard_sigmoid.https.any.js
+++ b/tests/wpt/tests/webnn/conformance_tests/hard_sigmoid.https.any.js
@@ -30,6 +30,28 @@ const getHardSigmoidPrecisionTolerance = (graphResources) => {
const hardSigmoidTests = [
{
+ 'name': 'hardSigmoid float32 positive 0D tensor default options',
+ 'graph': {
+ 'inputs': {
+ 'hardSigmoidInput': {
+ 'data': [0.05907066911458969],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'hardSigmoid',
+ 'arguments': [{'input': 'hardSigmoidInput'}],
+ 'outputs': 'hardSigmoidOutput'
+ }],
+ 'expectedOutputs': {
+ 'hardSigmoidOutput': {
+ 'data': [0.5118141174316406],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
'name': 'hardSigmoid float32 positive 1D constant tensor default options',
'graph': {
'inputs': {
diff --git a/tests/wpt/tests/webnn/conformance_tests/hard_swish.https.any.js b/tests/wpt/tests/webnn/conformance_tests/hard_swish.https.any.js
index 5459e5662e4..480b696d77f 100644
--- a/tests/wpt/tests/webnn/conformance_tests/hard_swish.https.any.js
+++ b/tests/wpt/tests/webnn/conformance_tests/hard_swish.https.any.js
@@ -24,6 +24,28 @@ const getHardSwishPrecisionTolerance = (graphResources) => {
const hardSwishTests = [
{
+ 'name': 'hardSwish float32 0D tensor',
+ 'graph': {
+ 'inputs': {
+ 'hardSwishInput': {
+ 'data': [0.7341583371162415],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'hardSwish',
+ 'arguments': [{'input': 'hardSwishInput'}],
+ 'outputs': 'hardSwishOutput'
+ }],
+ 'expectedOutputs': {
+ 'hardSwishOutput': {
+ 'data': [0.4569105803966522],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
'name': 'hardSwish float32 1D constant tensor',
'graph': {
'inputs': {
diff --git a/tests/wpt/tests/webnn/conformance_tests/leaky_relu.https.any.js b/tests/wpt/tests/webnn/conformance_tests/leaky_relu.https.any.js
index af4ac23e444..f14489b1295 100644
--- a/tests/wpt/tests/webnn/conformance_tests/leaky_relu.https.any.js
+++ b/tests/wpt/tests/webnn/conformance_tests/leaky_relu.https.any.js
@@ -71,6 +71,28 @@ const leakyReluTests = [
}
},
{
+ 'name': 'leakyRelu float32 0D tensor default options',
+ 'graph': {
+ 'inputs': {
+ 'leakyReluInput': {
+ 'data': [-19.053640365600586],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'leakyRelu',
+ 'arguments': [{'input': 'leakyReluInput'}],
+ 'outputs': 'leakyReluOutput'
+ }],
+ 'expectedOutputs': {
+ 'leakyReluOutput': {
+ 'data': [-0.19053640961647034],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
'name': 'leakyRelu float32 1D tensor default options',
'graph': {
'inputs': {
diff --git a/tests/wpt/tests/webnn/conformance_tests/linear.https.any.js b/tests/wpt/tests/webnn/conformance_tests/linear.https.any.js
index 1f092303d6a..da4115bcfa6 100644
--- a/tests/wpt/tests/webnn/conformance_tests/linear.https.any.js
+++ b/tests/wpt/tests/webnn/conformance_tests/linear.https.any.js
@@ -69,6 +69,28 @@ const linearTests = [
}
},
{
+ 'name': 'linear float32 0D tensor default options',
+ 'graph': {
+ 'inputs': {
+ 'linearInput': {
+ 'data': [-1.12251615524292],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'linear',
+ 'arguments': [{'input': 'linearInput'}],
+ 'outputs': 'linearOutput'
+ }],
+ 'expectedOutputs': {
+ 'linearOutput': {
+ 'data': [-1.12251615524292],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
'name': 'linear float32 1D tensor default options',
'graph': {
'inputs': {
diff --git a/tests/wpt/tests/webnn/conformance_tests/lstm.https.any.js b/tests/wpt/tests/webnn/conformance_tests/lstm.https.any.js
new file mode 100644
index 00000000000..8b6cf73715c
--- /dev/null
+++ b/tests/wpt/tests/webnn/conformance_tests/lstm.https.any.js
@@ -0,0 +1,825 @@
+// META: title=test WebNN API lstm operation
+// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
+// META: script=../resources/utils.js
+// META: timeout=long
+
+'use strict';
+
+// https://www.w3.org/TR/webnn/#api-mlgraphbuilder-lstm
+// Long Short-Term Memory [LSTM] recurrent network uses an input, output,
+// forget, and cell gate to compute the output state that rolls into the output
+// across the temporal sequence of the network.
+// enum MLRecurrentNetworkDirection {
+// "forward",
+// "backward",
+// "both"
+// };
+//
+// enum MLRecurrentNetworkActivation {
+// "relu",
+// "sigmoid",
+// "tanh"
+// };
+//
+// enum MLLstmWeightLayout {
+// "iofg", // input-output-forget-cell gate ordering
+// "ifgo" // input-forget-cell-output gate ordering
+// };
+//
+// dictionary MLLstmOptions {
+// MLOperand bias;
+// MLOperand recurrentBias;
+// MLOperand peepholeWeight;
+// MLOperand initialHiddenState;
+// MLOperand initialCellState;
+// boolean returnSequence = false;
+// MLRecurrentNetworkDirection direction = "forward";
+// MLLstmWeightLayout layout = "iofg";
+// sequence<MLRecurrentNetworkActivation> activations;
+// };
+//
+// sequence<MLOperand> lstm(MLOperand input,
+// MLOperand weight,
+// MLOperand recurrentWeight,
+// [EnforceRange] unsigned long steps,
+// [EnforceRange] unsigned long hiddenSize,
+// optional MLLstmOptions options = {});
+
+
+const getLstmPrecisionTolerance = (graphResources) => {
+ const toleranceValueDict = {float32: 1};
+ const expectedDataType =
+ graphResources
+ .expectedOutputs[Object.keys(graphResources.expectedOutputs)[0]]
+ .descriptor.dataType;
+ return {metricType: 'ULP', value: toleranceValueDict[expectedDataType]};
+};
+
+const lstmTests = [
+ {
+ 'name':
+ 'lstm float32 tensors steps=1 with options.bias, options.recurrentBias and options.activations=[\'relu\', \'relu\', \'relu\']',
+ 'graph': {
+ 'inputs': {
+ 'lstmInput': {
+ 'data': [1, 2, 2, 1],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstm',
+ 'arguments': [
+ {'input': 'lstmInput'}, {'weight': 'lstmWeight'},
+ {'recurrentWeight': 'lstmRecurrentWeight'}, {'steps': 1},
+ {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmBias',
+ 'recurrentBias': 'lstmRecurrentBias',
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmOutput1', 'lstmOutput2']
+ }],
+ 'expectedOutputs': {
+ 'lstmOutput1': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmOutput2': {
+ 'data': [1, 4, 9, 36],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'lstm float32 tensors steps=1 with options.bias, options.recurrentBias, options.activations=[\'relu\', \'relu\', \'relu\'] and options.peepholeWeight',
+ 'graph': {
+ 'inputs': {
+ 'lstmInput': {
+ 'data': [1, 2, 2, 1],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmPeepholeWeight': {
+ 'data': [0, 0, 0, 0, 0, 0],
+ 'descriptor': {'dimensions': [1, 6], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstm',
+ 'arguments': [
+ {'input': 'lstmInput'}, {'weight': 'lstmWeight'},
+ {'recurrentWeight': 'lstmRecurrentWeight'}, {'steps': 1},
+ {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmBias',
+ 'recurrentBias': 'lstmRecurrentBias',
+ 'peepholeWeight': 'lstmPeepholeWeight',
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmOutput1', 'lstmOutput2']
+ }],
+ 'expectedOutputs': {
+ 'lstmOutput1': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmOutput2': {
+ 'data': [1, 4, 9, 36],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'lstm float32 tensors steps=1 with options.bias, options.recurrentBias, options.activations=[\'relu\', \'relu\', \'relu\'] and options.initialHiddenState',
+ 'graph': {
+ 'inputs': {
+ 'lstmInput': {
+ 'data': [1, 2, 2, 1],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmInitialHiddenState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstm',
+ 'arguments': [
+ {'input': 'lstmInput'}, {'weight': 'lstmWeight'},
+ {'recurrentWeight': 'lstmRecurrentWeight'}, {'steps': 1},
+ {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmBias',
+ 'recurrentBias': 'lstmRecurrentBias',
+ 'initialHiddenState': 'lstmInitialHiddenState',
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmOutput1', 'lstmOutput2']
+ }],
+ 'expectedOutputs': {
+ 'lstmOutput1': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmOutput2': {
+ 'data': [1, 4, 9, 36],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'lstm float32 tensors steps=1 with options.bias, options.recurrentBias, options.activations=[\'relu\', \'relu\', \'relu\'] and options.initialCellState',
+ 'graph': {
+ 'inputs': {
+ 'lstmInput': {
+ 'data': [1, 2, 2, 1],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmInitialCellState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstm',
+ 'arguments': [
+ {'input': 'lstmInput'}, {'weight': 'lstmWeight'},
+ {'recurrentWeight': 'lstmRecurrentWeight'}, {'steps': 1},
+ {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmBias',
+ 'recurrentBias': 'lstmRecurrentBias',
+ 'initialCellState': 'lstmInitialCellState',
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmOutput1', 'lstmOutput2']
+ }],
+ 'expectedOutputs': {
+ 'lstmOutput1': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmOutput2': {
+ 'data': [1, 4, 9, 36],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'lstm float32 tensors steps=1 with options.bias, options.recurrentBias, options.activations=[\'relu\', \'relu\', \'relu\'] and explicit options.returnSequence=false',
+ 'graph': {
+ 'inputs': {
+ 'lstmInput': {
+ 'data': [1, 2, 2, 1],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstm',
+ 'arguments': [
+ {'input': 'lstmInput'}, {'weight': 'lstmWeight'},
+ {'recurrentWeight': 'lstmRecurrentWeight'}, {'steps': 1},
+ {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmBias',
+ 'recurrentBias': 'lstmRecurrentBias',
+ 'returnSequence': false,
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmOutput1', 'lstmOutput2']
+ }],
+ 'expectedOutputs': {
+ 'lstmOutput1': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmOutput2': {
+ 'data': [1, 4, 9, 36],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'lstm float32 tensors steps=1 with options.bias, options.recurrentBias, options.activations=[\'relu\', \'relu\', \'relu\'] and options.returnSequence=true',
+ 'graph': {
+ 'inputs': {
+ 'lstmInput': {
+ 'data': [1, 2, 2, 1],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstm',
+ 'arguments': [
+ {'input': 'lstmInput'}, {'weight': 'lstmWeight'},
+ {'recurrentWeight': 'lstmRecurrentWeight'}, {'steps': 1},
+ {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmBias',
+ 'recurrentBias': 'lstmRecurrentBias',
+ 'returnSequence': true,
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmOutput1', 'lstmOutput2', 'lstmOutput3']
+ }],
+ 'expectedOutputs': {
+ 'lstmOutput1': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmOutput2': {
+ 'data': [1, 4, 9, 36],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmOutput3': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [1, 1, 2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'lstm float32 tensors steps=1 with options.bias, options.recurrentBias, options.activations=[\'relu\', \'relu\', \'relu\'] and explicit options.direction=\'forward\'',
+ 'graph': {
+ 'inputs': {
+ 'lstmInput': {
+ 'data': [1, 2, 2, 1],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstm',
+ 'arguments': [
+ {'input': 'lstmInput'}, {'weight': 'lstmWeight'},
+ {'recurrentWeight': 'lstmRecurrentWeight'}, {'steps': 1},
+ {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmBias',
+ 'recurrentBias': 'lstmRecurrentBias',
+ 'direction': 'forward',
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmOutput1', 'lstmOutput2']
+ }],
+ 'expectedOutputs': {
+ 'lstmOutput1': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmOutput2': {
+ 'data': [1, 4, 9, 36],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'lstm float32 tensors steps=1 with options.bias, options.recurrentBias, options.activations=[\'relu\', \'relu\', \'relu\'] and explicit options.layout=\'iofg\'',
+ 'graph': {
+ 'inputs': {
+ 'lstmInput': {
+ 'data': [1, 2, 2, 1],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstm',
+ 'arguments': [
+ {'input': 'lstmInput'}, {'weight': 'lstmWeight'},
+ {'recurrentWeight': 'lstmRecurrentWeight'}, {'steps': 1},
+ {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmBias',
+ 'recurrentBias': 'lstmRecurrentBias',
+ 'layout': 'iofg',
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmOutput1', 'lstmOutput2']
+ }],
+ 'expectedOutputs': {
+ 'lstmOutput1': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmOutput2': {
+ 'data': [1, 4, 9, 36],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'lstm float32 tensors steps=1 with options.bias, options.recurrentBias, options.activations=[\'relu\', \'relu\', \'relu\'] and options.layout=\'ifgo\'',
+ 'graph': {
+ 'inputs': {
+ 'lstmInput': {
+ 'data': [1, 2, 2, 1],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstm',
+ 'arguments': [
+ {'input': 'lstmInput'}, {'weight': 'lstmWeight'},
+ {'recurrentWeight': 'lstmRecurrentWeight'}, {'steps': 1},
+ {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmBias',
+ 'recurrentBias': 'lstmRecurrentBias',
+ 'layout': 'ifgo',
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmOutput1', 'lstmOutput2']
+ }],
+ 'expectedOutputs': {
+ 'lstmOutput1': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmOutput2': {
+ 'data': [1, 4, 9, 36],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'lstm float32 tensors steps=1 with all options',
+ 'graph': {
+ 'inputs': {
+ 'lstmInput': {
+ 'data': [1, 2, 2, 1],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmPeepholeWeight': {
+ 'data': [0, 0, 0, 0, 0, 0],
+ 'descriptor': {'dimensions': [1, 6], 'dataType': 'float32'}
+ },
+ 'lstmInitialHiddenState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmInitialCellState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstm',
+ 'arguments': [
+ {'input': 'lstmInput'}, {'weight': 'lstmWeight'},
+ {'recurrentWeight': 'lstmRecurrentWeight'}, {'steps': 1},
+ {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmBias',
+ 'recurrentBias': 'lstmRecurrentBias',
+ 'peepholeWeight': 'lstmPeepholeWeight',
+ 'initialHiddenState': 'lstmInitialHiddenState',
+ 'initialCellState': 'lstmInitialCellState',
+ 'returnSequence': true,
+ 'direction': 'forward',
+ 'layout': 'iofg',
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmOutput1', 'lstmOutput2', 'lstmOutput3']
+ }],
+ 'expectedOutputs': {
+ 'lstmOutput1': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmOutput2': {
+ 'data': [1, 4, 9, 36],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmOutput3': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [1, 1, 2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'lstm float32 tensors steps=2 with options.bias, options.recurrentBias, options.activations=[\'relu\', \'relu\', \'relu\'] and options.direction=\'backward\'',
+ 'graph': {
+ 'inputs': {
+ 'lstmInput': {
+ 'data': [1, 2, 2, 1, 3, 4, 1, 2],
+ 'descriptor': {'dimensions': [2, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstm',
+ 'arguments': [
+ {'input': 'lstmInput'}, {'weight': 'lstmWeight'},
+ {'recurrentWeight': 'lstmRecurrentWeight'}, {'steps': 2},
+ {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmBias',
+ 'recurrentBias': 'lstmRecurrentBias',
+ 'direction': 'backward',
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmOutput1', 'lstmOutput2']
+ }],
+ 'expectedOutputs': {
+ 'lstmOutput1': {
+ 'data': [
+ 10.469000816345215, 58.02900695800781, 74.52900695800781,
+ 518.948974609375
+ ],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmOutput2': {
+ 'data': [
+ 5.510000228881836, 20.01000213623047, 19.110000610351564,
+ 75.20999908447266
+ ],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'lstm float32 tensors steps=2 with all options',
+ 'graph': {
+ 'inputs': {
+ 'lstmInput': {
+ 'data': [1, 2, 2, 1, 3, 4, 1, 2],
+ 'descriptor': {'dimensions': [2, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [1, 8, 2], 'dataType': 'float32'}
+ },
+ 'lstmBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [1, 8], 'dataType': 'float32'}
+ },
+ 'lstmPeepholeWeight': {
+ 'data': [0, 0, 0, 0, 0, 0],
+ 'descriptor': {'dimensions': [1, 6], 'dataType': 'float32'}
+ },
+ 'lstmInitialHiddenState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmInitialCellState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstm',
+ 'arguments': [
+ {'input': 'lstmInput'}, {'weight': 'lstmWeight'},
+ {'recurrentWeight': 'lstmRecurrentWeight'}, {'steps': 2},
+ {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmBias',
+ 'recurrentBias': 'lstmRecurrentBias',
+ 'peepholeWeight': 'lstmPeepholeWeight',
+ 'initialHiddenState': 'lstmInitialHiddenState',
+ 'initialCellState': 'lstmInitialCellState',
+ 'returnSequence': true,
+ 'direction': 'backward',
+ 'layout': 'iofg',
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmOutput1', 'lstmOutput2', 'lstmOutput3']
+ }],
+ 'expectedOutputs': {
+ 'lstmOutput1': {
+ 'data': [
+ 10.469000816345215, 58.02900695800781, 74.52900695800781,
+ 518.948974609375
+ ],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmOutput2': {
+ 'data': [
+ 5.510000228881836, 20.01000213623047, 19.110000610351564,
+ 75.20999908447266
+ ],
+ 'descriptor': {'dimensions': [1, 2, 2], 'dataType': 'float32'}
+ },
+ 'lstmOutput3': {
+ 'data': [
+ 10.469000816345215, 58.02900695800781, 74.52900695800781,
+ 518.948974609375, 1, 8, 1, 8
+ ],
+ 'descriptor': {'dimensions': [2, 1, 2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ }
+];
+
+if (navigator.ml) {
+ lstmTests.forEach((test) => {
+ webnn_conformance_test(
+ buildGraphAndCompute, getLstmPrecisionTolerance, test);
+ });
+} else {
+ test(() => assert_implements(navigator.ml, 'missing navigator.ml'));
+}
diff --git a/tests/wpt/tests/webnn/conformance_tests/lstm_cell.https.any.js b/tests/wpt/tests/webnn/conformance_tests/lstm_cell.https.any.js
new file mode 100644
index 00000000000..9bc71a6224c
--- /dev/null
+++ b/tests/wpt/tests/webnn/conformance_tests/lstm_cell.https.any.js
@@ -0,0 +1,401 @@
+// META: title=test WebNN API lstmCell operation
+// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
+// META: script=../resources/utils.js
+// META: timeout=long
+
+'use strict';
+
+// https://www.w3.org/TR/webnn/#api-mlgraphbuilder-lstmcell
+// A single time step of the Long Short-Term Memory [LSTM] recurrent network
+// using a cell state, an input, output, and forget gate to compute the cell
+// state and the hidden state of the next time step that rolls into the output
+// across the temporal sequence of the network.
+//
+// enum MLRecurrentNetworkActivation {
+// "relu",
+// "sigmoid",
+// "tanh"
+// };
+//
+// enum MLLstmWeightLayout {
+// "iofg", // input-output-forget-cell gate ordering
+// "ifgo" // input-forget-cell-output gate ordering
+// };
+//
+// dictionary MLLstmCellOptions : MLOperatorOptions {
+// MLOperand bias;
+// MLOperand recurrentBias;
+// MLOperand peepholeWeight;
+// MLLstmWeightLayout layout = "iofg";
+// sequence<MLRecurrentNetworkActivation> activations;
+// };
+//
+// sequence<MLOperand> lstmCell(MLOperand input,
+// MLOperand weight,
+// MLOperand recurrentWeight,
+// MLOperand hiddenState,
+// MLOperand cellState,
+// [EnforceRange] unsigned long hiddenSize,
+// optional MLLstmCellOptions options = {});
+
+
+const getLstmCellPrecisionTolerance = (graphResources) => {
+ const toleranceValueDict = {float32: 1};
+ const expectedDataType =
+ graphResources
+ .expectedOutputs[Object.keys(graphResources.expectedOutputs)[0]]
+ .descriptor.dataType;
+ return {metricType: 'ULP', value: toleranceValueDict[expectedDataType]};
+};
+
+const lstmCellTests = [
+ {
+ 'name':
+ 'lstmCell float32 tensors with options.bias, options.recurrentBias and options.activations=[\'relu\', \'relu\', \'relu\']',
+ 'graph': {
+ 'inputs': {
+ 'lstmCellInput': {
+ 'data': [1, 2, 2, 1],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [8, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [8, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellHiddenState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellCellState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [8], 'dataType': 'float32'}
+ },
+ 'lstmCellRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [8], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstmCell',
+ 'arguments': [
+ {'input': 'lstmCellInput'}, {'weight': 'lstmCellWeight'},
+ {'recurrentWeight': 'lstmCellRecurrentWeight'},
+ {'hiddenState': 'lstmCellHiddenState'},
+ {'cellState': 'lstmCellCellState'}, {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmCellBias',
+ 'recurrentBias': 'lstmCellRecurrentBias',
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmCellOutput1', 'lstmCellOutput2']
+ }],
+ 'expectedOutputs': {
+ 'lstmCellOutput1': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellOutput2': {
+ 'data': [1, 4, 9, 36],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'lstmCell float32 tensors with options.bias, options.recurrentBias, options.activations=[\'relu\', \'relu\', \'relu\'] and options.peepholeWeight',
+ 'graph': {
+ 'inputs': {
+ 'lstmCellInput': {
+ 'data': [1, 2, 2, 1],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [8, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [8, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellHiddenState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellCellState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [8], 'dataType': 'float32'}
+ },
+ 'lstmCellRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [8], 'dataType': 'float32'}
+ },
+ 'lstmCellPeepholeWeight': {
+ 'data': [0, 0, 0, 0, 0, 0],
+ 'descriptor': {'dimensions': [6], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstmCell',
+ 'arguments': [
+ {'input': 'lstmCellInput'}, {'weight': 'lstmCellWeight'},
+ {'recurrentWeight': 'lstmCellRecurrentWeight'},
+ {'hiddenState': 'lstmCellHiddenState'},
+ {'cellState': 'lstmCellCellState'}, {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmCellBias',
+ 'recurrentBias': 'lstmCellRecurrentBias',
+ 'peepholeWeight': 'lstmCellPeepholeWeight',
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmCellOutput1', 'lstmCellOutput2']
+ }],
+ 'expectedOutputs': {
+ 'lstmCellOutput1': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellOutput2': {
+ 'data': [1, 4, 9, 36],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'lstmCell float32 tensors with options.bias, options.recurrentBias, options.activations=[\'relu\', \'relu\', \'relu\'] and explicit options.layout=\'iofg\'',
+ 'graph': {
+ 'inputs': {
+ 'lstmCellInput': {
+ 'data': [1, 2, 2, 1],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [8, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [8, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellHiddenState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellCellState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [8], 'dataType': 'float32'}
+ },
+ 'lstmCellRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [8], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstmCell',
+ 'arguments': [
+ {'input': 'lstmCellInput'}, {'weight': 'lstmCellWeight'},
+ {'recurrentWeight': 'lstmCellRecurrentWeight'},
+ {'hiddenState': 'lstmCellHiddenState'},
+ {'cellState': 'lstmCellCellState'}, {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmCellBias',
+ 'recurrentBias': 'lstmCellRecurrentBias',
+ 'layout': 'iofg',
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmCellOutput1', 'lstmCellOutput2']
+ }],
+ 'expectedOutputs': {
+ 'lstmCellOutput1': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellOutput2': {
+ 'data': [1, 4, 9, 36],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'lstmCell float32 tensors with options.bias, options.recurrentBias, options.activations=[\'relu\', \'relu\', \'relu\'] and options.layout=\'ifgo\'',
+ 'graph': {
+ 'inputs': {
+ 'lstmCellInput': {
+ 'data': [1, 2, 2, 1],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [8, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [8, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellHiddenState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellCellState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [8], 'dataType': 'float32'}
+ },
+ 'lstmCellRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [8], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstmCell',
+ 'arguments': [
+ {'input': 'lstmCellInput'}, {'weight': 'lstmCellWeight'},
+ {'recurrentWeight': 'lstmCellRecurrentWeight'},
+ {'hiddenState': 'lstmCellHiddenState'},
+ {'cellState': 'lstmCellCellState'}, {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmCellBias',
+ 'recurrentBias': 'lstmCellRecurrentBias',
+ 'layout': 'ifgo',
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmCellOutput1', 'lstmCellOutput2']
+ }],
+ 'expectedOutputs': {
+ 'lstmCellOutput1': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellOutput2': {
+ 'data': [1, 4, 9, 36],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'lstmCell float32 tensors with all options',
+ 'graph': {
+ 'inputs': {
+ 'lstmCellInput': {
+ 'data': [1, 2, 2, 1],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellWeight': {
+ 'data': [1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2, 1, -1, 2, -2],
+ 'descriptor': {'dimensions': [8, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellRecurrentWeight': {
+ 'data': [
+ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+ 0.1, 0.1, 0.1
+ ],
+ 'descriptor': {'dimensions': [8, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellHiddenState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellCellState': {
+ 'data': [0, 0, 0, 0],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [8], 'dataType': 'float32'}
+ },
+ 'lstmCellRecurrentBias': {
+ 'data': [1, 2, 1, 2, 1, 2, 1, 2],
+ 'descriptor': {'dimensions': [8], 'dataType': 'float32'}
+ },
+ 'lstmCellPeepholeWeight': {
+ 'data': [0, 0, 0, 0, 0, 0],
+ 'descriptor': {'dimensions': [6], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'lstmCell',
+ 'arguments': [
+ {'input': 'lstmCellInput'}, {'weight': 'lstmCellWeight'},
+ {'recurrentWeight': 'lstmCellRecurrentWeight'},
+ {'hiddenState': 'lstmCellHiddenState'},
+ {'cellState': 'lstmCellCellState'}, {'hiddenSize': 2}, {
+ 'options': {
+ 'bias': 'lstmCellBias',
+ 'recurrentBias': 'lstmCellRecurrentBias',
+ 'peepholeWeight': 'lstmCellPeepholeWeight',
+ 'layout': 'iofg',
+ 'activations': ['relu', 'relu', 'relu']
+ }
+ }
+ ],
+ 'outputs': ['lstmCellOutput1', 'lstmCellOutput2']
+ }],
+ 'expectedOutputs': {
+ 'lstmCellOutput1': {
+ 'data': [1, 8, 27, 216],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ },
+ 'lstmCellOutput2': {
+ 'data': [1, 4, 9, 36],
+ 'descriptor': {'dimensions': [2, 2], 'dataType': 'float32'}
+ }
+ }
+ }
+ }
+];
+
+if (navigator.ml) {
+ lstmCellTests.forEach((test) => {
+ webnn_conformance_test(
+ buildGraphAndCompute, getLstmCellPrecisionTolerance, test);
+ });
+} else {
+ test(() => assert_implements(navigator.ml, 'missing navigator.ml'));
+}
diff --git a/tests/wpt/tests/webnn/conformance_tests/parallel-dispatch.https.any.js b/tests/wpt/tests/webnn/conformance_tests/parallel-dispatch.https.any.js
new file mode 100644
index 00000000000..2ba1f6cf442
--- /dev/null
+++ b/tests/wpt/tests/webnn/conformance_tests/parallel-dispatch.https.any.js
@@ -0,0 +1,331 @@
+// META: title=test parallel WebNN API dispatch calls
+// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
+// META: script=../resources/utils.js
+// META: timeout=long
+
+'use strict';
+
+// https://www.w3.org/TR/webnn/#api-mlcontext-dispatch
+
+let mlContext;
+
+
+// Skip tests if WebNN is unimplemented.
+promise_setup(async () => {
+ assert_implements(navigator.ml, 'missing navigator.ml');
+ mlContext = await navigator.ml.createContext(contextOptions);
+});
+
+function buildMulGraph(context, operandDescriptor, multiplier) {
+ // Construct a simple graph: A = B * `multiplier`.
+ const builder = new MLGraphBuilder(context);
+ const inputOperand = builder.input('input', operandDescriptor);
+ const constantOperand =
+ builder.constant(operandDescriptor, Float32Array.from([multiplier]));
+ const outputOperand = builder.mul(inputOperand, constantOperand);
+ return builder.build({'output': outputOperand});
+}
+
+promise_test(async () => {
+ const operandDescriptor = {dataType: 'float32', dimensions: [1]};
+
+ const [mlGraph, inputBuffer1, inputBuffer2, outputBuffer] =
+ await Promise.all([
+ buildMulGraph(mlContext, operandDescriptor, 2),
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor)
+ ]);
+
+ mlContext.writeBuffer(inputBuffer1, Float32Array.from([1]));
+ mlContext.writeBuffer(inputBuffer2, Float32Array.from([10]));
+
+ let readBufferPromises = [];
+
+ mlContext.dispatch(
+ mlGraph, {'input': inputBuffer1}, {'output': outputBuffer});
+
+ // Don't await buffer readback before dispatching again.
+ readBufferPromises.push(mlContext.readBuffer(outputBuffer));
+
+ mlContext.dispatch(
+ mlGraph, {'input': inputBuffer2}, {'output': outputBuffer});
+
+ readBufferPromises.push(mlContext.readBuffer(outputBuffer));
+
+ const actualOutputs =
+ await Promise.all(readBufferPromises.map(async (promise) => {
+ const output = await promise;
+ return new Float32Array(output)[0];
+ }));
+
+ assert_array_equals(actualOutputs, [2, 20]);
+}, 'dispatch queues behind readBuffer');
+
+promise_test(async () => {
+ const operandDescriptor = {dataType: 'float32', dimensions: [1]};
+ const mlGraph = await buildMulGraph(mlContext, operandDescriptor, 3);
+
+ // write/dispatch/read, write/dispatch/read, ...
+ const testInputs = [1, 2, 3, 4];
+ const actualOutputs = await Promise.all(testInputs.map(async (input) => {
+ const [inputBuffer, outputBuffer] = await Promise.all([
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor)
+ ]);
+
+ mlContext.writeBuffer(inputBuffer, Float32Array.from([input]));
+
+ mlContext.dispatch(
+ mlGraph, {'input': inputBuffer}, {'output': outputBuffer});
+
+ const output = await mlContext.readBuffer(outputBuffer);
+ return new Float32Array(output)[0];
+ }));
+
+ assert_array_equals(actualOutputs, [3, 6, 9, 12]);
+}, 'same graph: write/dispatch/read, write/dispatch/read, ...');
+
+promise_test(async () => {
+ const operandDescriptor = {dataType: 'float32', dimensions: [1]};
+ const mlGraph = await buildMulGraph(mlContext, operandDescriptor, 10);
+
+ // write/write...
+ const testInputs = [1, 2, 3, 4];
+ const inputAndOutputBuffers =
+ await Promise.all(testInputs.map(async (testInput) => {
+ const [inputBuffer, outputBuffer] = await Promise.all([
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor)
+ ]);
+
+ mlContext.writeBuffer(inputBuffer, Float32Array.from([testInput]));
+ return [inputBuffer, outputBuffer];
+ }));
+
+ // dispatch/read, dispatch/read, ...
+ let readBufferPromises = [];
+ for (let i = 0; i < testInputs.length; i++) {
+ mlContext.dispatch(
+ mlGraph, {'input': inputAndOutputBuffers[i][0]},
+ {'output': inputAndOutputBuffers[i][1]});
+ readBufferPromises.push(mlContext.readBuffer(inputAndOutputBuffers[i][1]));
+ };
+
+ const actualOutputs =
+ await Promise.all(readBufferPromises.map(async (promise) => {
+ const output = await promise;
+ return new Float32Array(output)[0];
+ }));
+
+ assert_array_equals(actualOutputs, [10, 20, 30, 40]);
+}, 'same graph: write/write..., dispatch/read, dispatch/read, ...');
+
+promise_test(async () => {
+ const operandDescriptor = {dataType: 'float32', dimensions: [1]};
+ const mlGraph = await buildMulGraph(mlContext, operandDescriptor, 9);
+
+ // write/write...
+ const testInputs = [1, 2, 3, 4];
+ const inputAndOutputBuffers =
+ await Promise.all(testInputs.map(async (testInput) => {
+ const [inputBuffer, outputBuffer] = await Promise.all([
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor)
+ ]);
+
+ mlContext.writeBuffer(inputBuffer, Float32Array.from([testInput]));
+ return [inputBuffer, outputBuffer];
+ }));
+
+ // dispatch/dispatch...
+ for (let i = 0; i < testInputs.length; i++) {
+ mlContext.dispatch(
+ mlGraph, {'input': inputAndOutputBuffers[i][0]},
+ {'output': inputAndOutputBuffers[i][1]});
+ }
+
+ // read/read...
+ const actualOutputs = await Promise.all(
+ inputAndOutputBuffers.map(async (inputAndOutputBuffer) => {
+ const output = await mlContext.readBuffer(inputAndOutputBuffer[1]);
+ return new Float32Array(output)[0];
+ }));
+
+ assert_array_equals(actualOutputs, [9, 18, 27, 36]);
+}, 'same graph: write/write..., dispatch/dispatch..., read/read...');
+
+promise_test(async () => {
+ const operandDescriptor = {dataType: 'float32', dimensions: [1]};
+ const mlGraph = await buildMulGraph(mlContext, operandDescriptor, 2);
+
+ const buffers = await Promise.all([
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor)
+ ]);
+
+ mlContext.writeBuffer(buffers[0], Float32Array.from([1]));
+
+ // dispatch/dispatch...
+ for (let i = 0; i < buffers.length - 1; i++) {
+ mlContext.dispatch(
+ mlGraph, {'input': buffers[i]}, {'output': buffers[i + 1]});
+ }
+
+ // read/read...
+ const actualOutputs = await Promise.all(buffers.map(async (buffer) => {
+ const output = await mlContext.readBuffer(buffer);
+ return new Float32Array(output)[0];
+ }));
+
+ assert_array_equals(actualOutputs, [1, 2, 4, 8, 16]);
+}, 'same graph serial inputs: dispatch/dispatch..., read/read...');
+
+promise_test(async () => {
+ const operandDescriptor = {dataType: 'float32', dimensions: [1]};
+
+ // write/write...
+ const testInputs = [1, 2, 3, 4];
+ const graphsAndBuffers =
+ await Promise.all(testInputs.map(async (testInput) => {
+ const [graph, inputBuffer, outputBuffer] = await Promise.all([
+ buildMulGraph(mlContext, operandDescriptor, testInput),
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor)
+ ]);
+
+ mlContext.writeBuffer(inputBuffer, Float32Array.from([testInput]));
+ return [graph, inputBuffer, outputBuffer];
+ }));
+
+ // dispatch/read, dispatch/read, ...
+ let readBufferPromises = [];
+ for (let i = 0; i < graphsAndBuffers.length; i++) {
+ mlContext.dispatch(
+ graphsAndBuffers[i][0], {'input': graphsAndBuffers[i][1]},
+ {'output': graphsAndBuffers[i][2]});
+ readBufferPromises.push(mlContext.readBuffer(graphsAndBuffers[i][2]));
+ };
+
+ const actualOutputs =
+ await Promise.all(readBufferPromises.map(async (promise) => {
+ const output = await promise;
+ return new Float32Array(output)[0];
+ }));
+
+ assert_array_equals(actualOutputs, [1, 4, 9, 16]);
+}, 'different graphs: write/write..., dispatch/read, dispatch/read, ...');
+
+promise_test(async () => {
+ const operandDescriptor = {dataType: 'float32', dimensions: [1]};
+
+ // write/write...
+ const testInputs = [1, 2, 3, 4];
+ const graphsAndBuffers =
+ await Promise.all(testInputs.map(async (testInput) => {
+ const [graph, inputBuffer, outputBuffer] = await Promise.all([
+ buildMulGraph(mlContext, operandDescriptor, testInput * 2),
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor)
+ ]);
+
+ mlContext.writeBuffer(inputBuffer, Float32Array.from([testInput]));
+ return [graph, inputBuffer, outputBuffer];
+ }));
+
+ // dispatch/dispatch...
+ for (let i = 0; i < graphsAndBuffers.length; i++) {
+ mlContext.dispatch(
+ graphsAndBuffers[i][0], {'input': graphsAndBuffers[i][1]},
+ {'output': graphsAndBuffers[i][2]});
+ };
+
+ // read/read...
+ const actualOutputs =
+ await Promise.all(graphsAndBuffers.map(async (graphAndBuffers) => {
+ const output = await mlContext.readBuffer(graphAndBuffers[2]);
+ return new Float32Array(output)[0];
+ }));
+
+ assert_array_equals(actualOutputs, [2, 8, 18, 32]);
+}, 'different graphs: write/write..., dispatch/dispatch..., read/read...');
+
+promise_test(async () => {
+ const operandDescriptor = {dataType: 'float32', dimensions: [1]};
+
+ const graphs = await Promise.all([3, 2].map(async (multiplier) => {
+ return buildMulGraph(mlContext, operandDescriptor, multiplier);
+ }));
+
+ const buffers = await Promise.all([
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor)
+ ]);
+
+ mlContext.writeBuffer(buffers[0], Float32Array.from([1]));
+
+ // dispatch/dispatch...
+ for (let i = 0; i < buffers.length - 1; i++) {
+ mlContext.dispatch(
+ graphs[i % 2], {'input': buffers[i]}, {'output': buffers[i + 1]});
+ }
+
+ // read/read...
+ const actualOutputs = await Promise.all(buffers.map(async (buffer) => {
+ const output = await mlContext.readBuffer(buffer);
+ return new Float32Array(output)[0];
+ }));
+
+ assert_array_equals(actualOutputs, [1, 3, 6, 18, 36]);
+}, 'different graphs serial inputs: dispatch/dispatch..., read/read...');
+
+promise_test(async () => {
+ const operandDescriptor = {dataType: 'float32', dimensions: [1]};
+
+ const graphs = await Promise.all([2, 3].map(async (multiplier) => {
+ return buildMulGraph(mlContext, operandDescriptor, multiplier);
+ }));
+
+ const buffers = await Promise.all([
+ mlContext.createBuffer(operandDescriptor),
+ mlContext.createBuffer(operandDescriptor)
+ ]);
+
+ // Write to the buffer which will be initially used as an input.
+ mlContext.writeBuffer(buffers[0], Float32Array.from([1]));
+
+ // Double the value in one buffer, sticking the result in the other buffer.
+ //
+ // buffers[0] buffers[1]
+ // 1
+ // >----> 2
+ // 6 <----<
+ // >----> 12
+ // 36 <----<
+ // >----> 72
+ // 216 <----<
+
+ // dispatch/dispatch...
+ for (let i = 0; i < 6; i++) {
+ mlContext.dispatch(
+ graphs[i % 2], {'input': buffers[i % 2]},
+ {'output': buffers[(i + 1) % 2]});
+ };
+
+ // read/read...
+ const actualOutputs = await Promise.all(buffers.map(async (buffer) => {
+ const output = await mlContext.readBuffer(buffer);
+ return new Float32Array(output)[0];
+ }));
+
+ assert_array_equals(actualOutputs, [216, 72]);
+}, 'different graphs using the same buffers');
diff --git a/tests/wpt/tests/webnn/conformance_tests/relu.https.any.js b/tests/wpt/tests/webnn/conformance_tests/relu.https.any.js
index fb4726b4b3e..45388383fff 100644
--- a/tests/wpt/tests/webnn/conformance_tests/relu.https.any.js
+++ b/tests/wpt/tests/webnn/conformance_tests/relu.https.any.js
@@ -80,6 +80,30 @@ const reluTests = [
}
},
{
+ 'name': 'relu float32 0D tensor',
+ 'graph': {
+ 'inputs': {
+ 'reluInput': {
+ 'data': [79.04724884033203],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'relu',
+ 'arguments': [{'input': 'reluInput'}],
+ 'outputs': 'reluOutput'
+ }],
+ 'expectedOutputs': {
+ 'reluOutput': {
+ 'data': [
+ 79.04724884033203,
+ ],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
'name': 'relu float32 1D tensor',
'graph': {
'inputs': {
diff --git a/tests/wpt/tests/webnn/conformance_tests/sigmoid.https.any.js b/tests/wpt/tests/webnn/conformance_tests/sigmoid.https.any.js
index 1aba9bbb10b..5bcdb39969c 100644
--- a/tests/wpt/tests/webnn/conformance_tests/sigmoid.https.any.js
+++ b/tests/wpt/tests/webnn/conformance_tests/sigmoid.https.any.js
@@ -66,6 +66,28 @@ const sigmoidTests = [
}
},
{
+ 'name': 'sigmoid float32 0D tensor',
+ 'graph': {
+ 'inputs': {
+ 'sigmoidInput': {
+ 'data': [-0.37699514627456665],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'sigmoid',
+ 'arguments': [{'input': 'sigmoidInput'}],
+ 'outputs': 'sigmoidOutput'
+ }],
+ 'expectedOutputs': {
+ 'sigmoidOutput': {
+ 'data': [0.4068518280982971],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
'name': 'sigmoid float32 1D tensor',
'graph': {
'inputs': {
diff --git a/tests/wpt/tests/webnn/conformance_tests/softplus.https.any.js b/tests/wpt/tests/webnn/conformance_tests/softplus.https.any.js
index 9c6698e6d05..2b45700493e 100644
--- a/tests/wpt/tests/webnn/conformance_tests/softplus.https.any.js
+++ b/tests/wpt/tests/webnn/conformance_tests/softplus.https.any.js
@@ -65,6 +65,28 @@ const softplusTests = [
}
},
{
+ 'name': 'softplus float32 0D tensor',
+ 'graph': {
+ 'inputs': {
+ 'softplusInput': {
+ 'data': [5.626614570617676],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'softplus',
+ 'arguments': [{'input': 'softplusInput'}],
+ 'outputs': 'softplusOutput'
+ }],
+ 'expectedOutputs': {
+ 'softplusOutput': {
+ 'data': [5.630208969116211],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
'name': 'softplus float32 1D tensor',
'graph': {
'inputs': {
diff --git a/tests/wpt/tests/webnn/conformance_tests/softsign.https.any.js b/tests/wpt/tests/webnn/conformance_tests/softsign.https.any.js
index b146953bb61..06560af48a5 100644
--- a/tests/wpt/tests/webnn/conformance_tests/softsign.https.any.js
+++ b/tests/wpt/tests/webnn/conformance_tests/softsign.https.any.js
@@ -65,6 +65,50 @@ const softsignTests = [
}
},
{
+ 'name': 'softsign positive float32 0D tensor',
+ 'graph': {
+ 'inputs': {
+ 'softsignInput': {
+ 'data': [1.5834133625030518],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'softsign',
+ 'arguments': [{'input': 'softsignInput'}],
+ 'outputs': 'softsignOutput'
+ }],
+ 'expectedOutputs': {
+ 'softsignOutput': {
+ 'data': [0.6129152178764343],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'softsign negative float32 0D tensor',
+ 'graph': {
+ 'inputs': {
+ 'softsignInput': {
+ 'data': [-2.597844123840332],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'softsign',
+ 'arguments': [{'input': 'softsignInput'}],
+ 'outputs': 'softsignOutput'
+ }],
+ 'expectedOutputs': {
+ 'softsignOutput': {
+ 'data': [-0.7220557928085327],
+ 'descriptor': {'dimensions': [], 'dataType': 'float32'}
+ }
+ }
+ }
+ },
+ {
'name': 'softsign positive float32 1D tensor',
'graph': {
'inputs': {
diff --git a/tests/wpt/tests/webnn/resources/utils_validation.js b/tests/wpt/tests/webnn/resources/utils_validation.js
index da5786ca86b..856eea6cb3f 100644
--- a/tests/wpt/tests/webnn/resources/utils_validation.js
+++ b/tests/wpt/tests/webnn/resources/utils_validation.js
@@ -203,10 +203,22 @@ promise_setup(async () => {
if (navigator.ml === undefined) {
return;
}
- context = await navigator.ml.createContext();
+ const deviceType = location.search.substring(1);
+ context = await navigator.ml.createContext({deviceType: deviceType});
}, {explicit_timeout: true});
-function validateTwoInputsBroadcastable(operationName) {
+function assert_throws_with_label(func, regrexp) {
+ try {
+ func.call(this);
+ assert_true(false, 'Graph builder method unexpectedly succeeded');
+ } catch (e) {
+ assert_equals(e.name, 'TypeError');
+ const error_message = e.message;
+ assert_not_equals(error_message.match(regrexp), null);
+ }
+}
+
+function validateTwoInputsBroadcastable(operationName, label) {
if (navigator.ml === undefined) {
return;
}
@@ -227,10 +239,12 @@ function validateTwoInputsBroadcastable(operationName) {
for (let unbroadcastableDimensions of unbroadcastableDimensionsArray) {
const inputB = builder.input(`inputB${++inputBIndex}`, {dataType, dimensions: unbroadcastableDimensions});
assert_equals(typeof builder[operationName], 'function');
- assert_throws_js(
- TypeError, () => builder[operationName](inputA, inputB));
- assert_throws_js(
- TypeError, () => builder[operationName](inputB, inputA));
+ const options = {label};
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder[operationName](inputA, inputB, options), regrexp);
+ assert_throws_with_label(
+ () => builder[operationName](inputB, inputA, options), regrexp);
}
}
}
@@ -238,7 +252,7 @@ function validateTwoInputsBroadcastable(operationName) {
}, `[${operationName}] TypeError is expected if two inputs aren't broadcastable`);
}
-function validateTwoInputsOfSameDataType(operationName) {
+function validateTwoInputsOfSameDataType(operationName, label) {
if (navigator.ml === undefined) {
return;
}
@@ -274,9 +288,12 @@ function validateTwoInputsOfSameDataType(operationName) {
}
if (dataType !== dataTypeB) {
const inputB = builder.input(`inputB${++inputBIndex}`, {dataType: dataTypeB, dimensions});
+ const options = {label};
+ const regrexp = new RegExp('\\[' + label + '\\]');
assert_equals(typeof builder[subOperationName], 'function');
- assert_throws_js(
- TypeError, () => builder[subOperationName](inputA, inputB));
+ assert_throws_with_label(
+ () => builder[subOperationName](inputA, inputB, options),
+ regrexp);
}
}
}
@@ -408,7 +425,7 @@ function validateOptionsAxes(operationName) {
* @param {Array} supportedDataTypes - Test building with these data types
* succeeds and test building with all other data types fails
*/
-function validateUnaryOperation(operationName, supportedDataTypes) {
+function validateUnaryOperation(operationName, supportedDataTypes, label) {
promise_test(async t => {
const builder = new MLGraphBuilder(context);
for (let dataType of supportedDataTypes) {
@@ -444,7 +461,10 @@ function validateUnaryOperation(operationName, supportedDataTypes) {
for (let dimensions of allWebNNDimensionsArray) {
const input = builder.input(`input`, {dataType, dimensions});
assert_equals(typeof builder[operationName], 'function');
- assert_throws_js(TypeError, () => builder[operationName](input));
+ const options = {label};
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder[operationName](input, options), regrexp);
}
}
}, `[${operationName}] Throw if the dataType is not supported for an unary operator.`);
@@ -454,7 +474,7 @@ function validateUnaryOperation(operationName, supportedDataTypes) {
* Validate a single input operation
* @param {String} operationName - An operation name
*/
-function validateSingleInputOperation(operationName) {
+function validateSingleInputOperation(operationName, label) {
promise_test(async t => {
const builder = new MLGraphBuilder(context);
const supportedDataTypes =
@@ -489,7 +509,10 @@ function validateSingleInputOperation(operationName) {
for (let dimensions of allWebNNDimensionsArray) {
const input = builder.input(`input`, {dataType, dimensions});
assert_equals(typeof builder[operationName], 'function');
- assert_throws_js(TypeError, () => builder[operationName](input));
+ const options = {label};
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder[operationName](input, options), regrexp);
}
}
}, `[${operationName}] Throw if the data type is not supported for the operator.`);
diff --git a/tests/wpt/tests/webnn/validation_tests/argMinMax.https.any.js b/tests/wpt/tests/webnn/validation_tests/argMinMax.https.any.js
index 5d6806e5f4c..3d3f7148715 100644
--- a/tests/wpt/tests/webnn/validation_tests/argMinMax.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/argMinMax.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API argMin/Max operations
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -86,14 +89,9 @@ function runTests(operatorName, tests) {
assert_equals(output.dataType(), 'int32');
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- try {
- builder[operatorName](input, axis, test.options);
- } catch (e) {
- assert_equals(e.name, 'TypeError');
- const error_message = e.message;
- const regrexp = /\[arg_min_max_1_\!\]/;
- assert_not_equals(error_message.match(regrexp), null);
- }
+ const regrexp = /\[arg_min_max_1_\!\]/;
+ assert_throws_with_label(
+ () => builder[operatorName](input, axis, test.options), regrexp);
}
}, test.name.replace('[argMin/Max]', `[${operatorName}]`));
});
diff --git a/tests/wpt/tests/webnn/validation_tests/batchNormalization.https.any.js b/tests/wpt/tests/webnn/validation_tests/batchNormalization.https.any.js
index 2fec37dcbf5..6a884de3ee3 100644
--- a/tests/wpt/tests/webnn/validation_tests/batchNormalization.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/batchNormalization.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API batchNormalization operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -280,13 +283,10 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- try {
- builder.batchNormalization(input, mean, variance, test.options);
- } catch (e) {
- assert_equals(e.name, 'TypeError');
- const error_message = e.message;
- const regrexp = /\[batchNormalization_\?_123\]/;
- assert_not_equals(error_message.match(regrexp), null);
- }
+ const regrexp = /\[batchNormalization_\?_123\]/;
+ assert_throws_with_label(
+ () =>
+ builder.batchNormalization(input, mean, variance, test.options),
+ regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/build-more-than-once.https.any.js b/tests/wpt/tests/webnn/validation_tests/build-more-than-once.https.any.js
index d0d6800f682..c4cbcae8f32 100644
--- a/tests/wpt/tests/webnn/validation_tests/build-more-than-once.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/build-more-than-once.https.any.js
@@ -1,5 +1,8 @@
// META: title=ensure MLMLGraphBuilder may build at most one MLGraph
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
const kExampleInputDescriptor = {
diff --git a/tests/wpt/tests/webnn/validation_tests/cast.https.any.js b/tests/wpt/tests/webnn/validation_tests/cast.https.any.js
index f616203a88b..b20d8186900 100644
--- a/tests/wpt/tests/webnn/validation_tests/cast.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/cast.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API cast operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
diff --git a/tests/wpt/tests/webnn/validation_tests/clamp.https.any.js b/tests/wpt/tests/webnn/validation_tests/clamp.https.any.js
index 5a347bd230e..8302961e2c4 100644
--- a/tests/wpt/tests/webnn/validation_tests/clamp.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/clamp.https.any.js
@@ -1,12 +1,17 @@
// META: title=validation tests for WebNN API clamp operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
validateInputFromAnotherBuilder('clamp');
-validateUnaryOperation('clamp', allWebNNOperandDataTypes);
+const label = '123_clamp';
+
+validateUnaryOperation('clamp', allWebNNOperandDataTypes, label);
promise_test(async t => {
const builder = new MLGraphBuilder(context);
@@ -42,7 +47,6 @@ promise_test(async t => {
assert_array_equals(output.shape(), [1, 2, 3, 4]);
}, '[clamp] Build with options.minValue == options.maxValue');
-const label = '123_clamp';
promise_test(async t => {
const builder = new MLGraphBuilder(context);
const options = {
@@ -59,14 +63,8 @@ promise_test(async t => {
}
const input =
builder.input('input', {dataType: 'uint8', dimensions: [1, 2, 3]});
- try {
- builder.clamp(input, options);
- } catch (e) {
- assert_equals(e.name, 'TypeError');
- const error_message = e.message;
- const regrexp = new RegExp('\\[' + label + '\\]');
- assert_not_equals(error_message.match(regrexp), null);
- }
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(() => builder.clamp(input, options), regrexp);
}, '[clamp] Throw if options.minValue > options.maxValue');
// To be removed once infinite `minValue` is allowed. Tracked in
diff --git a/tests/wpt/tests/webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.js b/tests/wpt/tests/webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.js
index f7210e55d45..65bd805c31f 100644
--- a/tests/wpt/tests/webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/compute-multiple-arraybufferviews-sharing-same-arraybuffer.https.any.js
@@ -1,5 +1,8 @@
// META: title=ensure WebNN MLContext.compute() rejecting detached buffers
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
// These tests are used to reproduce the Chromium issue:
diff --git a/tests/wpt/tests/webnn/validation_tests/concat.https.any.js b/tests/wpt/tests/webnn/validation_tests/concat.https.any.js
index 6fe22c02bcd..4902caf6619 100644
--- a/tests/wpt/tests/webnn/validation_tests/concat.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/concat.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API concat operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -107,14 +110,9 @@ tests.forEach(
assert_array_equals(output.shape(), test.output.dimensions);
} else {
const options = {label};
- try {
- builder.concat(inputs, test.axis, options);
- } catch (e) {
- assert_equals(e.name, 'TypeError');
- const error_message = e.message;
- const regrexp = new RegExp('\\[' + label + '\\]');
- assert_not_equals(error_message.match(regrexp), null);
- }
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.concat(inputs, test.axis, options), regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/constant-changed-buffer.https.any.js b/tests/wpt/tests/webnn/validation_tests/constant-changed-buffer.https.any.js
index a6a24a06865..1a516c0b1d4 100644
--- a/tests/wpt/tests/webnn/validation_tests/constant-changed-buffer.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/constant-changed-buffer.https.any.js
@@ -1,5 +1,8 @@
// META: title=ensure MLGraphBuilder.constant() handles buffers which change
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
promise_test(async t => {
diff --git a/tests/wpt/tests/webnn/validation_tests/constant.https.any.js b/tests/wpt/tests/webnn/validation_tests/constant.https.any.js
index 136f8bd764e..d101d92fb80 100644
--- a/tests/wpt/tests/webnn/validation_tests/constant.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/constant.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API constant interface
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
diff --git a/tests/wpt/tests/webnn/validation_tests/conv2d.https.any.js b/tests/wpt/tests/webnn/validation_tests/conv2d.https.any.js
index cf8ed9a0d8f..553de7af966 100644
--- a/tests/wpt/tests/webnn/validation_tests/conv2d.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/conv2d.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API conv2d operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -555,13 +558,8 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- try {
- builder.conv2d(input, filter, test.options);
- } catch (e) {
- assert_equals(e.name, 'TypeError');
- const error_message = e.message;
- const regrexp = /\[conv_2d_\*\]/;
- assert_not_equals(error_message.match(regrexp), null);
- }
+ const regrexp = /\[conv_2d_\*\]/;
+ assert_throws_with_label(
+ () => builder.conv2d(input, filter, test.options), regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/convTranspose2d.https.any.js b/tests/wpt/tests/webnn/validation_tests/convTranspose2d.https.any.js
index 6028d51c6c8..b9704c208cc 100644
--- a/tests/wpt/tests/webnn/validation_tests/convTranspose2d.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/convTranspose2d.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API convTranspose2d operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -570,14 +573,9 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- try {
- builder.convTranspose2d(input, filter, test.options);
- } catch (e) {
- assert_equals(e.name, 'TypeError');
- const error_message = e.message;
- const regrexp = new RegExp('\\[' + label + '\\]');
- ;
- assert_not_equals(error_message.match(regrexp), null);
- }
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.convTranspose2d(input, filter, test.options),
+ regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/createContext.https.any.js b/tests/wpt/tests/webnn/validation_tests/createContext.https.any.js
index 52b99ff337d..0357c88335f 100644
--- a/tests/wpt/tests/webnn/validation_tests/createContext.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/createContext.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API createContext()
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
diff --git a/tests/wpt/tests/webnn/validation_tests/destroyContext.https.any.js b/tests/wpt/tests/webnn/validation_tests/destroyContext.https.any.js
index 9aa3dbf6753..ba0661ae6f8 100644
--- a/tests/wpt/tests/webnn/validation_tests/destroyContext.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/destroyContext.https.any.js
@@ -1,24 +1,36 @@
// META: timeout=long
// META: title=validation tests for WebNN API MLContext::destroy()
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
'use strict';
+let contextOptions;
+
+promise_setup(async () => {
+ if (navigator.ml === undefined) {
+ return;
+ }
+ contextOptions = {deviceType: location.search.substring(1)};
+}, {explicit_timeout: true});
+
promise_test(async t => {
- const context = await navigator.ml.createContext();
+ const context = await navigator.ml.createContext(contextOptions);
context.destroy();
await context.lost;
}, 'Context will be lost by destroyed.');
promise_test(async t => {
- const context = await navigator.ml.createContext();
+ const context = await navigator.ml.createContext(contextOptions);
context.destroy();
context.destroy();
await context.lost;
}, 'Context can be destroyed twice.');
promise_test(async t => {
- const context = await navigator.ml.createContext();
+ const context = await navigator.ml.createContext(contextOptions);
const builder = new MLGraphBuilder(context);
context.destroy();
assert_throws_dom('InvalidStateError', () => {
@@ -28,7 +40,7 @@ promise_test(async t => {
}, 'Destroyed context can not build operator.');
promise_test(async t => {
- const context = await navigator.ml.createContext();
+ const context = await navigator.ml.createContext(contextOptions);
context.destroy();
assert_throws_dom('InvalidStateError', () => {
new MLGraphBuilder(context);
@@ -36,7 +48,7 @@ promise_test(async t => {
}, 'Destroyed context can not create graph builder.');
promise_test(async t => {
- const context = await navigator.ml.createContext();
+ const context = await navigator.ml.createContext(contextOptions);
const builder = new MLGraphBuilder(context);
const operandType = {dataType: 'float32', dimensions: [1]};
const input_operand = builder.input('input', operandType);
@@ -49,7 +61,7 @@ promise_test(async t => {
}, 'Destroyed context can not build graph.');
promise_test(async t => {
- const context = await navigator.ml.createContext();
+ const context = await navigator.ml.createContext(contextOptions);
const builder = new MLGraphBuilder(context);
const operandType = {dataType: 'float32', dimensions: [1]};
const input_operand = builder.input('input', operandType);
@@ -65,7 +77,7 @@ promise_test(async t => {
}, 'Destroyed context can not compute.');
promise_test(async t => {
- const context = await navigator.ml.createContext();
+ const context = await navigator.ml.createContext(contextOptions);
const builder = new MLGraphBuilder(context);
const operandType = {dataType: 'float32', dimensions: [1]};
const lhsOperand = builder.input('lhs', operandType);
@@ -89,7 +101,7 @@ promise_test(async t => {
}, 'Destroyed context can not dispatch.');
promise_test(async t => {
- const context = await navigator.ml.createContext();
+ const context = await navigator.ml.createContext(contextOptions);
const builder = new MLGraphBuilder(context);
const operandType = {dataType: 'float32', dimensions: [1]};
const lhsOperand = builder.input('lhs', operandType);
@@ -111,7 +123,7 @@ promise_test(async t => {
}, 'Executing dispatch() before context destroyed is OK.');
promise_test(async t => {
- const context = await navigator.ml.createContext();
+ const context = await navigator.ml.createContext(contextOptions);
context.destroy();
promise_rejects_dom(
t, 'InvalidStateError',
@@ -119,7 +131,7 @@ promise_test(async t => {
}, 'Destroyed context can not create buffer.');
promise_test(async t => {
- const context = await navigator.ml.createContext();
+ const context = await navigator.ml.createContext(contextOptions);
const buffer =
await context.createBuffer({dataType: 'float32', dimensions: [1]});
context.destroy();
@@ -127,7 +139,7 @@ promise_test(async t => {
}, 'Destroyed context can not read buffer.');
promise_test(async t => {
- const context = await navigator.ml.createContext();
+ const context = await navigator.ml.createContext(contextOptions);
const buffer =
await context.createBuffer({dataType: 'float32', dimensions: [1]});
let promise = context.readBuffer(buffer);
@@ -136,9 +148,9 @@ promise_test(async t => {
}, 'Pending promise of readbuffer() will be rejected immediately when context is destroyed.');
promise_test(async t => {
- const context = await navigator.ml.createContext();
+ const context = await navigator.ml.createContext(contextOptions);
// Destroying another context doesn't impact the first context.
- const another_context = await navigator.ml.createContext();
+ const another_context = await navigator.ml.createContext(contextOptions);
another_context.destroy();
const buffer =
await context.createBuffer({dataType: 'float32', dimensions: [1]});
diff --git a/tests/wpt/tests/webnn/validation_tests/elementwise-binary.https.any.js b/tests/wpt/tests/webnn/validation_tests/elementwise-binary.https.any.js
index 369191dd7fd..fc0616f569b 100644
--- a/tests/wpt/tests/webnn/validation_tests/elementwise-binary.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/elementwise-binary.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API element-wise binary operations
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -14,7 +17,8 @@ const kElementwiseBinaryOperators = [
'pow',
];
-
+const label = 'elementwise_binary_op';
+const regrexp = new RegExp('\\[' + label + '\\]');
const tests = [
{
name: '[binary] Test bidirectionally broadcastable dimensions.',
@@ -82,15 +86,17 @@ function runElementWiseBinaryTests(operatorName, tests) {
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(TypeError, () => builder[operatorName](a, b));
+ const options = {label};
+ assert_throws_with_label(
+ () => builder[operatorName](a, b, options), regrexp);
}
}, test.name.replace('[binary]', `[${operatorName}]`));
});
}
kElementwiseBinaryOperators.forEach((operatorName) => {
- validateTwoInputsOfSameDataType(operatorName);
- validateTwoInputsBroadcastable(operatorName);
+ validateTwoInputsOfSameDataType(operatorName, label);
+ validateTwoInputsBroadcastable(operatorName, label);
validateTwoInputsFromMultipleBuilders(operatorName);
runElementWiseBinaryTests(operatorName, tests);
});
diff --git a/tests/wpt/tests/webnn/validation_tests/elementwise-logical.https.any.js b/tests/wpt/tests/webnn/validation_tests/elementwise-logical.https.any.js
index e5e5b5a5a81..bada9e7648b 100644
--- a/tests/wpt/tests/webnn/validation_tests/elementwise-logical.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/elementwise-logical.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API element-wise logical operations
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -12,10 +15,12 @@ const kElementwiseLogicalBinaryOperators = [
'lesserOrEqual',
];
+const label = 'elementwise_logic_op';
+
kElementwiseLogicalBinaryOperators.forEach((operatorName) => {
- validateTwoInputsOfSameDataType(operatorName);
+ validateTwoInputsOfSameDataType(operatorName, label);
validateTwoInputsFromMultipleBuilders(operatorName);
- validateTwoInputsBroadcastable(operatorName);
+ validateTwoInputsBroadcastable(operatorName, label);
});
// The `logicalNot()` operator is unary.
diff --git a/tests/wpt/tests/webnn/validation_tests/elementwise-unary.https.any.js b/tests/wpt/tests/webnn/validation_tests/elementwise-unary.https.any.js
index 9380c766960..5de8cb19c9e 100644
--- a/tests/wpt/tests/webnn/validation_tests/elementwise-unary.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/elementwise-unary.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API element-wise unary operations
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -13,6 +16,7 @@ kElementwiseUnaryOperators.forEach((operatorName) => {
validateInputFromAnotherBuilder(operatorName);
});
+const label = 'elementwise_unary_op';
kElementwiseUnaryOperators.forEach((operatorName) => {
- validateSingleInputOperation(operatorName);
+ validateSingleInputOperation(operatorName, label);
});
diff --git a/tests/wpt/tests/webnn/validation_tests/elu.https.any.js b/tests/wpt/tests/webnn/validation_tests/elu.https.any.js
index a84848c2c39..4236925aed1 100644
--- a/tests/wpt/tests/webnn/validation_tests/elu.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/elu.https.any.js
@@ -1,12 +1,18 @@
// META: title=validation tests for WebNN API elu operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
validateInputFromAnotherBuilder('elu');
-validateSingleInputOperation('elu');
+const label = 'elu_xxx';
+const regrexp = new RegExp('\\[' + label + '\\]');
+
+validateSingleInputOperation('elu', label);
promise_test(async t => {
const builder = new MLGraphBuilder(context);
@@ -20,17 +26,23 @@ promise_test(async t => {
promise_test(async t => {
const builder = new MLGraphBuilder(context);
- const options = {alpha: -1.0};
+ const options = {
+ alpha: -1.0,
+ label: label,
+ };
const input =
builder.input('input', {dataType: 'float32', dimensions: [1, 2, 3]});
- assert_throws_js(TypeError, () => builder.elu(input, options));
+ assert_throws_with_label(() => builder.elu(input, options), regrexp);
}, '[elu] Throw if options.alpha < 0');
promise_test(async t => {
const builder = new MLGraphBuilder(context);
- const options = {alpha: 0};
+ const options = {
+ alpha: 0,
+ label: label,
+ };
const input = builder.input('input', {dataType: 'float32', dimensions: [1]});
- assert_throws_js(TypeError, () => builder.elu(input, options));
+ assert_throws_with_label(() => builder.elu(input, options), regrexp);
}, '[elu] Throw if options.alpha == 0');
promise_test(async t => {
diff --git a/tests/wpt/tests/webnn/validation_tests/expand.https.any.js b/tests/wpt/tests/webnn/validation_tests/expand.https.any.js
index b333b573ba1..12349a33f8c 100644
--- a/tests/wpt/tests/webnn/validation_tests/expand.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/expand.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API expand operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -13,6 +16,8 @@ multi_builder_test(async (t, builder, otherBuilder) => {
TypeError, () => builder.expand(inputFromOtherBuilder, newShape));
}, '[expand] throw if input is from another builder');
+const label = 'xxx_expand';
+
const tests = [
{
name: '[expand] Test with 0-D scalar to 3-D tensor.',
@@ -44,11 +49,13 @@ const tests = [
'[expand] Throw if the input shapes are the same rank but not broadcastable.',
input: {dataType: 'uint32', dimensions: [3, 6, 2]},
newShape: [4, 3, 5],
+ options: {label}
},
{
name: '[expand] Throw if the input shapes are not broadcastable.',
input: {dataType: 'uint32', dimensions: [5, 4]},
newShape: [5],
+ options: {label}
},
{
name: '[expand] Throw if the number of new shapes is too large.',
@@ -63,16 +70,20 @@ tests.forEach(
const input = builder.input(
'input',
{dataType: test.input.dataType, dimensions: test.input.dimensions});
- const options = {};
- if (test.axis) {
- options.axis = test.axis;
- }
if (test.output) {
const output = builder.expand(input, test.newShape);
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(TypeError, () => builder.expand(input, test.newShape));
+ const options = {...test.options};
+ if (options.label) {
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.expand(input, test.newShape, options), regrexp);
+ } else {
+ assert_throws_js(
+ TypeError, () => builder.expand(input, test.newShape, options));
+ }
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/gather.https.any.js b/tests/wpt/tests/webnn/validation_tests/gather.https.any.js
index 74db3f15d0c..ec728314a3c 100644
--- a/tests/wpt/tests/webnn/validation_tests/gather.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/gather.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API gather operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -35,26 +38,26 @@ const tests = [
{
name: '[gather] TypeError is expected if the input is a scalar',
input: {dataType: 'float16', dimensions: []},
- indices: {dataType: 'int64', dimensions: [1]}
+ indices: {dataType: 'int64', dimensions: [1]},
},
{
name:
'[gather] TypeError is expected if the axis is greater than the rank of input',
input: {dataType: 'float16', dimensions: [1, 2, 3]},
indices: {dataType: 'int32', dimensions: [5, 6]},
- axis: 4
+ axis: 4,
},
{
name:
'[gather] TypeError is expected if the data type of indices is float32 which is invalid',
input: {dataType: 'float16', dimensions: [1, 2, 3, 4]},
- indices: {dataType: 'float32', dimensions: [5, 6]}
+ indices: {dataType: 'float32', dimensions: [5, 6]},
},
{
name:
'[gather] TypeError is expected if the data type of indices is uint64 which is invalid',
input: {dataType: 'float16', dimensions: [1, 2, 3, 4]},
- indices: {dataType: 'uint64', dimensions: [5, 6]}
+ indices: {dataType: 'uint64', dimensions: [5, 6]},
}
];
@@ -78,8 +81,11 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(
- TypeError, () => builder.gather(input, indices, options));
+ const label = 'gather_'
+ options.label = label;
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.gather(input, indices, options), regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/gelu.https.any.js b/tests/wpt/tests/webnn/validation_tests/gelu.https.any.js
index 498dc509cee..c02c2923af4 100644
--- a/tests/wpt/tests/webnn/validation_tests/gelu.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/gelu.https.any.js
@@ -1,9 +1,14 @@
// META: title=validation tests for WebNN API gelu operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
validateInputFromAnotherBuilder('gelu');
-validateSingleInputOperation('gelu');
+const label = 'gelu_123';
+const regrexp = new RegExp('\\[' + label + '\\]');
+validateSingleInputOperation('gelu', label, regrexp);
diff --git a/tests/wpt/tests/webnn/validation_tests/gemm.https.any.js b/tests/wpt/tests/webnn/validation_tests/gemm.https.any.js
index 117fd541a34..30cddcf5ec5 100644
--- a/tests/wpt/tests/webnn/validation_tests/gemm.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/gemm.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API gemm operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -20,6 +23,8 @@ multi_builder_test(async (t, builder, otherBuilder) => {
assert_throws_js(TypeError, () => builder.gemm(a, b, options));
}, '[gemm] throw if c option is from another builder');
+const label = 'gemm_xxx';
+
const tests = [
{
name: '[gemm] Test building gemm with default option.',
@@ -32,6 +37,7 @@ const tests = [
'[gemm] Throw if inputShapeA[1] is not equal to inputShapeB[0] default options.',
a: {dataType: 'float32', dimensions: [2, 3]},
b: {dataType: 'float32', dimensions: [2, 4]},
+ options: {label}
},
{
name: '[gemm] Test building gemm with aTranspose=true.',
@@ -49,6 +55,7 @@ const tests = [
b: {dataType: 'float32', dimensions: [3, 4]},
options: {
aTranspose: true,
+ label: label,
},
},
{
@@ -67,22 +74,26 @@ const tests = [
b: {dataType: 'float32', dimensions: [3, 4]},
options: {
bTranspose: true,
+ label: label,
},
},
{
name: '[gemm] Throw if the rank of inputA is not 2.',
a: {dataType: 'float32', dimensions: [2, 3, 1]},
b: {dataType: 'float32', dimensions: [2, 4]},
+ options: {label}
},
{
name: '[gemm] Throw if the rank of inputB is not 2.',
a: {dataType: 'float32', dimensions: [2, 4]},
b: {dataType: 'float32', dimensions: [2, 3, 1]},
+ options: {label}
},
{
name: '[gemm] Throw if data types of two inputs do not match.',
a: {dataType: 'float32', dimensions: [2, 3]},
b: {dataType: 'float16', dimensions: [3, 4]},
+ options: {label}
},
{
name: '[gemm] Test building gemm with inputC.',
@@ -109,12 +120,14 @@ const tests = [
b: {dataType: 'float32', dimensions: [3, 4]},
options: {
c: {dataType: 'float32', dimensions: [2, 3]},
+ label: label,
},
},
{
name: '[gemm] Throw if the input data type is not floating point.',
a: {dataType: 'int32', dimensions: [2, 3]},
- b: {dataType: 'int32', dimensions: [3, 4]}
+ b: {dataType: 'int32', dimensions: [3, 4]},
+ options: {label}
},
{
name:
@@ -125,6 +138,7 @@ const tests = [
c: {dataType: 'float16', dimensions: [2, 4]},
aTranspose: true,
bTranspose: true,
+ label: label,
},
},
{
@@ -135,6 +149,7 @@ const tests = [
c: {dataType: 'float32', dimensions: [2, 3, 4]},
aTranspose: true,
bTranspose: true,
+ label: label,
},
},
];
@@ -157,6 +172,8 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(TypeError, () => builder.gemm(a, b, test.options));
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.gemm(a, b, test.options), regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/gru.https.any.js b/tests/wpt/tests/webnn/validation_tests/gru.https.any.js
index ac69fcf8302..00a39e4d37d 100644
--- a/tests/wpt/tests/webnn/validation_tests/gru.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/gru.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API gru operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -337,11 +340,14 @@ tests.forEach(
assert_array_equals(outputs[i].shape(), test.outputs[i].dimensions);
}
} else {
- assert_throws_js(
- TypeError,
+ const label = 'gru_xxx';
+ options.label = label;
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
() => builder.gru(
input, weight, recurrentWeight, test.steps, test.hiddenSize,
- options));
+ options),
+ regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/gruCell.https.any.js b/tests/wpt/tests/webnn/validation_tests/gruCell.https.any.js
index 98ba3eec62c..02408da56e2 100644
--- a/tests/wpt/tests/webnn/validation_tests/gruCell.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/gruCell.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API gruCell operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -351,11 +354,14 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(
- TypeError,
+ const label = 'gru_cell_xxx';
+ options.label = label;
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
() => builder.gruCell(
- input, weight, recurrentWeight, hiddenState, test.hiddenSize,
- options));
+ input, weight, recurrentWeight, hiddenState,
+ test.hiddenSize, options),
+ regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/hardSigmoid.https.any.js b/tests/wpt/tests/webnn/validation_tests/hardSigmoid.https.any.js
index 154e82936f7..b0104dfc2c2 100644
--- a/tests/wpt/tests/webnn/validation_tests/hardSigmoid.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/hardSigmoid.https.any.js
@@ -1,12 +1,17 @@
// META: title=validation tests for WebNN API hardSigmoid operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
validateInputFromAnotherBuilder('hardSigmoid');
-validateUnaryOperation('hardSigmoid', floatingPointTypes);
+const label = 'hard_sigmoid';
+
+validateUnaryOperation('hardSigmoid', floatingPointTypes, label);
promise_test(async t => {
const builder = new MLGraphBuilder(context);
diff --git a/tests/wpt/tests/webnn/validation_tests/hardSwish.https.any.js b/tests/wpt/tests/webnn/validation_tests/hardSwish.https.any.js
index 7bdf6eb1db3..53c78c8c81d 100644
--- a/tests/wpt/tests/webnn/validation_tests/hardSwish.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/hardSwish.https.any.js
@@ -1,9 +1,13 @@
// META: title=validation tests for WebNN API hardSwish operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
validateInputFromAnotherBuilder('hardSwish');
-validateUnaryOperation('hardSwish', floatingPointTypes);
+const label = 'hard_swish';
+validateUnaryOperation('hardSwish', floatingPointTypes, label);
diff --git a/tests/wpt/tests/webnn/validation_tests/input.https.any.js b/tests/wpt/tests/webnn/validation_tests/input.https.any.js
index 443cd829461..07d9185cee6 100644
--- a/tests/wpt/tests/webnn/validation_tests/input.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/input.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API input interface
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
diff --git a/tests/wpt/tests/webnn/validation_tests/instanceNormalization.https.any.js b/tests/wpt/tests/webnn/validation_tests/instanceNormalization.https.any.js
index 78094dd8816..0777d982f6d 100644
--- a/tests/wpt/tests/webnn/validation_tests/instanceNormalization.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/instanceNormalization.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API instanceNormalization operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -42,6 +45,7 @@ multi_builder_test(async (t, builder, otherBuilder) => {
TypeError, () => builder.instanceNormalization(input, options));
}, '[instanceNormalization] throw if bias option is from another builder');
+const label = 'instance_normalization';
const tests = [
{
name: '[instanceNormalization] Test with default options for 4-D input.',
@@ -85,11 +89,13 @@ const tests = [
{
name: '[instanceNormalization] Throw if the input is not a 4-D tensor.',
input: {dataType: 'float32', dimensions: [1, 2, 5, 5, 2]},
+ options: {label}
},
{
name:
'[instanceNormalization] Throw if the input data type is not one of floating point types.',
input: {dataType: 'int32', dimensions: [1, 2, 5, 5]},
+ options: {label}
},
{
name:
@@ -97,6 +103,7 @@ const tests = [
input: {dataType: 'float16', dimensions: [1, 2, 5, 5]},
options: {
scale: {dataType: 'float32', dimensions: [2]},
+ label: label,
},
},
{
@@ -105,6 +112,7 @@ const tests = [
input: {dataType: 'float32', dimensions: [1, 2, 5, 5]},
options: {
scale: {dataType: 'float32', dimensions: [2, 1]},
+ label: label,
},
},
{
@@ -114,6 +122,7 @@ const tests = [
options: {
layout: 'nhwc',
scale: {dataType: 'float32', dimensions: [2]},
+ label: label,
},
},
{
@@ -123,6 +132,7 @@ const tests = [
options: {
layout: 'nchw',
scale: {dataType: 'float32', dimensions: [2]},
+ label: label,
},
},
{
@@ -131,6 +141,7 @@ const tests = [
input: {dataType: 'float16', dimensions: [1, 2, 5, 5]},
options: {
bias: {dataType: 'float32', dimensions: [2]},
+ label: label,
},
},
{
@@ -139,6 +150,7 @@ const tests = [
input: {dataType: 'float32', dimensions: [1, 2, 5, 5]},
options: {
scale: {dataType: 'float32', dimensions: [2, 1]},
+ label: label,
},
},
{
@@ -148,6 +160,7 @@ const tests = [
options: {
layout: 'nhwc',
bias: {dataType: 'float32', dimensions: [2]},
+ label: label,
},
},
{
@@ -157,6 +170,7 @@ const tests = [
options: {
layout: 'nchw',
bias: {dataType: 'float32', dimensions: [2]},
+ label: label,
},
},
];
@@ -186,8 +200,8 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(
- TypeError,
- () => builder.instanceNormalization(input, test.options));
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.instanceNormalization(input, test.options), regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/layerNormalization.https.any.js b/tests/wpt/tests/webnn/validation_tests/layerNormalization.https.any.js
index 3b3636ba11d..50e48cca6e3 100644
--- a/tests/wpt/tests/webnn/validation_tests/layerNormalization.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/layerNormalization.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API layerNormalization operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -29,6 +32,7 @@ multi_builder_test(async (t, builder, otherBuilder) => {
assert_throws_js(TypeError, () => builder.layerNormalization(input, options));
}, '[layerNormalization] throw if bias option is from another builder');
+const label = 'instance_normalization';
const tests = [
{
name: '[layerNormalization] Test with default options for scalar input.',
@@ -98,6 +102,7 @@ const tests = [
name:
'[layerNormalization] Throw if the input data type is not one of the floating point types.',
input: {dataType: 'uint32', dimensions: [1, 2, 3, 4]},
+ options: {label}
},
{
name:
@@ -105,12 +110,16 @@ const tests = [
input: {dataType: 'float32', dimensions: [1, 2, 3, 4]},
options: {
axes: [1, 2, 4],
+ label: label,
},
},
{
name: '[layerNormalization] Throw if the axes have duplications.',
input: {dataType: 'float32', dimensions: [1, 2, 3, 4]},
- options: {axes: [3, 3]},
+ options: {
+ axes: [3, 3],
+ label: label,
+ },
},
{
name:
@@ -120,6 +129,7 @@ const tests = [
scale: {dataType: 'float32', dimensions: [3, 4]},
bias: {dataType: 'float16', dimensions: [3, 4]},
axes: [2, 3],
+ label: label,
},
},
{
@@ -130,6 +140,7 @@ const tests = [
scale: {dataType: 'float16', dimensions: [3, 4]},
bias: {dataType: 'float32', dimensions: [3, 4]},
axes: [2, 3],
+ label: label,
},
},
{
@@ -141,6 +152,7 @@ const tests = [
dataType: 'float32',
dimensions: [3, 3, 4]
}, // for 4D input, default axes = [1,2,3]
+ label: label,
},
},
{
@@ -152,6 +164,7 @@ const tests = [
dataType: 'float32',
dimensions: [3, 3, 4]
}, // for 4D input, default axes = [1,2,3]
+ label: label,
},
},
{
@@ -163,6 +176,7 @@ const tests = [
dataType: 'float32',
dimensions: [1, 2, 3, 4]
}, // for 4D input, default axes = [1,2,3]
+ label: label,
},
},
{
@@ -174,6 +188,7 @@ const tests = [
dataType: 'float32',
dimensions: [1, 2, 3, 4]
}, // for 4D input, default axes = [1,2,3]
+ label: label,
},
},
];
@@ -203,7 +218,8 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(
- TypeError, () => builder.layerNormalization(input, test.options));
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.layerNormalization(input, test.options), regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/leakyRelu.https.any.js b/tests/wpt/tests/webnn/validation_tests/leakyRelu.https.any.js
index 3a8ac892b98..6766763cd74 100644
--- a/tests/wpt/tests/webnn/validation_tests/leakyRelu.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/leakyRelu.https.any.js
@@ -1,12 +1,16 @@
// META: title=validation tests for WebNN API leakyRelu operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
validateInputFromAnotherBuilder('leakyRelu');
-validateSingleInputOperation('leakyRelu');
+const label = 'leaky_relu';
+validateSingleInputOperation('leakyRelu', label);
promise_test(async t => {
const builder = new MLGraphBuilder(context);
diff --git a/tests/wpt/tests/webnn/validation_tests/linear.https.any.js b/tests/wpt/tests/webnn/validation_tests/linear.https.any.js
index 05f88a34dc7..936843374b9 100644
--- a/tests/wpt/tests/webnn/validation_tests/linear.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/linear.https.any.js
@@ -1,12 +1,16 @@
// META: title=validation tests for WebNN API linear operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
validateInputFromAnotherBuilder('linear');
-validateUnaryOperation('linear', floatingPointTypes);
+const label = 'linear_xxx';
+validateUnaryOperation('linear', floatingPointTypes, label);
promise_test(async t => {
const builder = new MLGraphBuilder(context);
diff --git a/tests/wpt/tests/webnn/validation_tests/lstm.https.any.js b/tests/wpt/tests/webnn/validation_tests/lstm.https.any.js
index 00f6b129dfa..c0d1c5100f6 100644
--- a/tests/wpt/tests/webnn/validation_tests/lstm.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/lstm.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API lstm operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -332,11 +335,14 @@ tests.forEach(
assert_array_equals(outputs[i].shape(), test.outputs[i].dimensions);
}
} else {
- assert_throws_js(
- TypeError,
+ const label = 'lstm_xxx';
+ options.label = label;
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
() => builder.lstm(
input, weight, recurrentWeight, test.steps, test.hiddenSize,
- options));
+ options),
+ regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/lstmCell.https.any.js b/tests/wpt/tests/webnn/validation_tests/lstmCell.https.any.js
index 28a9cb8dd3f..eb00ace187f 100644
--- a/tests/wpt/tests/webnn/validation_tests/lstmCell.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/lstmCell.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API lstmCell operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -571,10 +574,13 @@ tests.forEach(
assert_array_equals(outputs[i].shape(), test.outputs[i].dimensions);
}
} else {
- assert_throws_js(
- TypeError,
+ const label = 'lstm_cell_xxx';
+ options.label = label;
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
() => builder.lstmCell(
input, weight, recurrentWeight, hiddenState, cellState,
- test.hiddenSize, options));
+ test.hiddenSize, options),
+ regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/matmul.https.any.js b/tests/wpt/tests/webnn/validation_tests/matmul.https.any.js
index c298c87388b..981d8f35708 100644
--- a/tests/wpt/tests/webnn/validation_tests/matmul.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/matmul.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API matmul operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -115,7 +118,10 @@ tests.forEach(test => promise_test(async t => {
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(
- TypeError, () => builder.matmul(inputA, inputB));
+ const label = 'matmul_123';
+ const options = {label};
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.matmul(inputA, inputB, options), regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/pad.https.any.js b/tests/wpt/tests/webnn/validation_tests/pad.https.any.js
index 4971706e49d..3f5c30b84cb 100644
--- a/tests/wpt/tests/webnn/validation_tests/pad.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/pad.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API pad operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -16,6 +19,7 @@ multi_builder_test(async (t, builder, otherBuilder) => {
builder.pad(inputFromOtherBuilder, beginningPadding, endingPadding));
}, '[pad] throw if input is from another builder');
+const label = 'pad_xxx';
const tests = [
{
name:
@@ -34,6 +38,7 @@ const tests = [
input: {dataType: 'float32', dimensions: []},
beginningPadding: [],
endingPadding: [],
+ options: {label}
},
{
name:
@@ -44,6 +49,7 @@ const tests = [
options: {
mode: 'edge',
value: 0,
+ label: label,
},
},
{
@@ -54,6 +60,7 @@ const tests = [
endingPadding: [1, 2, 0],
options: {
mode: 'reflection',
+ label: label,
},
},
{
@@ -63,6 +70,7 @@ const tests = [
endingPadding: [3294967295, 2],
options: {
mode: 'reflection',
+ label: label,
},
},
];
@@ -79,10 +87,10 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(
- TypeError,
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
() => builder.pad(
- input, test.beginningPadding, test.endingPadding,
- test.options));
+ input, test.beginningPadding, test.endingPadding, test.options),
+ regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/pooling-and-reduction-keep-dims.https.any.js b/tests/wpt/tests/webnn/validation_tests/pooling-and-reduction-keep-dims.https.any.js
index ca9632a5f72..5a30aaf02be 100644
--- a/tests/wpt/tests/webnn/validation_tests/pooling-and-reduction-keep-dims.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/pooling-and-reduction-keep-dims.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for pooling and reduction operators keep dimensions
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils.js
// META: script=../resources/utils_validation.js
// META: timeout=long
diff --git a/tests/wpt/tests/webnn/validation_tests/pooling.https.any.js b/tests/wpt/tests/webnn/validation_tests/pooling.https.any.js
index aca73de9488..119132cf638 100644
--- a/tests/wpt/tests/webnn/validation_tests/pooling.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/pooling.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API pooling operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -307,14 +310,9 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- try {
- builder[operatorName](input, test.options);
- } catch (e) {
- assert_equals(e.name, 'TypeError');
- const error_message = e.message;
- const regrexp = new RegExp('\\[' + label + '\\]');
- assert_not_equals(error_message.match(regrexp), null);
- }
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder[operatorName](input, test.options), regrexp);
}
});
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/prelu.https.any.js b/tests/wpt/tests/webnn/validation_tests/prelu.https.any.js
index a0741300735..5b1b95c70f1 100644
--- a/tests/wpt/tests/webnn/validation_tests/prelu.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/prelu.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API prelu operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -87,6 +90,10 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(TypeError, () => builder.prelu(input, slope));
+ const label = 'prelu_123';
+ const options = {label};
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.prelu(input, slope, options), regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/reduction.https.any.js b/tests/wpt/tests/webnn/validation_tests/reduction.https.any.js
index 0ffc9c309fd..57931f3aec4 100644
--- a/tests/wpt/tests/webnn/validation_tests/reduction.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/reduction.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API reduction operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -36,6 +39,8 @@ const kNoTypeRestrictReductionOperators = [
'reduceMin',
];
+const label = 'reduce_op_xxx';
+
const allReductionOperatorsTests = [
{
name: '[reduce] Test reduce with default options.',
@@ -66,6 +71,7 @@ const allReductionOperatorsTests = [
input: {dataType: 'float32', dimensions: [1, 2, 5, 5]},
options: {
axes: [4],
+ label: label,
},
},
{
@@ -73,6 +79,7 @@ const allReductionOperatorsTests = [
input: {dataType: 'float32', dimensions: [1, 2, 5, 5]},
options: {
axes: [0, 1, 1],
+ label: label,
},
},
];
@@ -83,6 +90,7 @@ const kFloatRestrictOperatorsTests = [
input: {dataType: 'int32', dimensions: [1, 2, 5, 5]},
options: {
axes: [0, 1],
+ label: label,
},
},
];
@@ -114,6 +122,7 @@ const kFloatInt32Uint32Int64Uint64RestrictOperatorsTests = [
input: {dataType: 'int8', dimensions: [1, 2, 5, 5]},
options: {
axes: [0, 1],
+ label: label,
},
},
];
@@ -154,8 +163,9 @@ function runReductionTests(operatorName, tests) {
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(
- TypeError, () => builder[operatorName](input, test.options));
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder[operatorName](input, test.options), regrexp);
}
}, test.name.replace('[reduce]', `[${operatorName}]`));
});
diff --git a/tests/wpt/tests/webnn/validation_tests/relu.https.any.js b/tests/wpt/tests/webnn/validation_tests/relu.https.any.js
index caebba9b316..7bd61fe413b 100644
--- a/tests/wpt/tests/webnn/validation_tests/relu.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/relu.https.any.js
@@ -1,9 +1,13 @@
// META: title=validation tests for WebNN API relu operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
validateInputFromAnotherBuilder('relu');
-validateSingleInputOperation('relu');
+const label = 'relu_1';
+validateSingleInputOperation('relu', label);
diff --git a/tests/wpt/tests/webnn/validation_tests/resample2d.https.any.js b/tests/wpt/tests/webnn/validation_tests/resample2d.https.any.js
index 9558e2bf5a9..777c1fc6bb8 100644
--- a/tests/wpt/tests/webnn/validation_tests/resample2d.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/resample2d.https.any.js
@@ -1,9 +1,13 @@
// META: title=validation tests for WebNN API resample2d operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
+const label = 'resample-2d';
// Tests for resample2d(input, options)
const tests = [
{
@@ -62,45 +66,68 @@ const tests = [
name:
'[resample2d] Throw if the dataType of input is not float32 or float16',
input: {dataType: 'int32', dimensions: [2, 4]},
+ options: {label},
},
{
name: '[resample2d] Throw if the rank of input is not 4',
input: {dataType: 'float32', dimensions: [2, 4]},
+ options: {label},
},
{
name: '[resample2d] Throw if the length of scales is not 2',
input: {dataType: 'float32', dimensions: [1, 1, 2, 4]},
- options: {scales: [1.0, 1.0, 2.0, 2.0]},
+ options: {
+ scales: [1.0, 1.0, 2.0, 2.0],
+ label: label,
+ },
},
{
name: '[resample2d] Throw if any scale value is negative',
input: {dataType: 'float32', dimensions: [1, 1, 2, 4]},
- options: {scales: [1.0, -2.0]},
+ options: {
+ scales: [1.0, -2.0],
+ label: label,
+ },
},
{
name: '[resample2d] Throw if any scale value is 0',
input: {dataType: 'float32', dimensions: [1, 1, 2, 4]},
- options: {scales: [0, 2.0]},
+ options: {
+ scales: [0, 2.0],
+ label: label,
+ },
},
{
name: '[resample2d] Throw if the length of sizes is not 2',
input: {dataType: 'float32', dimensions: [1, 1, 2, 4]},
- options: {sizes: [1, 1, 4, 6]},
+ options: {
+ sizes: [1, 1, 4, 6],
+ label: label,
+ },
},
{
name: '[resample2d] Throw if sizes[0] is not a valid dimension',
input: {dataType: 'float32', dimensions: [1, 1, 2, 4]},
- options: {sizes: [0, 1]},
+ options: {
+ sizes: [0, 1],
+ label: label,
+ },
},
{
name: '[resample2d] Throw if sizes[1] is not a valid dimension',
input: {dataType: 'float32', dimensions: [1, 1, 2, 4]},
- options: {sizes: [1, 0]},
+ options: {
+ sizes: [1, 0],
+ label: label,
+ },
},
{
name: '[resample2d] Throw if input data type is not floating type',
input: {dataType: 'int32', dimensions: [1, 1, 2, 4]},
- options: {sizes: [1, 1, 4, 6]},
+ options: {
+ sizes: [1, 1, 4, 6],
+ label: label,
+ },
},
{
name:
@@ -123,7 +150,10 @@ const tests = [
// Here scaleHeight=0.02 and inputHeight=2,
// so outputHeight would be 0.
// Link to https://github.com/webmachinelearning/webnn/issues/391.
- options: {scales: /*[scaleHeight, scaleWidth]*/[0.02, 0.8]},
+ options: {
+ scales: /*[scaleHeight, scaleWidth]*/[0.02, 0.8],
+ label: label,
+ },
},
{
name:
@@ -140,29 +170,44 @@ const tests = [
// Here scaleWidth=0.1 and inputWidth=4,
// so outputWidth would be 0.
// Link to https://github.com/webmachinelearning/webnn/issues/391.
- options: {scales: /*[scaleHeight, scaleWidth]*/[0.7, 0.1]},
+ options: {
+ scales: /*[scaleHeight, scaleWidth]*/[0.7, 0.1],
+ label: label,
+ },
},
{
name: '[resample2d] Throw if the length of axes is not 2',
input: {dataType: 'float32', dimensions: [1, 1, 2, 4]},
- options: {axes: [0, 1, 2]},
+ options: {
+ axes: [0, 1, 2],
+ label: label,
+ },
},
{
name:
'[resample2d] Throw if any axis value is greater than or equal to the input rank',
input: {dataType: 'float32', dimensions: [1, 1, 2, 4]},
- options: {axes: [3, 4]},
+ options: {
+ axes: [3, 4],
+ label: label,
+ },
},
{
// The valid values in the axes sequence are [0, 1], [1, 2] or [2, 3]
name: '[resample2d] Throw if the values of axes are inconsecutive',
input: {dataType: 'float32', dimensions: [1, 1, 2, 4]},
- options: {axes: [0, 2]},
+ options: {
+ axes: [0, 2],
+ label: label,
+ },
},
{
name: '[resample2d] Throw if the values of axes are same',
input: {dataType: 'float32', dimensions: [1, 1, 2, 4]},
- options: {axes: [0, 0]},
+ options: {
+ axes: [0, 0],
+ label: label,
+ },
},
];
@@ -178,7 +223,14 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(TypeError, () => builder.resample2d(input, options));
+ const options = {...test.options};
+ if (options.label) {
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.resample2d(input, options), regrexp);
+ } else {
+ assert_throws_js(TypeError, () => builder.resample2d(input, options));
+ }
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/reshape.https.any.js b/tests/wpt/tests/webnn/validation_tests/reshape.https.any.js
index 57a5dde2c91..7bf4a523c28 100644
--- a/tests/wpt/tests/webnn/validation_tests/reshape.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/reshape.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API reshape operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -74,7 +77,10 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(
- TypeError, () => builder.reshape(input, test.newShape));
+ const label = 'reshape_xxx';
+ const options = {label};
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.reshape(input, test.newShape, options), regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/sigmoid.https.any.js b/tests/wpt/tests/webnn/validation_tests/sigmoid.https.any.js
index e76403eca3e..271bef21116 100644
--- a/tests/wpt/tests/webnn/validation_tests/sigmoid.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/sigmoid.https.any.js
@@ -1,9 +1,13 @@
// META: title=validation tests for WebNN API sigmoid operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
validateInputFromAnotherBuilder('sigmoid');
-validateSingleInputOperation('sigmoid');
+const label = 'sigmoid_xxx';
+validateSingleInputOperation('sigmoid', label);
diff --git a/tests/wpt/tests/webnn/validation_tests/slice.https.any.js b/tests/wpt/tests/webnn/validation_tests/slice.https.any.js
index 3eb308ad2b8..d2ca2c678f0 100644
--- a/tests/wpt/tests/webnn/validation_tests/slice.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/slice.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API slice operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -76,7 +79,11 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(
- TypeError, () => builder.slice(input, test.starts, test.sizes));
+ const label = 'slice_xxx';
+ const options = {label};
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.slice(input, test.starts, test.sizes, options),
+ regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/softmax.https.any.js b/tests/wpt/tests/webnn/validation_tests/softmax.https.any.js
index 94695e69c6c..8c9e65f6eee 100644
--- a/tests/wpt/tests/webnn/validation_tests/softmax.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/softmax.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API softmax operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -36,7 +39,17 @@ tests_without_axis.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(TypeError, () => builder.softmax(input));
+ const options = {
+ label: 'softmax_xxx',
+ };
+ try {
+ builder.softmax(input, options);
+ } catch (e) {
+ assert_equals(e.name, 'TypeError');
+ const error_message = e.message;
+ const regrexp = /\[softmax_xxx\]/;
+ assert_not_equals(error_message.match(regrexp), null);
+ }
}
}, test.name));
@@ -85,7 +98,11 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(TypeError, () => builder.softmax(input, test.axis));
+ const label = 'softmax_xxx';
+ const options = {label};
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.softmax(input, test.axis, options), regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/softplus.https.any.js b/tests/wpt/tests/webnn/validation_tests/softplus.https.any.js
index 2196c895f39..72049573a48 100644
--- a/tests/wpt/tests/webnn/validation_tests/softplus.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/softplus.https.any.js
@@ -1,9 +1,13 @@
// META: title=validation tests for WebNN API softplus operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
validateInputFromAnotherBuilder('softplus');
-validateSingleInputOperation('softplus');
+const label = 'softplus_xxx';
+validateSingleInputOperation('softplus', label);
diff --git a/tests/wpt/tests/webnn/validation_tests/softsign.https.any.js b/tests/wpt/tests/webnn/validation_tests/softsign.https.any.js
index 81b4b4fbe75..59a0199a3fb 100644
--- a/tests/wpt/tests/webnn/validation_tests/softsign.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/softsign.https.any.js
@@ -1,9 +1,13 @@
// META: title=validation tests for WebNN API softsign operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
validateInputFromAnotherBuilder('softsign');
-validateSingleInputOperation('softsign');
+const label = 'softsign_xxx';
+validateSingleInputOperation('softsign', label);
diff --git a/tests/wpt/tests/webnn/validation_tests/split.https.any.js b/tests/wpt/tests/webnn/validation_tests/split.https.any.js
index 9946df34ed8..31b0c449385 100644
--- a/tests/wpt/tests/webnn/validation_tests/split.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/split.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API split operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -13,6 +16,7 @@ multi_builder_test(async (t, builder, otherBuilder) => {
TypeError, () => builder.split(inputFromOtherBuilder, splits));
}, '[split] throw if input is from another builder');
+const label = 'xxx-split';
const tests = [
{
name: '[split] Test with default options.',
@@ -38,6 +42,7 @@ const tests = [
name: '[split] Throw if splitting a scalar.',
input: {dataType: 'float32', dimensions: []},
splits: [2],
+ options: {label}
},
{
name: '[split] Throw if axis is larger than input rank.',
@@ -45,6 +50,7 @@ const tests = [
splits: [2],
options: {
axis: 2,
+ label: label,
}
},
{
@@ -53,6 +59,7 @@ const tests = [
splits: [0],
options: {
axis: 0,
+ label: label,
}
},
{
@@ -61,6 +68,7 @@ const tests = [
splits: 0,
options: {
axis: 0,
+ label: label,
},
},
{
@@ -70,6 +78,7 @@ const tests = [
splits: [2],
options: {
axis: 1,
+ label: label,
}
},
{
@@ -79,6 +88,7 @@ const tests = [
splits: 2,
options: {
axis: 1,
+ label: label,
},
},
{
@@ -88,6 +98,7 @@ const tests = [
splits: [2, 2, 3],
options: {
axis: 1,
+ label: label,
}
},
];
@@ -106,7 +117,8 @@ tests.forEach(
assert_array_equals(outputs[i].shape(), test.outputs[i].dimensions);
}
} else {
- assert_throws_js(
- TypeError, () => builder.split(input, test.splits, test.options));
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.split(input, test.splits, test.options), regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/tanh.https.any.js b/tests/wpt/tests/webnn/validation_tests/tanh.https.any.js
index deb9f3614eb..b7ddf461c52 100644
--- a/tests/wpt/tests/webnn/validation_tests/tanh.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/tanh.https.any.js
@@ -1,9 +1,13 @@
// META: title=validation tests for WebNN API tanh operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
validateInputFromAnotherBuilder('tanh');
-validateUnaryOperation('tanh', floatingPointTypes);
+const label = 'tanh-xxx';
+validateUnaryOperation('tanh', floatingPointTypes, label);
diff --git a/tests/wpt/tests/webnn/validation_tests/transpose.https.any.js b/tests/wpt/tests/webnn/validation_tests/transpose.https.any.js
index be9c9bd8a63..f9eda1d68b6 100644
--- a/tests/wpt/tests/webnn/validation_tests/transpose.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/transpose.https.any.js
@@ -1,11 +1,15 @@
// META: title=validation tests for WebNN API transpose operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
validateInputFromAnotherBuilder('transpose');
+const label = 'transpose-2';
const tests = [
{
name: '[transpose] Test building transpose with default options.',
@@ -22,23 +26,34 @@ const tests = [
name:
'[transpose] Throw if permutation\'s size is not the same as input\'s rank.',
input: {dataType: 'int32', dimensions: [1, 2, 4]},
- options: {permutation: [0, 2, 3, 1]},
+ options: {
+ permutation: [0, 2, 3, 1],
+ label: label,
+ },
},
{
name: '[transpose] Throw if two values in permutation are same.',
input: {dataType: 'int32', dimensions: [1, 2, 3, 4]},
- options: {permutation: [0, 2, 3, 2]},
+ options: {
+ permutation: [0, 2, 3, 2],
+ label: label,
+ },
},
{
name:
'[transpose] Throw if any value in permutation is not in the range [0,input\'s rank).',
input: {dataType: 'int32', dimensions: [1, 2, 3, 4]},
- options: {permutation: [0, 1, 2, 4]},
+ options: {
+ permutation: [0, 1, 2, 4],
+ label: label,
+ },
},
{
name: '[transpose] Throw if any value in permutation is negative.',
input: {dataType: 'int32', dimensions: [1, 2, 3, 4]},
- options: {permutation: [0, -1, 2, 3]},
+ options: {
+ permutation: [0, -1, 2, 3],
+ },
}
];
@@ -53,7 +68,13 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(
- TypeError, () => builder.transpose(input, test.options));
+ const options = {...test.options};
+ if (options.label) {
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.transpose(input, options), regrexp);
+ } else {
+ assert_throws_js(TypeError, () => builder.transpose(input, options));
+ }
}
}, test.name));
diff --git a/tests/wpt/tests/webnn/validation_tests/triangular.https.any.js b/tests/wpt/tests/webnn/validation_tests/triangular.https.any.js
index b6e2802b7c5..320c4ab5659 100644
--- a/tests/wpt/tests/webnn/validation_tests/triangular.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/triangular.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API triangular operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -11,7 +14,11 @@ promise_test(async t => {
for (let dimensions of allWebNNDimensionsArray.slice(0, 2)) {
for (let dataType of allWebNNOperandDataTypes) {
const input = builder.input(`input${++inputIndex}`, {dataType, dimensions});
- assert_throws_js(TypeError, () => builder.triangular(input));
+ const label = 'triangular_3';
+ const options = {label};
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.triangular(input, options), regrexp);
}
}
}, '[triangular] TypeError is expected if input\'s rank is less than 2');
diff --git a/tests/wpt/tests/webnn/validation_tests/where.https.any.js b/tests/wpt/tests/webnn/validation_tests/where.https.any.js
index f509971f69a..884b4857317 100644
--- a/tests/wpt/tests/webnn/validation_tests/where.https.any.js
+++ b/tests/wpt/tests/webnn/validation_tests/where.https.any.js
@@ -1,5 +1,8 @@
// META: title=validation tests for WebNN API where operation
// META: global=window,dedicatedworker
+// META: variant=?cpu
+// META: variant=?gpu
+// META: variant=?npu
// META: script=../resources/utils_validation.js
'use strict';
@@ -111,8 +114,12 @@ tests.forEach(
assert_equals(output.dataType(), test.output.dataType);
assert_array_equals(output.shape(), test.output.dimensions);
} else {
- assert_throws_js(
- TypeError, () => builder.where(condition, trueValue, falseValue));
+ const label = 'where_123';
+ const options = {label};
+ const regrexp = new RegExp('\\[' + label + '\\]');
+ assert_throws_with_label(
+ () => builder.where(condition, trueValue, falseValue, options),
+ regrexp);
}
}, test.name));
diff --git a/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform-drop-frames-worker.js b/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform-drop-frames-worker.js
new file mode 100644
index 00000000000..617dd47f97d
--- /dev/null
+++ b/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform-drop-frames-worker.js
@@ -0,0 +1,34 @@
+let frameRtpTimestamp;
+
+// Dropping all but the fifth frame on the sender,
+// verifying the receiver only gets that frame.
+onrtctransform = (event) => {
+ const transformer = event.transformer;
+
+ transformer.reader = transformer.readable.getReader();
+ transformer.writer = transformer.writable.getWriter();
+ let countRead = 0;
+
+ async function process(transformer)
+ {
+ const chunk = await transformer.reader.read();
+ countRead++;
+ if (chunk.done)
+ return;
+ if (transformer.options.name === 'sender') {
+ if(countRead == 5) {
+ frameRtpTimestamp = chunk.value.getMetadata().rtpTimestamp;
+ transformer.writer.write(chunk.value); // only writing once
+ }
+ } else {
+ if(chunk.value.getMetadata().rtpTimestamp == frameRtpTimestamp && countRead == 1)
+ self.postMessage("got expected");
+ else
+ self.postMessage("received a different frame");
+ return;
+ }
+ await process(transformer);
+ }
+ process(transformer);
+};
+self.postMessage("registered");
diff --git a/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform-no-write-worker.js b/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform-no-write-worker.js
new file mode 100644
index 00000000000..b98b857ad1c
--- /dev/null
+++ b/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform-no-write-worker.js
@@ -0,0 +1,17 @@
+onrtctransform = (event) => {
+ const transformer = event.transformer;
+ transformer.reader = transformer.readable.getReader();
+
+ async function process(transformer)
+ {
+ const chunk = await transformer.reader.read();
+ if (chunk.done)
+ return;
+ if (transformer.options.name === 'receiver') // receiver
+ self.postMessage("received frame.");
+
+ await process(transformer);
+ }
+ process(transformer);
+};
+self.postMessage("registered");
diff --git a/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform-worker.js b/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform-worker.js
new file mode 100644
index 00000000000..3faafd26673
--- /dev/null
+++ b/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform-worker.js
@@ -0,0 +1,44 @@
+const modification = 1;
+
+function appendToBuffer(buffer, value) {
+ const result = new ArrayBuffer(buffer.byteLength + 1);
+ const byteResult = new Uint8Array(result);
+ byteResult.set(new Uint8Array(buffer), 0);
+ byteResult[buffer.byteLength] = value;
+ return result;
+}
+
+function ModifyAndWrite(chunk, transformer) {
+ chunk.value.data = appendToBuffer(chunk.value.data, modification);
+ transformer.writer.write(chunk.value);
+}
+
+function RestoreAndWrite(chunk, transformer) {
+ const value = new Uint8Array(chunk.value.data)[chunk.value.data.byteLength - 1];
+ chunk.value.data = chunk.value.data.slice(0, chunk.value.data.byteLength - 1);
+ transformer.writer.write(chunk.value);
+ if (value === modification && !chunk.value.getMetadata().rtpTimestamp)
+ self.postMessage("got expected");
+ else
+ self.postMessage("unexpected value: " + value);
+}
+onrtctransform = (event) => {
+ const transformer = event.transformer;
+
+ transformer.reader = transformer.readable.getReader();
+ transformer.writer = transformer.writable.getWriter();
+ async function process(transformer)
+ {
+ const chunk = await transformer.reader.read();
+ if (chunk.done)
+ return;
+ if (transformer.options.name === 'sender') // sender
+ ModifyAndWrite(chunk, transformer);
+ else // receiver
+ RestoreAndWrite(chunk, transformer);
+
+ await process(transformer);
+ }
+ process(transformer);
+};
+self.postMessage("registered");
diff --git a/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform.https.html b/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform.https.html
new file mode 100644
index 00000000000..c935644f0c6
--- /dev/null
+++ b/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform.https.html
@@ -0,0 +1,161 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src='../mediacapture-streams/permission-helper.js'></script>
+<script src ="routines.js"></script>
+</head>
+<body>
+<video id="video" autoplay controls playsinline></video>
+<script>
+
+promise_test(async (test) => {
+ const worker = new Worker('RTCRtpScriptTransform-encoded-transform-worker.js');
+ const data = await new Promise(resolve => worker.onmessage = (event) => resolve(event.data));
+ assert_equals(data, "registered");
+
+ await setMediaPermission("granted", ["camera"]);
+ const localStream = await navigator.mediaDevices.getUserMedia({video: true});
+
+ let sender, receiver;
+ const senderTransform = new RTCRtpScriptTransform(worker, {name:'sender'});
+ const receiverTransform = new RTCRtpScriptTransform(worker, {name:'receiver'});
+
+ const stream = await new Promise((resolve, reject) => {
+ createConnections(test, (firstConnection) => {
+ sender = firstConnection.addTrack(localStream.getVideoTracks()[0], localStream);
+ sender.transform = senderTransform;
+ }, (secondConnection) => {
+ secondConnection.ontrack = (trackEvent) => {
+ receiver = trackEvent.receiver;
+ receiver.transform = receiverTransform;
+ resolve(trackEvent.streams[0]);
+ };
+ });
+ });
+
+ video.srcObject = stream;
+ const playingPromise = new Promise(r => video.onplaying = r);
+ await video.play();
+
+ const updatePromise = new Promise(resolve => worker.onmessage = (event) => resolve(event.data));
+ assert_equals(await updatePromise, "got expected");
+
+ await playingPromise;
+ assert_equals(video.videoTracks.length, 1);
+ assert_equals(video.audioTracks.length, 0);
+
+}, "Receiver and sender read, modifiy and write video frames.");
+
+promise_test(async (test) => {
+ const worker = new Worker('RTCRtpScriptTransform-encoded-transform-worker.js');
+ const data = await new Promise(resolve => worker.onmessage = (event) => resolve(event.data));
+ assert_equals(data, "registered");
+
+ await setMediaPermission("granted", ["microphone"]);
+ const localStream = await navigator.mediaDevices.getUserMedia({audio: true});
+ let sender, receiver;
+ const senderTransform = new RTCRtpScriptTransform(worker, {name:'sender'});
+ const receiverTransform = new RTCRtpScriptTransform(worker, {name:'receiver'});
+
+ const stream = await new Promise((resolve, reject) => {
+ createConnections(test, (firstConnection) => {
+ sender = firstConnection.addTrack(localStream.getAudioTracks()[0], localStream);
+ sender.transform = senderTransform;
+ }, (secondConnection) => {
+ secondConnection.ontrack = (trackEvent) => {
+ receiver = trackEvent.receiver;
+ receiver.transform = receiverTransform;
+ resolve(trackEvent.streams[0]);
+ };
+ });
+ });
+
+ video.srcObject = stream;
+ const playingPromise = new Promise(r => video.onplaying = r);
+ await video.play();
+
+ const updatePromise = new Promise(resolve => worker.onmessage = (event) => resolve(event.data));
+ assert_equals(await updatePromise, "got expected");
+
+ await playingPromise;
+ assert_equals(video.videoTracks.length, 0);
+ assert_equals(video.audioTracks.length, 1);
+
+}, "Receiver and sender read, modifiy and write audio frames.");
+
+promise_test(async (test) => {
+ const worker = new Worker('RTCRtpScriptTransform-encoded-transform-no-write-worker.js');
+ const data = await new Promise(resolve => worker.onmessage = (event) => resolve(event.data));
+ assert_equals(data, "registered");
+
+ await setMediaPermission("granted", ["camera"]);
+ const localStream = await navigator.mediaDevices.getUserMedia({video: true});
+
+ let sender, receiver;
+ const senderTransform = new RTCRtpScriptTransform(worker, {name:'sender'});
+ const receiverTransform = new RTCRtpScriptTransform(worker, {name:'receiver'});
+
+ const stream = await new Promise((resolve, reject) => {
+ createConnections(test, (firstConnection) => {
+ sender = firstConnection.addTrack(localStream.getVideoTracks()[0], localStream);
+ sender.transform = senderTransform;
+ }, (secondConnection) => {
+ secondConnection.ontrack = (trackEvent) => {
+ receiver = trackEvent.receiver;
+ receiver.transform = receiverTransform;
+ resolve(trackEvent.streams[0]);
+ };
+ });
+ });
+
+ video.srcObject = stream;
+
+ // As the receiver doesn't get any frames, it won't post a success
+ // message back and it will cause an expected timeout.
+ return new Promise((resolve, reject) => {
+ worker.onmessage = (event) => {reject()};
+ test.step_timeout(resolve, 500);
+ });
+
+}, "Sender reads frames but doesn't write them back. Receiver doesn't receive any frames.");
+
+promise_test(async (test) => {
+ const worker = new Worker('RTCRtpScriptTransform-encoded-transform-drop-frames-worker.js');
+ const data = await new Promise(resolve => worker.onmessage = (event) => resolve(event.data));
+ assert_equals(data, "registered");
+
+ await setMediaPermission("granted", ["camera"]);
+ const localStream = await navigator.mediaDevices.getUserMedia({video: true});
+
+ let sender, receiver;
+ const senderTransform = new RTCRtpScriptTransform(worker, {name:'sender'});
+ const receiverTransform = new RTCRtpScriptTransform(worker, {name:'receiver'});
+
+ const stream = await new Promise((resolve, reject) => {
+ createConnections(test, (firstConnection) => {
+ sender = firstConnection.addTrack(localStream.getVideoTracks()[0], localStream);
+ sender.transform = senderTransform;
+ }, (secondConnection) => {
+ secondConnection.ontrack = (trackEvent) => {
+ receiver = trackEvent.receiver;
+ receiver.transform = receiverTransform;
+ resolve(trackEvent.streams[0]);
+ };
+ });
+ });
+
+ video.srcObject = stream;
+
+ const updatePromise = new Promise(resolve => worker.onmessage = (event) => resolve(event.data));
+ assert_equals(await updatePromise, "got expected");
+
+}, "Sender skips some frames and only writes one back. Receiver only receives that frame.");
+
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-sender-worker-single-frame.https.html b/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-sender-worker-single-frame.https.html
new file mode 100644
index 00000000000..bc5cfd9d6c4
--- /dev/null
+++ b/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-sender-worker-single-frame.https.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>RTCRtpScriptTransform Insertable Streams - Worker</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src=/resources/testdriver.js></script>
+<script src=/resources/testdriver-vendor.js></script>
+<script src='../../mediacapture-streams/permission-helper.js'></script>
+<script src="../../webrtc/RTCPeerConnection-helper.js"></script>
+</head>
+<body>
+<script>
+
+function areArrayBuffersEqual(buffer1, buffer2)
+{
+ if (buffer1.byteLength !== buffer2.byteLength) {
+ return false;
+ }
+ let array1 = new Int8Array(buffer1);
+ var array2 = new Int8Array(buffer2);
+ for (let i = 0 ; i < buffer1.byteLength ; ++i) {
+ if (array1[i] !== array2[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+
+promise_test(async t => {
+ const caller = new RTCPeerConnection();
+ t.add_cleanup(() => caller.close());
+ const callee = new RTCPeerConnection();
+ t.add_cleanup(() => callee.close());
+
+ // Video is used in a later test, so we ask for both permissions
+ await setMediaPermission();
+ const stream = await navigator.mediaDevices.getUserMedia({audio:true});
+ const track = stream.getTracks()[0];
+ t.add_cleanup(() => track.stop());
+
+ const audioSender = caller.addTrack(track);
+
+ const senderWorker = new Worker('RTCRtpScriptTransform-sender-worker-single-frame.js');
+ audioSender.transform = new RTCRtpScriptTransform(senderWorker);
+ t.add_cleanup(() => senderWorker.terminate());
+ let expectedFrameInfo = null;
+ let numVerifiedFrames = 0;
+ const onmessagePromise = new Promise(resolve => {
+ senderWorker.onmessage = t.step_func(message => {
+ if (!(message.data instanceof RTCEncodedAudioFrame)) {
+ // This is the first message sent from the Worker to the test.
+ // It contains an object (not an RTCEncodedAudioFrame) with the same
+ // fields as the RTCEncodedAudioFrame to be sent in follow-up messages.
+ // These serve as expected values to validate that the
+ // RTCEncodedAudioFrame is sent correctly back to the test in the next
+ // message.
+ expectedFrameInfo = message.data;
+ } else {
+ // This is the frame sent by the Worker after reading it from the
+ // readable stream. The Worker sends it twice after sending the
+ // verification message.
+ const frame = message.data;
+ assert_equals(frame.type, expectedFrameInfo.type);
+ assert_true(areArrayBuffersEqual(frame.data, expectedFrameInfo.data));
+ assert_equals(frame.getMetadata().synchronizationSource, expectedFrameInfo.metadata.synchronizationSource);
+ assert_equals(frame.getMetadata().rtpTimestamp, expectedFrameInfo.metadata.rtpTimestamp);
+
+ if (++numVerifiedFrames == 2)
+ resolve();
+ }
+ });
+ });
+
+ exchangeIceCandidates(caller, callee);
+ await exchangeOfferAnswer(caller, callee);
+
+ return onmessagePromise;
+}, 'RTCRtpSender initializes its transform attribute and the Worker sends an RTCEncodedAudioFrame back');
+
+promise_test(async t => {
+ const caller = new RTCPeerConnection();
+ t.add_cleanup(() => caller.close());
+ const callee = new RTCPeerConnection();
+ t.add_cleanup(() => callee.close());
+
+ const stream = await navigator.mediaDevices.getUserMedia({video:true});
+ const videoTrack = stream.getVideoTracks()[0];
+ t.add_cleanup(() => videoTrack.stop());
+
+ const videoSender = caller.addTrack(videoTrack)
+
+ const senderWorker = new Worker('RTCRtpScriptTransform-sender-worker-single-frame.js');
+ videoSender.transform = new RTCRtpScriptTransform(senderWorker);
+ t.add_cleanup(() => senderWorker.terminate());
+
+ let expectedFrameInfo = null;
+ let numVerifiedFrames = 0;
+ const onmessagePromise = new Promise(resolve => {
+ senderWorker.onmessage = t.step_func(message => {
+ if (!(message.data instanceof RTCEncodedVideoFrame)) {
+ // This is the first message sent from the Worker to the test.
+ // It contains an object (not an RTCEncodedVideoFrame) with the same
+ // fields as the RTCEncodedVideoFrame to be sent in follow-up messages.
+ // These serve as expected values to validate that the
+ // RTCEncodedVideoFrame is sent correctly back to the test in the next
+ // message.
+ expectedFrameInfo = message.data;
+ } else {
+ // This is the frame sent by the Worker after reading it from the
+ // readable stream. The Worker sends it twice after sending the
+ // verification message.
+ const frame = message.data;
+ assert_equals(frame.type, expectedFrameInfo.type);
+ assert_true(areArrayBuffersEqual(frame.data, expectedFrameInfo.data));
+ assert_equals(frame.getMetadata().synchronizationSource, expectedFrameInfo.metadata.synchronizationSource);
+ assert_equals(frame.getMetadata().rtpTimestamp, expectedFrameInfo.metadata.rtpTimestamp);
+ if (++numVerifiedFrames == 2)
+ resolve();
+ }
+ });
+ });
+
+ exchangeIceCandidates(caller, callee);
+ await exchangeOfferAnswer(caller, callee);
+
+ return onmessagePromise;
+}, 'RTCRtpSender initializes its transform attribute and the Worker sends an RTCEncodedVideoFrame back');
+
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-sender-worker-single-frame.js b/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-sender-worker-single-frame.js
new file mode 100644
index 00000000000..06fa607635a
--- /dev/null
+++ b/tests/wpt/tests/webrtc-encoded-transform/RTCRtpScriptTransform-sender-worker-single-frame.js
@@ -0,0 +1,16 @@
+onrtctransform = async (event) => {
+ const readableStream = event.transformer.readable;
+ const reader = readableStream.getReader();
+ const result = await reader.read();
+ // Post an object with individual fields so that the test side has
+ // values to verify the serialization of the RTCEncodedVideoFrame.
+ postMessage({
+ type: result.value.type,
+ data: result.value.data,
+ metadata: result.value.getMetadata(),
+ });
+ // Send the frame twice to verify that the frame does not change after the
+ // first serialization.
+ postMessage(result.value);
+ postMessage(result.value);
+} \ No newline at end of file
diff --git a/tests/wpt/tests/webrtc/protocol/pt-no-bundle.html b/tests/wpt/tests/webrtc/protocol/pt-no-bundle.html
new file mode 100644
index 00000000000..e434d2e86fa
--- /dev/null
+++ b/tests/wpt/tests/webrtc/protocol/pt-no-bundle.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>RTCPeerconnection Payload Type Reuse</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../RTCPeerConnection-helper.js"></script>
+<script>
+'use strict';
+const preamble = `v=0
+o=- 0 3 IN IP4 127.0.0.1
+s=-
+t=0 0
+a=fingerprint:sha-256 A7:24:72:CA:6E:02:55:39:BA:66:DF:6E:CC:4C:D8:B0:1A:BF:1A:56:65:7D:F4:03:AD:7E:77:43:2A:29:EC:93
+a=ice-ufrag:6HHHdzzeIhkE0CKj
+a=ice-pwd:XYDGVpfvklQIEnZ6YnyLsAew
+m=video 1 RTP/SAVPF 100
+c=IN IP4 0.0.0.0
+a=rtcp-mux
+a=mid:video
+a=rtpmap:100 VP8/90000
+a=setup:actpass
+m=audio 1 RTP/SAVPF 100
+c=IN IP4 0.0.0.0
+a=rtcp-mux
+a=mid:audio
+a=rtpmap:100 opus/48000/2
+a=setup:actpass
+`;
+
+
+promise_test(async t => {
+ const pc = new RTCPeerConnection();
+ t.add_cleanup(() => pc.close());
+ const ontrackPromise = addEventListenerPromise(t, pc, 'track');
+ await pc.setRemoteDescription({type: 'offer', sdp: preamble});
+ assert_equals(pc.getReceivers().length, 2);
+ await pc.setLocalDescription();
+ assert_not_equals(pc.getReceivers()[0].transport,
+ pc.getReceivers()[1].transport);
+}, 'Description with no BUNDLE group and PT number reuse validates');
+
+</script>