diff options
366 files changed, 8783 insertions, 2336 deletions
diff --git a/tests/wpt/metadata-layout-2020/css/css-animations/inheritance.html.ini b/tests/wpt/metadata-layout-2020/css/css-animations/inheritance.html.ini new file mode 100644 index 00000000000..382b1e2efcc --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-animations/inheritance.html.ini @@ -0,0 +1,3 @@ +[inheritance.html] + [Property animation-duration has initial value auto] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-delay-end-computed.tentative.html.ini b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-delay-end-computed.tentative.html.ini new file mode 100644 index 00000000000..f4ec3b330f0 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-delay-end-computed.tentative.html.ini @@ -0,0 +1,12 @@ +[animation-delay-end-computed.tentative.html] + [Property animation-delay-end value 'initial'] + expected: FAIL + + [Property animation-delay-end value '-500ms'] + expected: FAIL + + [Property animation-delay-end value 'calc(2 * 3s)'] + expected: FAIL + + [Property animation-delay-end value '20s, 10s'] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-delay-end-valid.tentative.html.ini b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-delay-end-valid.tentative.html.ini new file mode 100644 index 00000000000..0809ede9423 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-delay-end-valid.tentative.html.ini @@ -0,0 +1,12 @@ +[animation-delay-end-valid.tentative.html] + [e.style['animation-delay-end'\] = "-5ms" should set the property value] + expected: FAIL + + [e.style['animation-delay-end'\] = "0s" should set the property value] + expected: FAIL + + [e.style['animation-delay-end'\] = "10s" should set the property value] + expected: FAIL + + [e.style['animation-delay-end'\] = "20s, 10s" should set the property value] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-delay-start-computed.tentative.html.ini b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-delay-start-computed.tentative.html.ini new file mode 100644 index 00000000000..8341379e4d8 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-delay-start-computed.tentative.html.ini @@ -0,0 +1,12 @@ +[animation-delay-start-computed.tentative.html] + [Property animation-delay-start value 'initial'] + expected: FAIL + + [Property animation-delay-start value '-500ms'] + expected: FAIL + + [Property animation-delay-start value 'calc(2 * 3s)'] + expected: FAIL + + [Property animation-delay-start value '20s, 10s'] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-delay-start-valid.tentative.html.ini b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-delay-start-valid.tentative.html.ini new file mode 100644 index 00000000000..4ad3bb1e96b --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-delay-start-valid.tentative.html.ini @@ -0,0 +1,12 @@ +[animation-delay-start-valid.tentative.html] + [e.style['animation-delay-start'\] = "-5ms" should set the property value] + expected: FAIL + + [e.style['animation-delay-start'\] = "0s" should set the property value] + expected: FAIL + + [e.style['animation-delay-start'\] = "10s" should set the property value] + expected: FAIL + + [e.style['animation-delay-start'\] = "20s, 10s" should set the property value] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-shorthand.html.ini b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-shorthand.html.ini index 24d9f069eee..a9e8a84265d 100644 --- a/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-shorthand.html.ini +++ b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-shorthand.html.ini @@ -25,3 +25,9 @@ [e.style['animation'\] = "4 1s -3s cubic-bezier(0, -2, 1, 3), anim paused both reverse" should set animation-range-start] expected: FAIL + + [e.style['animation'\] = "anim paused both reverse, 4 1s -3s cubic-bezier(0, -2, 1, 3)" should set animation-duration] + expected: FAIL + + [e.style['animation'\] = "4 1s -3s cubic-bezier(0, -2, 1, 3), anim paused both reverse" should set animation-duration] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-valid.html.ini b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-valid.html.ini new file mode 100644 index 00000000000..d8f84798d62 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-animations/parsing/animation-valid.html.ini @@ -0,0 +1,24 @@ +[animation-valid.html] + [e.style['animation'\] = "cubic-bezier(0, -2, 1, 3)" should set the property value] + expected: FAIL + + [e.style['animation'\] = "4" should set the property value] + expected: FAIL + + [e.style['animation'\] = "reverse" should set the property value] + expected: FAIL + + [e.style['animation'\] = "both" should set the property value] + expected: FAIL + + [e.style['animation'\] = "paused" should set the property value] + expected: FAIL + + [e.style['animation'\] = "none" should set the property value] + expected: FAIL + + [e.style['animation'\] = "anim" should set the property value] + expected: FAIL + + [e.style['animation'\] = "anim paused both reverse, 4 1s -3s cubic-bezier(0, -2, 1, 3)" should set the property value] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-color/animation/color-interpolation.html.ini b/tests/wpt/metadata-layout-2020/css/css-color/animation/color-interpolation.html.ini index d59eaeea327..cb2c506e4a8 100644 --- a/tests/wpt/metadata-layout-2020/css/css-color/animation/color-interpolation.html.ini +++ b/tests/wpt/metadata-layout-2020/css/css-color/animation/color-interpolation.html.ini @@ -448,3 +448,39 @@ [Web Animations: property <color> from [color(srgb 0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(150 0 0)\]] expected: FAIL + + [CSS Transitions: property <color> from [rgb(0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Transitions with transition: all: property <color> from [rgb(0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Animations: property <color> from [rgb(0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [Web Animations: property <color> from [rgb(0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Transitions: property <color> from [color(srgb 0 0 0)\] to [rgb(255 255 255)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Transitions with transition: all: property <color> from [color(srgb 0 0 0)\] to [rgb(255 255 255)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Animations: property <color> from [color(srgb 0 0 0)\] to [rgb(255 255 255)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [Web Animations: property <color> from [color(srgb 0 0 0)\] to [rgb(255 255 255)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Transitions: property <color> from [color(srgb 0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Transitions with transition: all: property <color> from [color(srgb 0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Animations: property <color> from [color(srgb 0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [Web Animations: property <color> from [color(srgb 0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-color/animation/opacity-animation-ending-correctly-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-color/animation/opacity-animation-ending-correctly-001.html.ini deleted file mode 100644 index 304b1579ca4..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-color/animation/opacity-animation-ending-correctly-001.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[opacity-animation-ending-correctly-001.html] - expected: TIMEOUT diff --git a/tests/wpt/metadata-layout-2020/css/css-color/parsing/color-valid-color-mix-function.html.ini b/tests/wpt/metadata-layout-2020/css/css-color/parsing/color-valid-color-mix-function.html.ini index bf32053353b..5cceaf5ee0a 100644 --- a/tests/wpt/metadata-layout-2020/css/css-color/parsing/color-valid-color-mix-function.html.ini +++ b/tests/wpt/metadata-layout-2020/css/css-color/parsing/color-valid-color-mix-function.html.ini @@ -1,4 +1,5 @@ [color-valid-color-mix-function.html] + expected: ERROR [e.style['color'\] = "color-mix(in srgb, red, blue)" should set the property value] expected: FAIL @@ -1564,3 +1565,39 @@ [e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / none))" should set the property value] expected: FAIL + + [e.style['color'\] = "color-mix(in hsl specified hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hsl specified hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hsl specified hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hsl specified hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hsl specified hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hsl specified hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hwb specified hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hwb specified hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hwb specified hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hwb specified hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hwb specified hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hwb specified hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))" should set the property value] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-color/parsing/color-valid-hwb.html.ini b/tests/wpt/metadata-layout-2020/css/css-color/parsing/color-valid-hwb.html.ini index 8c9a4ca783d..b52a2cd54fa 100644 --- a/tests/wpt/metadata-layout-2020/css/css-color/parsing/color-valid-hwb.html.ini +++ b/tests/wpt/metadata-layout-2020/css/css-color/parsing/color-valid-hwb.html.ini @@ -19,3 +19,6 @@ [e.style['color'\] = "hwb(none 100% 50% / none)" should set the property value] expected: FAIL + + [e.style['color'\] = "hwb(320deg 30% 40%)" should set the property value] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/percentage-padding-003.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/percentage-padding-003.html.ini new file mode 100644 index 00000000000..7bb1493db2f --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/percentage-padding-003.html.ini @@ -0,0 +1,2 @@ +[percentage-padding-003.html] + expected: FAIL diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 7b54679069b..7df803243c2 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -3823,7 +3823,14 @@ {} ] ] - } + }, + "infinite-duration-crash.html": [ + "dba53d66b7ac7bddcdc444dfd470cd37345f6a4d", + [ + null, + {} + ] + ] }, "css-typed-om": { "perspective-typed-arithmetic-crash.html": [ @@ -4526,6 +4533,13 @@ {} ] ], + "inserthtml-in-li-in-option.html": [ + "c8aa9f780f45b071b827704c564003808061c9b0", + [ + null, + {} + ] + ], "inserthtml-in-text-adopted-to-other-document.html": [ "d8234f917a2ae32790eb71cc62d12de7ba99323a", [ @@ -5496,13 +5510,6 @@ {} ] ], - "popover-hide-crash.html": [ - "3e0c694976cd3798ffd319129c6b4494f5ee4267", - [ - null, - {} - ] - ], "popover-hint-crash.tentative.html": [ "82f83538e93e364dc90b45aa41515a586ea2089b", [ @@ -29823,6 +29830,32 @@ {} ] ], + "transform-002-print.html": [ + "3ab37bf5bd867dac5518a64569af2dcefc797e13", + [ + null, + [ + [ + "/css/printing/transform-002-print-ref.html", + "==" + ] + ], + {} + ] + ], + "transform-003-print.html": [ + "c8effbb8f35c80bed2fa64f8853e62bd12589fbb", + [ + null, + [ + [ + "/css/printing/transform-003-print-ref.html", + "==" + ] + ], + {} + ] + ], "transition-in-media-print.tentative.html": [ "54bac1f48124a27689dc2f614003d462fe2dd477", [ @@ -30246,12 +30279,12 @@ ] ], "scroll-timeline-default-print.tentative.html": [ - "975a59812e9b4d45877fd0c9acdfd10079029d49", + "3f25cc93dba6a6f8c360e416b328f897cab29e99", [ null, [ [ - "/scroll-animations/css/scroll-timeline-default-ref.html", + "/scroll-animations/css/printing/scroll-timeline-default-print-ref.html", "==" ] ], @@ -137510,6 +137543,19 @@ {} ] ], + "order-of-images.htm": [ + "9f165fb9b5aacf8f71043fd45ebbafecfacb619e", + [ + null, + [ + [ + "/css/css-backgrounds/reference/order-of-images-ref.html", + "==" + ] + ], + {} + ] + ], "scroll-positioned-multiple-background-images.html": [ "a9ca550ce3dea2626de05bf31437a0a19aeedbce", [ @@ -138194,6 +138240,32 @@ {} ] ], + "abspos-in-opacity-002.html": [ + "e6d61eacd1af3e34111013a44afca09d92fe1418", + [ + null, + [ + [ + "/css/reference/ref-filled-greenish-100px-square.html", + "==" + ] + ], + {} + ] + ], + "abspos-in-opacity-003.html": [ + "13a1b31add5cb2c755dc6d36ee8e74a27de8a001", + [ + null, + [ + [ + "/css/reference/ref-filled-greenish-100px-square.html", + "==" + ] + ], + {} + ] + ], "abspos-inside-relpos-inside-monolithic.html": [ "879097f3fc2a7c933a1c2bea460beed1f6bc5e2b", [ @@ -138441,6 +138513,19 @@ {} ] ], + "block-max-height-004.html": [ + "4ceb23a80bf0beb9032ee7567e034e27360157b1", + [ + null, + [ + [ + "/css/css-break/block-max-height-004-ref.html", + "==" + ] + ], + {} + ] + ], "block-min-height-001.html": [ "47ceff763195d254b22dd8739e1a46b0168df50f", [ @@ -139234,6 +139319,32 @@ {} ] ], + "clipping-001.html": [ + "da15ec7a2e383b34570130e24bf1707423dd12a1", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "clipping-002.html": [ + "e1f2c4e1c6bbe3b455c223c8c617f2f33237ccd8", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "contain-strict-with-opacity-and-oof.html": [ "b3323a60c75247249f4494834bbf2b57dda172d4", [ @@ -148098,6 +148209,136 @@ {} ] ], + "transform-012.html": [ + "4156aff6298fffe862fe109f4693124cda6ec5db", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "transform-013.html": [ + "31cce10b52f38c4960d1d265e07fd1b363d20ae0", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "transform-014.html": [ + "16fc15d760d4afa95d7488d22e334f1cd809ef45", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "transform-015.html": [ + "676c291b6ef89e6d25e09447f624bc7889b34ac4", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "transform-016.html": [ + "5a10d860c3feaa787db420b0fec4f5bfaaa6fa96", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "transform-017.html": [ + "b01e3ccee765916161302bbe3fe5040201ffc9c4", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "transform-018.html": [ + "dc9a791e6a8fdb025ceb4f43c1643617af1a5aab", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "transform-019.html": [ + "758ff713ba273d417294293c9277eb33b209d8d9", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "transform-020.html": [ + "e15df5f7342c79ef4759c8f744c0ac838ed69225", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "transform-021.html": [ + "c97ef30b7f5db59bf1975b68459a1226d6384c5d", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "truncated-margin-at-fragmentainer-end-001.html": [ "cfb8590f9026194020afaea854f1d4d9fc570b49", [ @@ -150158,6 +150399,32 @@ {} ] ], + "lab-l-over-100-1.html": [ + "fdb3955e96ee4fc00e33db85134fc78adb84002b", + [ + null, + [ + [ + "/css/css-color/lab-l-over-100-ref.html", + "==" + ] + ], + {} + ] + ], + "lab-l-over-100-2.html": [ + "f62f9e0559b0c23106a29848bcf3e5515e16ff04", + [ + null, + [ + [ + "/css/css-color/lab-l-over-100-ref.html", + "==" + ] + ], + {} + ] + ], "lch-001.html": [ "904e2e5bd7c75dade264e22aa3a145ad56625d67", [ @@ -150288,6 +150555,32 @@ {} ] ], + "lch-l-over-100-1.html": [ + "9711956242df6e903d8ebcd3eebe2820c7b8b1e6", + [ + null, + [ + [ + "/css/css-color/lch-l-over-100-ref.html", + "==" + ] + ], + {} + ] + ], + "lch-l-over-100-2.html": [ + "a909a49f0c2344e3b8934a9b4d9b80a77ddac8fc", + [ + null, + [ + [ + "/css/css-color/lch-l-over-100-ref.html", + "==" + ] + ], + {} + ] + ], "named-001.html": [ "61a98dcb7bb02fab3db18ed337eee5ddb07724fc", [ @@ -157656,6 +157949,19 @@ {} ] ], + "container-units-rule-cache.html": [ + "cc93f7793ae6bd57a8ee30e5d6322a6ff43e93cb", + [ + null, + [ + [ + "/css/css-contain/container-queries/container-units-rule-cache-ref.html", + "==" + ] + ], + {} + ] + ], "counters-in-container-dynamic.html": [ "d85ab6cb425ba792914b39901cd3f3ba3943b606", [ @@ -160548,19 +160854,6 @@ {} ] ], - "fallback-cycle.html": [ - "2e63a3f4d4445f1b57b216446f8d4474ff5808b1", - [ - null, - [ - [ - "/css/css-counter-styles/counter-style-at-rule/fallback-cycle-ref.html", - "==" - ] - ], - {} - ] - ], "fallbacks-in-shadow-dom.html": [ "d51f70bc31c011fe9853755715a710837090a700", [ @@ -160639,19 +160932,6 @@ {} ] ], - "suffix-fallback.html": [ - "7684c9a10a9c09bc768cbb44a7379c1599f09eed", - [ - null, - [ - [ - "/css/css-counter-styles/counter-style-at-rule/suffix-fallback-ref.html", - "==" - ] - ], - {} - ] - ], "symbols-function-invalid.html": [ "35aa83258726c89efc2c0e31a1e3927362c7f4e2", [ @@ -176740,6 +177020,19 @@ {} ] ], + "percentage-padding-003.html": [ + "ee84f1570efb877843384b923e8a28ee58537f70", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "percentage-size-subitems-001.html": [ "70f3953052a3a770c6cd15ee169607a00fc452b0", [ @@ -189236,6 +189529,19 @@ ] ] }, + "masonry-columns-item-containing-block-is-grid-content-width.html": [ + "e48b650253974a22e2dbf68eee6505ca918ddde7", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], "order": { "masonry-order-001.html": [ "d01f52ea0421199c37d04408b42d0f6929876301", @@ -190326,6 +190632,32 @@ {} ] ], + "subgrid-no-items-on-edges-001.html": [ + "e2fe1a366e5cb013842f5730fda4a94cab2ae92b", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "subgrid-no-items-on-edges-002.html": [ + "a2c73b188437434cfd4cb6943f5781413c6ff3a0", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "subgrid-stretch.html": [ "321e12d2a3ba6d1bab3623c385153b2375c1b441", [ @@ -190338,6 +190670,19 @@ ], {} ] + ], + "writing-directions-001.html": [ + "24caaebc4f181ca1b3acc5c759ce51c4b84cd15e", + [ + null, + [ + [ + "/css/css-grid/subgrid/writing-directions-001-ref.html", + "==" + ] + ], + {} + ] ] }, "table-grid-item-dynamic-001.html": [ @@ -190408,6 +190753,19 @@ }, "css-highlight-api": { "painting": { + "css-highlight-painting-underline-offset-001.html": [ + "14b238ce1700fc9e1fe1ea3745b0a818d5c615c1", + [ + null, + [ + [ + "/css/css-highlight-api/painting/css-highlight-painting-underline-offset-001-ref.html", + "==" + ] + ], + {} + ] + ], "custom-highlight-painting-001.html": [ "82b61ec6de07c4d45796785f3e7b559e64a6deab", [ @@ -190448,7 +190806,7 @@ ] ], "custom-highlight-painting-004-2.html": [ - "044cdb5d649e3b173511cd82705ffef9eb5044a2", + "0a612d66d1e13449590cfc1144b34e7ce17b6f6e", [ null, [ @@ -190457,11 +190815,27 @@ "==" ] ], - {} + { + "fuzzy": [ + [ + null, + [ + [ + 0, + 88 + ], + [ + 0, + 1 + ] + ] + ] + ] + } ] ], "custom-highlight-painting-004.html": [ - "b67c30b70972fb22ba20b902b21a118ca58bbb1f", + "320617f8d1f8918b4db8515dd34fda6d33d32260", [ null, [ @@ -190470,7 +190844,23 @@ "==" ] ], - {} + { + "fuzzy": [ + [ + null, + [ + [ + 0, + 255 + ], + [ + 0, + 110 + ] + ] + ] + ] + } ] ], "custom-highlight-painting-005.html": [ @@ -190994,7 +191384,7 @@ ] ], "custom-highlight-painting-text-decoration-001.html": [ - "df6e5dd32cc9260743ab096acf3bb13cf8f9abfb", + "72201e6e782362df53765264188b0f7e96fdd927", [ null, [ @@ -191003,7 +191393,23 @@ "==" ] ], - {} + { + "fuzzy": [ + [ + null, + [ + [ + 0, + 255 + ], + [ + 0, + 27 + ] + ] + ] + ] + } ] ], "custom-highlight-painting-text-decoration-dynamic-001.html": [ @@ -192770,7 +193176,7 @@ ] ], "image-set-type-first-match-rendering.html": [ - "7e6ea8fa1f785ccde919b85ce2922c78c886acbe", + "eafe5bfb2cc80f18174f4a9f4f2a08963cc95e5d", [ null, [ @@ -196816,6 +197222,32 @@ ] }, "text-box-trim": { + "text-box-trim-half-leading-block-box-001-ref.html": [ + "4fc498a27bded7e4e870a055128f003383792bee", + [ + null, + [ + [ + "/css/css-inline/text-box-trim/text-box-trim-half-leading-inline-box-001-ref.html", + "==" + ] + ], + {} + ] + ], + "text-box-trim-half-leading-block-box-001.html": [ + "9ad9ffc3fc68184745549c4759ea9534fc174527", + [ + null, + [ + [ + "/css/css-inline/text-box-trim/text-box-trim-half-leading-inline-box-001-ref.html", + "==" + ] + ], + {} + ] + ], "text-box-trim-half-leading-inline-box-001.html": [ "4316301bd1bff7e58862700c6b7511914d14d21f", [ @@ -196828,6 +197260,19 @@ ], {} ] + ], + "text-box-trim-half-leading-inline-box-002.html": [ + "3e679f6ce89bfab53583b6a1f052b6635ab998b8", + [ + null, + [ + [ + "/css/css-inline/text-box-trim/text-box-trim-half-leading-inline-box-001-ref.html", + "==" + ] + ], + {} + ] ] } }, @@ -200791,6 +201236,71 @@ {} ] ], + "clip-path-path-interpolation-001.html": [ + "0c988e090e6b5775242208909b51e7dc83876664", + [ + null, + [ + [ + "/css/css-masking/clip-path/animations/clip-path-path-interpolation-001-ref.html", + "==" + ] + ], + {} + ] + ], + "clip-path-path-interpolation-002.html": [ + "4c1c485f7f814d6849b3dc41b0a1d2f0295068e3", + [ + null, + [ + [ + "/css/css-masking/clip-path/animations/clip-path-path-interpolation-002-ref.html", + "==" + ] + ], + {} + ] + ], + "clip-path-path-interpolation-with-zoom.html": [ + "50dc5e6f4e75cf8a1abfb5a972d94e6db23fa8c9", + [ + null, + [ + [ + "/css/css-masking/clip-path/animations/clip-path-path-interpolation-with-zoom-ref.html", + "==" + ] + ], + {} + ] + ], + "clip-path-shape-interpolation-001.html": [ + "dae7f24d37cb39b34728664a2d854dfd53bc8c48", + [ + null, + [ + [ + "/css/css-masking/clip-path/animations/clip-path-path-interpolation-001-ref.html", + "==" + ] + ], + {} + ] + ], + "clip-path-shape-interpolation-002.html": [ + "6af23c37d6b7bb4ed6780769be720d446f30fc2b", + [ + null, + [ + [ + "/css/css-masking/clip-path/animations/clip-path-path-interpolation-002-ref.html", + "==" + ] + ], + {} + ] + ], "clip-path-transition-custom-timing-function.html": [ "47b0cd6e751fe8c2282ce8c44746fa01d0340b30", [ @@ -201981,45 +202491,6 @@ {} ] ], - "clip-path-path-interpolation-001.html": [ - "9b12621b9d6bbd2575ce50ddd121faf69d436423", - [ - null, - [ - [ - "/css/css-masking/clip-path/reference/clip-path-path-interpolation-001-ref.html", - "==" - ] - ], - {} - ] - ], - "clip-path-path-interpolation-002.html": [ - "4cf6fb4a07d36891dd4785df5a742c6611f9dd0a", - [ - null, - [ - [ - "/css/css-masking/clip-path/reference/clip-path-path-interpolation-002-ref.html", - "==" - ] - ], - {} - ] - ], - "clip-path-path-interpolation-with-zoom.html": [ - "4d54708da198d2c35bc5980857a8248b9159d3d4", - [ - null, - [ - [ - "/css/css-masking/clip-path/reference/clip-path-path-interpolation-with-zoom-ref.html", - "==" - ] - ], - {} - ] - ], "clip-path-path-with-zoom.html": [ "5879917f36e7efb74db4b1aaeb8a05bee96f39cd", [ @@ -202400,32 +202871,6 @@ {} ] ], - "clip-path-shape-interpolation-001.html": [ - "1d881e5bd58e070b76b87f04ff8aa61544c67e41", - [ - null, - [ - [ - "/css/css-masking/clip-path/reference/clip-path-path-interpolation-001-ref.html", - "==" - ] - ], - {} - ] - ], - "clip-path-shape-interpolation-002.html": [ - "9d8ab65b2d99b522342d1ce2a599d404474ea188", - [ - null, - [ - [ - "/css/css-masking/clip-path/reference/clip-path-path-interpolation-002-ref.html", - "==" - ] - ], - {} - ] - ], "clip-path-strokeBox-1a.html": [ "31fec7516ca95ed541643936dbd831e52b9be83c", [ @@ -210985,7 +211430,7 @@ ] ], "implicit-nesting.html": [ - "05b9e04fa84dc464bb2fe3173199fbf350bbe3c1", + "0a76dedc5bf2c3f309dcdd1e8a9b0a9f37161e96", [ null, [ @@ -231342,6 +231787,19 @@ {} ] ], + "rules-groups.html": [ + "d07aa0b765892ec5fb153228271add2dfa21bc6f", + [ + null, + [ + [ + "/css/css-tables/rules-groups-ref.html", + "==" + ] + ], + {} + ] + ], "subpixel-collapsed-borders-001.html": [ "a74e7a104cd4d3ab79d5af201bee1abcf0aafc36", [ @@ -280390,6 +280848,19 @@ {} ] ], + "exit-transition-with-anonymous-layout-object.html": [ + "ea2d17b276100111263b1ea5278fbb4167042ee0", + [ + null, + [ + [ + "/css/css-view-transitions/exit-transition-with-anonymous-layout-object-ref.html", + "==" + ] + ], + {} + ] + ], "far-away-capture.html": [ "bfe0b9fb9484f5984fbea9460d40818a40ab6ddd", [ @@ -301617,6 +302088,45 @@ {} ] ], + "offset-path-coord-box-001.html": [ + "527459c6fddcc4f5d4409f311e2fb7175df35531", + [ + null, + [ + [ + "/css/motion/offset-path-coord-box-001-ref.html", + "==" + ] + ], + {} + ] + ], + "offset-path-coord-box-002.html": [ + "0abe4169400e1f8504628b17bc11bf8cd8e62a1a", + [ + null, + [ + [ + "/css/motion/offset-path-coord-box-002-ref.html", + "==" + ] + ], + {} + ] + ], + "offset-path-coord-box-003.html": [ + "6605d8e9a0d21dee7270ea99291aff45ea17f2e2", + [ + null, + [ + [ + "/css/motion/offset-path-coord-box-003-ref.html", + "==" + ] + ], + {} + ] + ], "offset-path-geometry-box.html": [ "1e9399441c2ec31e868e7fca6d2fa6d1169f366c", [ @@ -301826,7 +302336,7 @@ ] ], "offset-path-shape-circle-001.html": [ - "13df077df06f81bac68b537be14bbc04967bcecd", + "4874ba339298a18fb0a733e0254053579bbe50ac", [ null, [ @@ -301855,7 +302365,7 @@ ] ], "offset-path-shape-circle-002.html": [ - "8264abbbca0901c5b477a7075c29ad968bcf27ef", + "672396186a57b8229457439c003aa9d6b1b62f4d", [ null, [ @@ -301868,7 +302378,7 @@ ] ], "offset-path-shape-circle-003.html": [ - "eb00dacab30e1763ff0fed7405ee8a215001982d", + "1911d425a16997d6a6da3edb0474e527c8b1e2b6", [ null, [ @@ -301897,7 +302407,7 @@ ] ], "offset-path-shape-circle-004.html": [ - "39e80fa861b10c0bfed22469f00d2c5a8f42daf2", + "f0a8523dd16f15075828d9bcbbf31f62a97ff35d", [ null, [ @@ -301910,7 +302420,7 @@ ] ], "offset-path-shape-ellipse-001.html": [ - "35482636ba169d221f852c6c0dcb3ca6e80cf145", + "b8254458d38d71038f47dd80ffddbd971190b665", [ null, [ @@ -301939,7 +302449,7 @@ ] ], "offset-path-shape-ellipse-002.html": [ - "298e1dd52edb5c09ff8d369a488d6937e3bce404", + "461838aa8899a8326dc18034fd7c530983749cfc", [ null, [ @@ -301952,7 +302462,7 @@ ] ], "offset-path-shape-ellipse-003.html": [ - "2b79367b0bcb2773dd295ea6d0bd627d05d3997c", + "540c56dba7b39ccb93f29e766c9178585c82238a", [ null, [ @@ -301965,7 +302475,7 @@ ] ], "offset-path-shape-ellipse-004.html": [ - "2c95415b11f266938c72363d6d4383121c7350fa", + "0ed4816e3d0706730004f98bb2c7c0cbc644865a", [ null, [ @@ -311050,6 +311560,19 @@ ] }, "lists": { + "dir-type.html": [ + "d1f0ae3fe3f1f11eaf4e8cb508121a8f58118b5f", + [ + null, + [ + [ + "/html/rendering/non-replaced-elements/lists/dir-type-ref.html", + "==" + ] + ], + {} + ] + ], "li-type-supported-xhtml.xhtml": [ "7a7640e03f05754836b30923b4002d27bcebb538", [ @@ -314141,7 +314664,7 @@ ] ], "image-compositing-change.html": [ - "592720a82a266c72a507a8651a0dd85ab428663a", + "658c2ad39ea343e40de9aaf64dcb7c75b346ae6b", [ null, [ @@ -314150,7 +314673,23 @@ "==" ] ], - {} + { + "fuzzy": [ + [ + null, + [ + [ + 150, + 150 + ], + [ + 296, + 296 + ] + ] + ] + ] + } ] ], "image-compositing-large-scale-change.html": [ @@ -316048,7 +316587,7 @@ {} ] ], - "popover-open-overflow-display.html": [ + "popover-open-overflow-display.tentative.html": [ "3d4d833063877ce1a9a3338d534709f94bdcdd77", [ null, @@ -320490,6 +321029,19 @@ ], {} ] + ], + "view-timeline-subject-bounds-update.html": [ + "7001eceeaf8f4997d7fb3f8b297eaa3827c537e6", + [ + null, + [ + [ + "/scroll-animations/css/animation-update-ref.html?translate=100px&scroll=800", + "==" + ] + ], + {} + ] ] }, "scroll-timelines": { @@ -320628,7 +321180,7 @@ "selection": { "caret": { "collapse-pre-linestart-1.html": [ - "6863456f06e0173789634eff5a8ec22035f91388", + "e8bd262868cb1bdc2734a50a934d3222e6d69fe0", [ null, [ @@ -320641,7 +321193,7 @@ ] ], "collapse-pre-linestart-2.html": [ - "ac119cbb3167ee5e5f88742420d849b15dd58664", + "0feee464c98a66a73eb718dbaf76061a67a08610", [ null, [ @@ -327728,7 +328280,7 @@ }, "support": { ".azure-pipelines.yml": [ - "20d5ec0f43152ab77fdc1ad6bcea32354db39541", + "7851cd61e1f3e1ade11251758ac89831fbf80318", [] ], ".gitattributes": [ @@ -328110,7 +328662,7 @@ }, "generateKey": { "failures.js": [ - "c39e4d211cbdf466efd59a2cf822b4aa8a50f896", + "e0f0279a69bb885eb30cbe086796c281db0245bb", [] ], "successes.js": [ @@ -328120,7 +328672,7 @@ }, "import_export": { "okp_importKey_failures.js": [ - "a5cc08a01e9fc1c23c7c8cced51ba02be60b66d3", + "ebdb73616d658146152ebddb3fbd27eaf8b49c26", [] ] }, @@ -352720,7 +353272,7 @@ [] ], "fedcm-mock.js": [ - "cb48bdb27e846f50019741f33826586df377f75a", + "16a72b1d2c3ced916368c50c096376a319ea7a4c", [] ], "fedcm-mojojs-helper.js": [ @@ -372906,6 +373458,10 @@ "fe2ac8bdb1994fe6bd36ba85d7c71f49b7d7cf89", [] ], + "order-of-images-ref.html": [ + "a704cd4f93bb012525bdb2639aba7322bbd18ebd", + [] + ], "ref-filled-black-96px-square.xht": [ "7309746e54f73c9d0f978d1986b6df40e950793b", [] @@ -373537,6 +374093,10 @@ "40ecf750be0f316b52eadfd533822ce4d675d07e", [] ], + "block-max-height-004-ref.html": [ + "74a2ed73c17bc57d1541e2821b23aca578e97d4e", + [] + ], "block-min-height-001-ref.html": [ "492a9a19ae2d992f01e79700dff51f2d09397095", [] @@ -374233,6 +374793,10 @@ "9d0bc0c6c765b45b54b76bfeeb2e8e9720f9540d", [] ], + "lab-l-over-100-ref.html": [ + "57328cfa7c5569850f1d69fbcb6cab7c81b68478", + [] + ], "lch-004-ref.html": [ "2bc1e8285720e69646f1f17fd2c1fd7a0c4d76fd", [] @@ -374249,6 +374813,10 @@ "95a260e8f2f4ae9085a33734c28a7d16da73fa82", [] ], + "lch-l-over-100-ref.html": [ + "67766274e59aced21539d94499d3a324d11b8478", + [] + ], "mossgreensquare-ref.html": [ "06f866c02dd04724a35cf5032b1d40e6783c3389", [] @@ -374922,6 +375490,10 @@ "dbdabd9bc4ecee3eec34406e7fd13a1e04141978", [] ], + "container-units-rule-cache-ref.html": [ + "6c8261959f674aa8a80f1f1f8fda343e64450114", + [] + ], "counters-ref.html": [ "303c1e89bdfe5449177a2d144f4be1e1760a80d5", [] @@ -376008,10 +376580,6 @@ "7d0dbc3314d8379deb597d08e97804cfc51aa4ab", [] ], - "fallback-cycle-ref.html": [ - "22bcf8d9b4ef3963020b3e834c893756426df412", - [] - ], "fallbacks-in-shadow-dom-ref.html": [ "53e467bb391884ec9751edfcffe85f03c8502e08", [] @@ -376036,10 +376604,6 @@ "7f1af7532075c983e7fc0bcec7cd14830e0c13eb", [] ], - "suffix-fallback-ref.html": [ - "15cd54cb24f18b64f1bbbc900287bd9734a5f093", - [] - ], "support": { "counter-style-testcommon.js": [ "a3615e92ff0678d5e7b2aad0a20076cd1ac07d6e", @@ -388279,6 +388843,10 @@ "subgrid-stretch-ref.html": [ "33e8669da01787826ea27895323f17b5b3a6a2c9", [] + ], + "writing-directions-001-ref.html": [ + "90612516889e8feb5b5b0ce6820b44d8531ab8be", + [] ] }, "support": { @@ -388316,6 +388884,10 @@ }, "css-highlight-api": { "painting": { + "css-highlight-painting-underline-offset-001-ref.html": [ + "3d01bccf55dd9c20e361551bc924d5c9353c503e", + [] + ], "custom-highlight-painting-001-ref.html": [ "b058789f6de04c017dec9a37d8955485dcd6b7e9", [] @@ -389639,6 +390211,10 @@ "text-box-trim-half-leading-inline-box-001-ref.html": [ "4824309291df136db30d79b4a9dddc115f48b117", [] + ], + "text-box-trim-half-leading-inline-box-002-ref.html": [ + "4ae48240456e67573be05586b89c9dba67d36477", + [] ] } }, @@ -390311,6 +390887,18 @@ "99126195a13b6e09a9e6080277a454d19c8576bf", [] ], + "clip-path-path-interpolation-001-ref.html": [ + "4e26ac61f62a61c3edb91d91acbd1aa1d5b35655", + [] + ], + "clip-path-path-interpolation-002-ref.html": [ + "567764a30124c2bc8821a508e2a7f8b6f0787c7e", + [] + ], + "clip-path-path-interpolation-with-zoom-ref.html": [ + "7e0d2a54266f3855dbc8e8e87167a06ea0cc323b", + [] + ], "clip-path-transition-ref.html": [ "af164c30f06808c3394cf3210ca13bc41792d53c", [] @@ -390433,18 +391021,6 @@ "d9ea5183fb1e6aa745c01f02e702df065d4945e6", [] ], - "clip-path-path-interpolation-001-ref.html": [ - "4e26ac61f62a61c3edb91d91acbd1aa1d5b35655", - [] - ], - "clip-path-path-interpolation-002-ref.html": [ - "567764a30124c2bc8821a508e2a7f8b6f0787c7e", - [] - ], - "clip-path-path-interpolation-with-zoom-ref.html": [ - "7e0d2a54266f3855dbc8e8e87167a06ea0cc323b", - [] - ], "clip-path-path-with-zoom-ref.html": [ "ef91c619c40615f633c64d59bfe302fcfbd8c5fb", [] @@ -392024,7 +392600,7 @@ [] ], "implicit-nesting-ref.html": [ - "006216b60e71d2d1af9c3d6c9fc81ea4c53f1d1d", + "0057a67fd0370aec24e84df9f932d1da4e4f7f31", [] ], "nest-containing-forgiving-ref.html": [ @@ -396291,6 +396867,10 @@ "68cbcfc9c1ec6aa1fb940f5b26735e3b2fa3587e", [] ], + "rules-groups-ref.html": [ + "8da4884f80b690933ed9ea9fb17454474422fd44", + [] + ], "subpixel-collapsed-borders-ref.html": [ "0a2e7a8d95b95dc21ad1c103fdfba65b8f5b1b86", [] @@ -402309,7 +402889,7 @@ [] ], "properties.js": [ - "4b749db057ce11dbed2411f405326a740d89261a", + "0c0057b39e8041e57f2b460a195ba3ff0577a820", [] ], "ruler-h-50%.png": [ @@ -404459,6 +405039,10 @@ "523c8616a6666ddfab4dcf3b02dced31523a92b5", [] ], + "exit-transition-with-anonymous-layout-object-ref.html": [ + "10e04ac58a44e9005d7297ca17c63666ed2c542a", + [] + ], "far-away-capture-ref.html": [ "9e10b9b44e302a32f71c0fa7efac78eca9f0456a", [] @@ -408681,6 +409265,18 @@ "653dd8b10516a08042a40a7dbdb8b31477a42df7", [] ], + "offset-path-coord-box-001-ref.html": [ + "679b43fe705e67ff512b63c29a3f47b578623dbc", + [] + ], + "offset-path-coord-box-002-ref.html": [ + "a722ec3bd3e2e009b24a03eb6dd528be0ff13483", + [] + ], + "offset-path-coord-box-003-ref.html": [ + "f6e6203f4a0caaa759c0dd4b2987121832d89a84", + [] + ], "offset-path-geometry-box-ref.html": [ "eb7646db6625d63ef2ee857c5e1e48ec527c9c9e", [] @@ -408953,6 +409549,14 @@ "45c3abf1810a55dc760058bf5fcc3064f3bac188", [] ], + "transform-002-print-ref.html": [ + "7204e1d65712ce4e4b8680184b976b8982b6a981", + [] + ], + "transform-003-print-ref.html": [ + "766c415a1be21e6ebf9022a0826a1e865688fcb8", + [] + ], "transition-in-media-print-ref.html": [ "2f25c06131e9372512e23ab9ff8428c594f74391", [] @@ -409031,6 +409635,10 @@ "05c223561c945bf4697d57a55287522965061d10", [] ], + "ref-filled-greenish-100px-square.html": [ + "bff74d4c9cf2356d9ea01ebb5f5a3a9650ebd6e7", + [] + ], "ref-nothing-below.xht": [ "c87db8094bd4bbb7ba5f18816730fd40c198149d", [] @@ -415328,6 +415936,10 @@ "9a97d45bd1247cd6c566f4f3cfb5b7e6d40876e8", [] ], + "empty.html": [ + "0e76edd65b7baf5316fc9d0c4da59a3502e4c27a", + [] + ], "fenced-frame.sub.py": [ "c29bb6fecccf5dc47ef82e4dc2fda4991b993f85", [] @@ -416797,7 +417409,7 @@ [] ], "generic-sensor-tests.js": [ - "65f58ee7ca2c42b77b196a57276be3c935d598b8", + "3c8f478c541dcdb28d27012574dbdeb407902a16", [] ], "resources": { @@ -420681,7 +421293,7 @@ "yaml": { "element": { "drawing-text-to-the-canvas.yaml": [ - "e0de95560cb122a2a2d6ea9ac47fcbf93ad941e0", + "3443ad35b3cdccffb0dcb383b946dcd81a0521d5", [] ], "fill-and-stroke-styles.yaml": [ @@ -420723,7 +421335,7 @@ [] ], "text.yaml": [ - "80c54ca6b664e63b6f54e3978c6665f1c9ba2a24", + "784a099aca09747325bbc800a0976031a4324d08", [] ], "the-canvas-state.yaml": [ @@ -421394,11 +422006,11 @@ }, "resources": { "reporting-common.js": [ - "19f6410cbf809eefe299b08e73356d8443c04049", + "70bb4897f5082d84bd26f618dd8212d8f17e0862", [] ], "test-access-property.js": [ - "fe01e9128c51bd0ee65ba212967dcc989ac1bf1e", + "a405202431e6f06c998a6316a6b2c2d613ebfe8c", [] ], "try-access.js": [ @@ -421518,6 +422130,22 @@ "popup-with-same-site.https.html.headers": [ "d5c99062d2bb8f9660b68c172754867b598ed43f", [] + ], + "reporting-from-rp-ro.https.html.sub.headers": [ + "424ad3e8de0297a2e66dd53914f0e5faa8651bff", + [] + ], + "reporting-from-rp.https.html.sub.headers": [ + "6339ea34c7045eabe7457cf0c170edd35ea2ba76", + [] + ], + "reporting-to-rp-ro.https.html.headers": [ + "16903320bb50789e0a64f9620540f1cc8c0902fd", + [] + ], + "reporting-to-rp.https.html.headers": [ + "16903320bb50789e0a64f9620540f1cc8c0902fd", + [] ] } } @@ -425841,6 +426469,10 @@ "6d79efc3846c8e427627e9d95af5699ca7096197", [] ], + "dir-type-ref.html": [ + "710b39ceca58425f3b6756e7e1312ad774bb6bbe", + [] + ], "li-type-supported-ref.html": [ "0de7ff329c2ab39800796ea5b5136df9e329953d", [] @@ -428732,7 +429364,7 @@ [] ], "popover-utils.js": [ - "39de6aa99b1fc810f5025f6c2d0e50780b4c6130", + "aa69b7d41ae032330dc20a9e565e0b1ff9c53058", [] ] } @@ -432917,7 +433549,7 @@ [] ], "wheelScroll.html.ini": [ - "cfa28e9b46c134f712dcecfde874fb037ef7664a", + "5632dcf11290d53739edbcc47191658719e80cd4", [] ] }, @@ -440746,11 +441378,11 @@ [] ], "header-delay.h2.py": [ - "be29e52b0e836ca0228b9e51cd22c31a0bb4c899", + "27b6fd5bfbb70445454ed7ec0735b662b4c15091", [] ], "header-delay.py": [ - "a47a63e9814a78bd06e2f55922de27fe073da45f", + "631f7855f86bb64df6e84306de0ed5562d913f56", [] ], "iframe-TAO-crossorigin-port.sub.html": [ @@ -441768,6 +442400,10 @@ "09bcba2fd4d94085fab9dd5cd453aee7ffd259d0", [] ], + "scroll-timeline-default-print-ref.html": [ + "6610f7a5a7e503c2deab83a7cde3979222898abc", + [] + ], "scroll-timeline-specified-scroller-ref.html": [ "d2f2d8f73d71f84c0c1111e6f923929acdb22a3a", [] @@ -445304,6 +445940,10 @@ "4a0a7a360209059937222e9eaebbd38f05c6240e", [] ], + "prefetch_nvs_hint.py": [ + "09c5d2eb737289ce0349fbefa8120ea4ab6dd26a", + [] + ], "redirect.py": [ "de7a4af98759e725f499ba8e68987bbbc58db9bb", [] @@ -447100,11 +447740,11 @@ [] ], "cacert.key": [ - "a02adcacab1f368b3507fb76df76245601c2ba38", + "39a1bf60a782457dad0a3580414fb56ff3de6534", [] ], "cacert.pem": [ - "101ed617415d64ee0a6a7c64806845c693033dbb", + "79bf67fe5123676358602f144e57c712a692afa5", [] ], "config.json": [ @@ -447112,11 +447752,11 @@ [] ], "web-platform.test.key": [ - "26b926f7a5f766684985ab88f09837933abf8359", + "f1eb177cad2c0037b91edf85062bcf4256ab04c8", [] ], "web-platform.test.pem": [ - "be1bfd5a1f192866a9375160ff88a8c3a9f73e16", + "7063a254dd6b8c3856d989bf89e22bae1e5def5f", [] ] }, @@ -447248,11 +447888,11 @@ [] ], "requirements_build.txt": [ - "4216606d3d7c6cdf91cae1a99e0e1954d1250391", + "a976e5d639866a58f46f2eb5ff3a619289b277ef", [] ], "requirements_tc.txt": [ - "5c14ac4d40ac766cec96c79aa4f5ed77c92fc128", + "91789c95e305fe737a34aa403ded9ca81aaa1652", [] ], "run_tc.py": [ @@ -447355,7 +447995,7 @@ ] }, "conftest.py": [ - "021a49fc297303b6e4178c427422d91813dbb762", + "8d1f585b0d8c347518a5a68ceca2bbcc553808c9", [] ], "docker": { @@ -447755,7 +448395,7 @@ [] ], "pytest.ini": [ - "c1e428d0717ed923a6011198e84757cb3cc96f87", + "bf58dc409aa28b42d1dccc866ad14a49e8c6875c", [] ], "requirements_flake8.txt": [ @@ -447763,15 +448403,15 @@ [] ], "requirements_mypy.txt": [ - "1044bca9407b8b401cabe83ef5eb57d2d011e035", + "b027108a81f322214d5ee99f2181733ab6f92426", [] ], "requirements_pytest.txt": [ - "4fcbab6c7024609f57c14979298d2538a38cfa36", + "afab5448312a17b47920b9dbb1d18858dc525e0b", [] ], "requirements_tests.txt": [ - "8a4b54f4dcdf4ee9f2590861408399dfe57fbf64", + "ca946a306e7b31d75be71cb9a5e52b8e44aaf346", [] ], "runner": { @@ -455431,7 +456071,7 @@ [] ], "test_wave.py": [ - "01b3e93f13334d6ff9a184384c11ad6ebc1c85ab", + "a7d87a38e1b01f92b9fcae08edc57736d27704e0", [] ] }, @@ -455705,11 +456345,11 @@ [] ], "browsing_context.py": [ - "abaf569f92891bb49c3bda0aee53e892d8c6ce2e", + "f2abb4764e213506b0bb22499dc19dc45338eb3f", [] ], "input.py": [ - "6b2221d7dc459619cc91c47010174c915ed5cf86", + "5240bbb584306338eb26beeebd1af897961c359e", [] ], "script.py": [ @@ -455775,7 +456415,7 @@ [] ], "webtransport_h3_server.py": [ - "141bd9f7dc9fa2c24707dce87b3250e909179c83", + "0fc367e1ff4271c29ee9dd2d89f6fb93f6ca09e2", [] ] }, @@ -455830,7 +456470,7 @@ [] ], "run.py": [ - "9a1111c59f6e5afa471f9b95e8101f36401dd3f4", + "58e0004f9be4b21e8ada52f91a0cb45459b910c0", [] ], "testfiles.py": [ @@ -455913,7 +456553,7 @@ [] ], "test_run.py": [ - "f0e0d3c3ed57bba365cab2b03d284143dedcff35", + "fbf0f0afafe016bd5a51ebc33ed5503510ecd6f7", [] ], "test_testfiles.py": [ @@ -455925,12 +456565,12 @@ [] ], "test_wpt.py": [ - "f5671f374306ab351ba3051eaa1b1aa39b8ac9f4", + "d123faec2e7e14b51b00a63185af61bbf3a1953d", [] ] }, "tox.ini": [ - "1062b4a528c3d08ce26da9a5e109e07a304720f1", + "9e8b9d720f9c7243b87e7e92e0983f197da94679", [] ], "update.py": [ @@ -455942,11 +456582,11 @@ [] ], "virtualenv.py": [ - "7176bafcde4b04477f9c26b8d45fc737b278073f", + "59f422a6ef54f3199e3a0f0ad070f740371aa579", [] ], "wpt.py": [ - "74943a52f3b22351710ec3ea93ffafc81e15b31f", + "e423a8c67c5a2ea195515cf78504f590a83a7985", [] ] }, @@ -455986,7 +456626,7 @@ ] }, "requirements.txt": [ - "abe5966197df9efad564c066717d09ea92ef3849", + "fcaab2e6674ab475428baa900bd5c174412d5d28", [] ], "requirements_chromium.txt": [ @@ -455994,19 +456634,19 @@ [] ], "requirements_edge.txt": [ - "df44fa4ddb588dfce00aa939421b3a9b97ddd3fb", + "d2389eee93c1d03e1d366f0ab76b2a5ce23209d1", [] ], "requirements_firefox.txt": [ - "e8513ccf97a6938b84a9f4c18c80e3f9f78cfcca", + "30a2b8a6bdb3967a6a81926d3382f43627d6d2ea", [] ], "requirements_ie.txt": [ - "a01c45b3ec85d2baa80c6d6ee263c19444ba6141", + "c3fe460116e332d91fc614387b0124a9f6ef864e", [] ], "requirements_opera.txt": [ - "a01c45b3ec85d2baa80c6d6ee263c19444ba6141", + "c3fe460116e332d91fc614387b0124a9f6ef864e", [] ], "requirements_safari.txt": [ @@ -456014,7 +456654,7 @@ [] ], "requirements_sauce.txt": [ - "9dd3989e0d88594cd74d98b337694a3831b9b196", + "f7f06f366c4a32d2e2c3238cabd6d717ca668602", [] ], "setup.py": [ @@ -456022,7 +456662,7 @@ [] ], "tox.ini": [ - "82df778f50b16462e9c8aed1df229bbe57cb8331", + "5aef267dad9116a60190f528493658bcb7c4176f", [] ], "wptrunner": { @@ -456048,7 +456688,7 @@ [] ], "chrome.py": [ - "6946ccd4a6b597e2a460e4efcb3603594d7fbbb6", + "7092122d8c40e8327cfb91bcfecea5ca25776066", [] ], "chrome_android.py": [ @@ -456060,7 +456700,7 @@ [] ], "chrome_spki_certs.py": [ - "e1f133f5721561d15825d92fdeb45a85b65decce", + "f3630f3abbc8fc730e7b36ae0a05e9deea1ee251", [] ], "chromium.py": [ @@ -456080,7 +456720,7 @@ [] ], "edgechromium.py": [ - "7dfc5d6c82d80cdd8f46dc7d3cec91d4f749fd0b", + "9540320ed635e5c1405b6c95259d0f9519d8a6e8", [] ], "epiphany.py": [ @@ -456176,7 +456816,7 @@ [] ], "executorselenium.py": [ - "85076c877cd9d008b3606ee68369d1d008ee50ae", + "c650c1ccd02c6a0db69d125195407e6428f90e61", [] ], "executorservo.py": [ @@ -456188,7 +456828,7 @@ [] ], "executorwebdriver.py": [ - "829eca0deb51fd5a99293b0302cc0c284b2e8f6b", + "ab7d1ab0d4c5200b39962c256f9e27ab9492ccc7", [] ], "executorwktr.py": [ @@ -456291,11 +456931,11 @@ [] ], "manifestupdate.py": [ - "0088971795ef3abe18cc7754768510dddba2c264", + "a919d6df7e00ae222b36530e07ae6f4608469168", [] ], "metadata.py": [ - "3ae97114f8543365e1e2117d4dfd8487aad1d800", + "d026fdf574efe9e37cf460d0abd00baf57f358c5", [] ], "mpcontext.py": [ @@ -456406,15 +457046,15 @@ [] ], "test_testloader.py": [ - "8c8d02a22b90f1acddb9e12859aa33d52eefdb43", + "45b78496d1bdd741a65b77b8983451fdaa853abf", [] ], "test_update.py": [ - "6cbe335cfe7dcb1400aceca5fb45947828c634d3", + "e569db9b4af34bcf439235323fea2318dbb75bbb", [] ], "test_wpttest.py": [ - "2d3578a903ccc45f03eef2fc29f4a54e3b87983e", + "d2f68361bf853fd96ae3e5da7f514f853b81152c", [] ] }, @@ -461009,7 +461649,7 @@ [] ], "constants.sub.js": [ - "65ea4f66f29d333145d548df41472d34e42f01d9", + "d8e340d304b26fb51be84ba76f68acbd0924ada7", [] ], "cookies": { @@ -478270,7 +478910,7 @@ ], "import_export": { "ec_importKey.https.any.js": [ - "c70583bf12eba9afdf641ebb0c13f38d75d86e3b", + "25defa369c1d31430fd44a0afdd4455773d606a1", [ "WebCryptoAPI/import_export/ec_importKey.https.any.html", { @@ -478560,7 +479200,7 @@ ] ], "rsa_importKey.https.any.js": [ - "41d25da89c6505f9e0408cff72a2bb1b9d884266", + "5582b2f506b067d38dda13af286a87dcb507d7b4", [ "WebCryptoAPI/import_export/rsa_importKey.https.any.html", { @@ -478603,7 +479243,7 @@ ] ], "symmetric_importKey.https.any.js": [ - "404b66ac0022acd81ed803c9054969fbb3a02111", + "a9ce9be0a1becf95a3d199a6a1ac18da67a4f173", [ "WebCryptoAPI/import_export/symmetric_importKey.https.any.html", { @@ -501535,7 +502175,7 @@ ] ], "inheritance.html": [ - "6e7697b9d81db6888077318389e1d70964241b3c", + "dd9d6469336cbc6bbf4fa3eba84e6ba05afad6de", [ null, {} @@ -501585,7 +502225,7 @@ ] ], "animation-computed.html": [ - "f8d34b889ba19dfc7d9fd4d644da499b979d4166", + "9152c49ee0cfedaff778f95765986392ea643f15", [ null, {} @@ -501598,21 +502238,21 @@ {} ] ], - "animation-delay-end-computed.html": [ + "animation-delay-end-computed.tentative.html": [ "77f96706383df2fb9a25478b5b35807b67bedf2d", [ null, {} ] ], - "animation-delay-end-invalid.html": [ + "animation-delay-end-invalid.tentative.html": [ "7cabd4e8e54d96d7c3b36fc9473022cf530f664d", [ null, {} ] ], - "animation-delay-end-valid.html": [ + "animation-delay-end-valid.tentative.html": [ "162c781bb010066bfb17e87f64932180abb472c8", [ null, @@ -501640,21 +502280,21 @@ {} ] ], - "animation-delay-start-computed.html": [ + "animation-delay-start-computed.tentative.html": [ "bfb89d0267f5ad9a5ef7cb01e8ad6dc4b536a2fc", [ null, {} ] ], - "animation-delay-start-invalid.html": [ + "animation-delay-start-invalid.tentative.html": [ "bff31f3789a4fd9e8ff8be99e1af61882d46af62", [ null, {} ] ], - "animation-delay-start-valid.html": [ + "animation-delay-start-valid.tentative.html": [ "f52286444edb71cdeb24bc57f8de8d566113730a", [ null, @@ -501851,21 +502491,14 @@ ] ], "animation-shorthand.html": [ - "464e42460b169f52b4558d0b2778c04c82eeaf36", - [ - null, - {} - ] - ], - "animation-shorthand.tentative.html": [ - "04d06080e5efd7b9a00bfc6d5e191902c0396cde", + "8b482ff900f0d0a31189add815b08a7c6ca406b1", [ null, {} ] ], "animation-valid.html": [ - "4027ee1226e93b3804031e110b1a28a4ea3c4346", + "0c5d5713e3e335faeb4db6ae75062a1f894b2d3d", [ null, {} @@ -504045,7 +504678,7 @@ ] ], "color-interpolation.html": [ - "7bda888a0b4d4355e916197e3646b69d1ca1ef64", + "d22f53409c9ab67f3882150bd2430907fe2164b5", [ null, {} @@ -504250,7 +504883,7 @@ ] ], "color-valid-color-mix-function.html": [ - "6e5a129fa0a883cebca2f45b1714dbb6314cfab4", + "659117a23b0ddd073d7f8a243e4f2dd86a7e4bff", [ null, {} @@ -504264,7 +504897,7 @@ ] ], "color-valid-hwb.html": [ - "07367ac450b5d130bd9e1400ccfebb62105cbfde", + "dc2cec5276ec72547ccf642cda038460697af165", [ null, {} @@ -504285,7 +504918,7 @@ ] ], "color-valid-rgb.html": [ - "14bcce854fed900b405f59a72c050d3d25527dbe", + "eb50db02cb2c18f3838921881e0b3aa290715112", [ null, {} @@ -504611,7 +505244,7 @@ ] ], "at-container-style-parsing.html": [ - "b49205824b542069db8959dfbccdcdfa6ae627c9", + "36fda2e36630d2330e84da0edc571983f9d07790", [ null, {} @@ -505220,7 +505853,7 @@ ] ], "style-container-for-shadow-dom.html": [ - "c3ac961de2d9b15ecc8a266a0eb9f22b93e0b08f", + "b8bea097504713207f7e77bf8eba5ea6e80735a2", [ null, {} @@ -505892,7 +506525,7 @@ ], "parsing": { "display-computed.html": [ - "e0d08a0045866df281a3f97f174c4b318e72f34c", + "b8c7b5e47eaa242eefff4b983d96d21c71f7a998", [ null, {} @@ -505906,7 +506539,7 @@ ] ], "display-valid.html": [ - "ecd57511422eeb4ea64f65bd832d41b6f1f3f6a7", + "9501a6e2ba7cb195c8254355bafcaa0842d0ad23", [ null, {} @@ -515156,7 +515789,7 @@ ] ], "parsing.html": [ - "8e445faf1c9b8b0942f684d5093c5a7071d43a91", + "c22eaada3c27489fccdea579111d44e32e9839b4", [ null, {} @@ -518218,7 +518851,7 @@ ] ], "scroll-margin-visibility-check.html": [ - "a072c142ad54e552dd84a900599f2df9cdf28651", + "b41ccb36fd37b460b378f1f323241b84863b119f", [ null, {} @@ -518295,7 +518928,7 @@ ] ], "scroll-target-margin-005.html": [ - "5e4782fe653077c0f0e5ff144c3b60b588b691ae", + "d3b60270e602b07a1c2b9e14f48e840fe92b7c3b", [ null, {} @@ -518511,6 +519144,66 @@ ] ] }, + "css-scroll-snap-2": { + "parsing": { + "scroll-start-computed.html": [ + "dd8a5e280f2b5e7664d557a2cb5406f00d28dd61", + [ + null, + {} + ] + ], + "scroll-start-invalid.html": [ + "01dbbc4858062a574b3cf5c485d1eafd204d7225", + [ + null, + {} + ] + ], + "scroll-start-shorthand.html": [ + "22e206ec627012b7672341638690e76e1df9956d", + [ + null, + {} + ] + ], + "scroll-start-target-computed.html": [ + "bb31f2b24468786c57940fdf330cbd7a398bd2d1", + [ + null, + {} + ] + ], + "scroll-start-target-invalid.html": [ + "03ca718629c38eafb7ace31540cfc4e5a3c74e24", + [ + null, + {} + ] + ], + "scroll-start-target-shorthand.html": [ + "601715784253cbb7ca1a32e5d589e8250550c10e", + [ + null, + {} + ] + ], + "scroll-start-target-valid.html": [ + "aed964bdff4a77b6d7c849aca0df5d85f19fd242", + [ + null, + {} + ] + ], + "scroll-start-valid.html": [ + "c472979543992628ba27bbbf8cceb1f06ade0a53", + [ + null, + {} + ] + ] + } + }, "css-scrollbars": { "auto-scrollbar-inline-children.html": [ "149cf942fe625af24de8623baab3e68fed581738", @@ -523293,15 +523986,15 @@ {} ] ], - "white-space-collapse-invalid copy.html": [ - "6c18ecec21c5c83aa897c762c7bda8f5cabc37e1", + "white-space-collapse-invalid.html": [ + "0d2856ba37f5d1b01d7944d93f3f0856624ab217", [ null, {} ] ], "white-space-collapse-valid.html": [ - "2191167527bb12336c17e87208b33fa2b34a498a", + "23c0cd39bb677fa4ad3d2cb5c78d0c69a97e50b7", [ null, {} @@ -526719,7 +527412,7 @@ ] ], "display.html": [ - "7a90b1c07cd45638c6e521fe901e512a31a6ded0", + "b650431d84350f7c293a1cfee82fa79f57fb01b9", [ null, {} @@ -533186,6 +533879,13 @@ {} ] ], + "offset-path-interpolation-006.html": [ + "a19908e4fffc2383a940e04ef0c00c486085cfee", + [ + null, + {} + ] + ], "offset-position-composition.html": [ "0ee517a73a8e9e673a83a0f81bbdea98d6a3d808", [ @@ -535348,7 +536048,7 @@ ] ], "range-and-constructors.html": [ - "d17c3b71480aa9dd2a75ccbc2cccfd362060eb3c", + "cc5142485164cc7d12e1a00e4fe9c0f47b2725d4", [ null, {} @@ -564406,6 +565106,13 @@ ] ], "multi-globals": { + "construct-in-detached-frame.window.js": [ + "b0d6ba5b80db821ee75b3892626369caa6e3aece", + [ + "fetch/api/request/multi-globals/construct-in-detached-frame.window.html", + {} + ] + ], "url-parsing.html": [ "df60e72507ffdf22ce3d6e8342a8a35aa03fb201", [ @@ -566679,7 +567386,7 @@ ] ], "response-static-json.any.js": [ - "3c8a2b637f70871a21a66319d6eb3f9db7c41f77", + "5ec79e69aa3f9c1009050b083e0cf8c0cc76e1dc", [ "fetch/api/response/response-static-json.any.html", { @@ -571870,6 +572577,20 @@ } ] ], + "fetch-ad-auction-headers-insecure-context.tentative.http.html": [ + "d3bdb8017579414aee39ad672519ff029f9d0827", + [ + null, + {} + ] + ], + "fetch-ad-auction-headers.tentative.https.html": [ + "7b2a2c2ba4a2f037874a0647180a4eb7e06e772d", + [ + null, + {} + ] + ], "insecure-context.window.js": [ "9016277b73139d050e3d688c3f21cb40048464e2", [ @@ -573422,7 +574143,7 @@ ] ], "FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.js": [ - "1b7fcda35bf9aada9b7a1a60205525f7a4383349", + "dbecc24c1da5de78da9640fe1f7d0a5a5bfdc6a0", [ "fs/FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.html", {} @@ -573979,7 +574700,7 @@ ] ], "element-request-fullscreen-options.tentative.html": [ - "f3b99e84e69681e7753f379bf36f5e0b88c59d63", + "875431698f7a9212a40d444ddc10627defaf7b11", [ null, { @@ -574086,6 +574807,15 @@ } ] ], + "fullscreen-reordering.html": [ + "1a286c32c770342d3a6026545dde5213925e2292", + [ + null, + { + "testdriver": true + } + ] + ], "historical.html": [ "8b3e3c03e9cb7e9f247c9d9f2cfe0f752218122f", [ @@ -583369,21 +584099,21 @@ ] ], "2d.text.drawing.style.invalid.spacing.html": [ - "61ca6d4a91533ea75bcc7505a0d8f3969be1ee07", + "9bf2440900c2f8193b36c45725fb94db084d6182", [ null, {} ] ], "2d.text.drawing.style.letterSpacing.change.font.html": [ - "5b42b89e3254c560810e35f1f571d85111503407", + "3b88ab6ee17c0b224f9a669335c567751c07699b", [ null, {} ] ], "2d.text.drawing.style.letterSpacing.measure.html": [ - "fadfaaf2015f4a8a3ec1f51e3def3b474833b409", + "ba8656ec1a3d5d84b0c3e2cc7ea7879eb308c605", [ null, {} @@ -583418,7 +584148,7 @@ ] ], "2d.text.drawing.style.wordSpacing.measure.html": [ - "4cd3c237cd8db811f6c937d6518db021bd7b27c2", + "4898c23ee78177b6438ccc042eb8edb58624eda1", [ null, {} @@ -599816,14 +600546,14 @@ ] ], "2d.text.drawing.style.invalid.spacing.html": [ - "a117be03656e6552b4859cfb6560138c40cbff89", + "5030055567a76411fb3c51cddc14eb4bb79a5d22", [ null, {} ] ], "2d.text.drawing.style.invalid.spacing.worker.js": [ - "7f6baf28b68d76b5e71020a19283b2a49e6058b7", + "e4b090cc76516851cabf6d1183326aaf5c1ab326", [ "html/canvas/offscreen/text/2d.text.drawing.style.invalid.spacing.worker.html", {} @@ -599843,17 +600573,31 @@ {} ] ], - "2d.text.drawing.style.letterSpacing.measure.html": [ - "b63c81b25579a022c61c1c566b9fcf55bf8eb1d9", + "2d.text.drawing.style.letterSpacing.measure.absolute.html": [ + "5482c36b37080f962fb3b2289530b524caae2c28", [ null, {} ] ], - "2d.text.drawing.style.letterSpacing.measure.worker.js": [ - "b9189cba30cf6d757605d97c320d9d76edc45868", + "2d.text.drawing.style.letterSpacing.measure.absolute.worker.js": [ + "22cab4cccd93e9b58ca9c81457167476338e2f5a", + [ + "html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.absolute.worker.html", + {} + ] + ], + "2d.text.drawing.style.letterSpacing.measure.relative.html": [ + "fa5d2bce75459db2638669e64ea444f132f79c9c", [ - "html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.worker.html", + null, + {} + ] + ], + "2d.text.drawing.style.letterSpacing.measure.relative.worker.js": [ + "59d17ef82cf36f9d7f842b2506c84cefaa5f370c", + [ + "html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.relative.worker.html", {} ] ], @@ -599955,17 +600699,31 @@ {} ] ], - "2d.text.drawing.style.wordSpacing.measure.html": [ - "9ef479bba2c061a5eec558a4db6d305919c28b08", + "2d.text.drawing.style.wordSpacing.measure.absolute.html": [ + "07ca896f9752a2cf58928df7afa07c14b615bb47", + [ + null, + {} + ] + ], + "2d.text.drawing.style.wordSpacing.measure.absolute.worker.js": [ + "ebfc05644fcbd3a395730ee4a89f54e5443adc29", + [ + "html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.absolute.worker.html", + {} + ] + ], + "2d.text.drawing.style.wordSpacing.measure.relative.html": [ + "95f87cb03d05b79e1ebb48155723672ae04903e0", [ null, {} ] ], - "2d.text.drawing.style.wordSpacing.measure.worker.js": [ - "3e850fcf3dfb2225b20f4b5cc838b8ff004688de", + "2d.text.drawing.style.wordSpacing.measure.relative.worker.js": [ + "2bded51edcbe3571274bb4e9b36d19908127b4a3", [ - "html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.worker.html", + "html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.relative.worker.html", {} ] ], @@ -602548,6 +603306,36 @@ ] } ] + ], + "websocket.https.window.js": [ + "7d0dd95d84b7a9e16bf3e27e9d23627f4d3adffa", + [ + "html/cross-origin-embedder-policy/credentialless/websocket.https.window.html", + { + "script_metadata": [ + [ + "TIMEOUT", + "long" + ], + [ + "script", + "/common/get-host-info.sub.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" + ] + ] + } + ] ] }, "cross-origin-isolated-permission-iframe.https.window.js": [ @@ -604325,6 +605113,38 @@ ], "tentative": { "restrict-properties": { + "access-reporting-closed.https.html": [ + "1c315b35d7fa81188aabf59c1c3196a5d5d2a2ea", + [ + null, + {} + ] + ], + "access-reporting-openee-rp-ro.https.html": [ + "7a96f4f5762721378036b47d248c3ae1ef21dd2f", + [ + null, + { + "timeout": "long" + } + ] + ], + "access-reporting-opener-rp-ro.https.html": [ + "9e1e85b16a5876c3e78656b8300c2fcc9e3e3ab1", + [ + null, + { + "timeout": "long" + } + ] + ], + "access-reporting-post-message.https.html": [ + "4c8e96f57933f74d0ff3f76cafe498c20bef7353", + [ + null, + {} + ] + ], "coop-rp-in-navigation-chain.https.html": [ "e5c877517488f755e08f69233439a817dd444164", [ @@ -604557,6 +605377,42 @@ "timeout": "long" } ] + ], + "reporting-from-rp-ro.https.html": [ + "60322bffe7a1c7d8d536b35504e925b09ff0c6bd", + [ + null, + { + "timeout": "long" + } + ] + ], + "reporting-from-rp.https.html": [ + "5deb115d94ef2894e6551ca89f8d4966d2d438df", + [ + null, + { + "timeout": "long" + } + ] + ], + "reporting-to-rp-ro.https.html": [ + "cf1385e766374d7fafae07eed9a857d8b9c381a3", + [ + null, + { + "timeout": "long" + } + ] + ], + "reporting-to-rp.https.html": [ + "9ff374c1c787348115e5d10d624be64ea4040323", + [ + null, + { + "timeout": "long" + } + ] ] } } @@ -617371,7 +618227,7 @@ ] ], "child-sequential-focus.html": [ - "1b4dd30230054571e395958820c1c184d8e19659", + "bc787202cf53522188238b9bc7db6537a7533100", [ null, {} @@ -617615,7 +618471,7 @@ ] ], "focus-after-close.html": [ - "d66d45527a7e39fa96ee11d9a331bcc2109aeb37", + "93baf65cf60c17d9292525e110faff15bcbd52b9", [ null, { @@ -618093,6 +618949,13 @@ } ] ], + "popover-anchor-transition.tentative.html": [ + "ae2a3a8e4159c63fe9213a96969ec7dc24d90325", + [ + null, + {} + ] + ], "popover-attribute-all-elements.html": [ "5a536f026ee96744c744eb98244cb3e06017d277", [ @@ -618136,13 +618999,6 @@ {} ] ], - "popover-dialog-initial-focus.html": [ - "47b2252bf5f26bc5bd122b9e57035992da65855a", - [ - null, - {} - ] - ], "popover-document-open.html": [ "80ac86acedab246d5ceff8b54d57feb7e957d642", [ @@ -618166,15 +619022,8 @@ } ] ], - "popover-focus-child-dialog.html": [ - "051eef14a7ccc762e66c868e4d80b2ea9da24e33", - [ - null, - {} - ] - ], "popover-focus.html": [ - "df7c046e003a8e70481e124e6441e246043970cd", + "98bb065de7b8b894c803d9e6f0d5145515e207bb", [ null, { @@ -618220,7 +619069,7 @@ ] ], "popover-light-dismiss.html": [ - "4411d0b7e381b95960d25a5fbbda7682af1db263", + "d7d1edd3a4b1fa655f971c69cf4d77b64926dc1b", [ null, { @@ -627951,7 +628800,7 @@ ] }, "roles.html": [ - "5144fe3f0fbc51c02e642455c0446f1c3c9583bf", + "3609c26a23f9d826fa004c68835039ab051fedc9", [ null, { @@ -631370,7 +632219,7 @@ ] ], "image-src-change.html": [ - "e0701a2169b3860af4441a2562402bda284db34f", + "33213a570ed3187269f53053def945a4c03017a9", [ null, {} @@ -633109,8 +633958,8 @@ } ] ], - "loaf-source-location-bound.html": [ - "8e8019104af2052eeb8617ba31ad174b99ddd636", + "loaf-source-location.html": [ + "ffda00020717cf87684ba0a8331100778592f619", [ null, { @@ -661326,17 +662175,21 @@ ] ], "interim-response-times.h2.html": [ - "850ee7cb5f539b76ddfd9c1489915fa9ddaf7215", + "4b1ca93ff7bd621fc1495c1030c1ebd3730b497c", [ null, - {} + { + "timeout": "long" + } ] ], "interim-response-times.html": [ - "b922590d5d32c2b3899d82e4ea9297d54b6c7cc2", + "a4d03f599ee5a756af07212423f79e758ab617fc", [ null, - {} + { + "timeout": "long" + } ] ], "link-sequence-of-events.html": [ @@ -664127,7 +664980,7 @@ ] ], "merge-timeline-offset-keyframes.html": [ - "3a766de0c8565e53f4e45af9080e1fbbbe03d33e", + "c6d384fce546d132e11b43d786c17fe46a9fcd04", [ null, {} @@ -664225,7 +665078,7 @@ ] ], "scroll-timeline-multi-pass.tentative.html": [ - "91668ada5bed8528d1ee61ba15d5e52d20e1e5aa", + "651ba212ded9d0e64e8eb706f2af59c832d1fadc", [ null, {} @@ -664295,7 +665148,7 @@ ] ], "scroll-timeline-shorthand.tentative.html": [ - "dd1e6e12a98d285855699c7a4eba73164c4a4444", + "68e1cc955f5239075cf283ceac3938c42143a9e4", [ null, {} @@ -664323,7 +665176,7 @@ ] ], "timeline-offset-keyframes-hidden-subject.html": [ - "389c8baca3ad035df1de6767ac9abc6265756808", + "93ef7ffa1eb18ed16cb6edfe0caf35bb70b8d624", [ null, {} @@ -664337,7 +665190,7 @@ ] ], "timeline-range-name-offset-in-keyframes.tentative.html": [ - "7bae49c2e97dcc8c22b3f071256fdfd9cca699c2", + "54467bc83b18146c4a0adcd2dffde44bfd352df9", [ null, {} @@ -664463,7 +665316,7 @@ ] ], "view-timeline-shorthand.tentative.html": [ - "0ab0f21ff6ce802d882d80f1944e5932b5ac3e69", + "f19b9e6ac21bd0a825f7e944ec9eea747897d09a", [ null, {} @@ -664620,7 +665473,7 @@ ] ], "scroll-timeline-invalidation.html": [ - "f35d878c69acd0a3c29567513e23940a9b3802c9", + "0b9e10c9846d17ae19be1d5c6f1b47e0826dc386", [ null, {} @@ -668551,7 +669404,7 @@ ] ], "detached-context.https.html": [ - "747a953f6203758f0ff7d18fc6eb8cc9c19f17de", + "ce8e4cc8400c6a457c968a9d1250fde829369ed3", [ null, {} @@ -672433,25 +673286,33 @@ ] ], "different-initiators-2.https.html": [ - "69e84333aa4dec9f5602f299bd224c58ee13a66a", + "1242ebbfb40e6006b58939409a87f1e420c378fb", [ null, - {} + { + "timeout": "long" + } ] ], "different-initiators.sub.https.html": [ - "74e79323d9413da5196d7b1b57b340b205bc2099", + "c35ccde8bb060d4ac9d2da680cae8c5d4c5e3f32", [ "speculation-rules/prefetch/different-initiators.sub.https.html?cross-site-1", - {} + { + "timeout": "long" + } ], [ "speculation-rules/prefetch/different-initiators.sub.https.html?cross-site-2", - {} + { + "timeout": "long" + } ], [ "speculation-rules/prefetch/different-initiators.sub.https.html?same-site", - {} + { + "timeout": "long" + } ] ], "document-rules.https.html": [ @@ -672528,6 +673389,51 @@ {} ] ], + "initiators-a-element.sub.https.html": [ + "bac5eb7cb794e094799b9b42a2edc536d245d2ef", + [ + "speculation-rules/prefetch/initiators-a-element.sub.https.html?cross-site", + { + "timeout": "long" + } + ], + [ + "speculation-rules/prefetch/initiators-a-element.sub.https.html?same-site", + { + "timeout": "long" + } + ] + ], + "initiators-iframe-location-href.sub.https.html": [ + "9d6702d4b752adc2186d986347e4c9d273e154ca", + [ + "speculation-rules/prefetch/initiators-iframe-location-href.sub.https.html?cross-site", + { + "timeout": "long" + } + ], + [ + "speculation-rules/prefetch/initiators-iframe-location-href.sub.https.html?same-site", + { + "timeout": "long" + } + ] + ], + "initiators-window-open.sub.https.html": [ + "f786df077dbfe1c3856aeb576ec005484e505c63", + [ + "speculation-rules/prefetch/initiators-window-open.sub.https.html?cross-site", + { + "timeout": "long" + } + ], + [ + "speculation-rules/prefetch/initiators-window-open.sub.https.html?same-site", + { + "timeout": "long" + } + ] + ], "invalid-rules.https.html": [ "573f3c0b0f91fe001371b54e1c357ec11a815579", [ @@ -672592,6 +673498,109 @@ ] ], "no-vary-search": { + "prefetch-single-with-hint.https.html": [ + "d62788cabac4886099185bc527e1a026d23e19a7", + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?1-1", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?10-10", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?11-11", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?12-12", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?13-13", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?14-14", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?15-15", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?16-16", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?17-17", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?18-18", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?19-19", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?2-2", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?20-20", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?21-21", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?22-22", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?23-23", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?24-24", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?25-last", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?3-3", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?4-4", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?5-5", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?6-6", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?7-7", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?8-8", + {} + ], + [ + "speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html?9-9", + {} + ] + ], "prefetch-single.https.html": [ "fdbb6171353c9b986dc44be117af3e52c3fc77a6", [ @@ -672818,7 +673827,7 @@ ] ], "prefetch-traverse-reload.sub.html": [ - "3f1312ed1222ad78b9f752e190f75e3275929c60", + "ec6a7cd92615799a6b9789726955334a9818d15e", [ null, { @@ -672930,7 +673939,7 @@ } ] ], - "accept-clint-hint-cache.https.html": [ + "accept-client-hint-cache.https.html": [ "66e2c90c04a04dd69119569e24658697e258e4c6", [ null, @@ -673147,7 +674156,7 @@ ] ], "prefetch.https.html": [ - "48de5adca13e0aa64312f006531bcb8633aba255", + "2a1553b3d94bb7ebc0c8d9792416fc112ff1d40c", [ null, { @@ -674421,6 +675430,31 @@ } ] ], + "storagemanager-persist-persisted-match.https.any.js": [ + "edbe67fae2c1e17bc7ce3aa3c3d1dc9db7982cac", + [ + "storage/storagemanager-persist-persisted-match.https.any.html", + { + "script_metadata": [ + [ + "title", + "StorageManager: result of persist() matches result of persisted()" + ] + ] + } + ], + [ + "storage/storagemanager-persist-persisted-match.https.any.worker.html", + { + "script_metadata": [ + [ + "title", + "StorageManager: result of persist() matches result of persisted()" + ] + ] + } + ] + ], "storagemanager-persist.https.window.js": [ "13e17a16e14198e21b0b5984ed46c93a50daed41", [ @@ -703657,7 +704691,7 @@ ] ], "bundle.https.html": [ - "a9381e1e2ab1642ef6897d6d7fe40acdd1fc828b", + "3d2b835baf3b48fab62e0c19d142c68a73dd58e0", [ null, { @@ -707340,262 +708374,37 @@ } ] ], - "Create-invalid-urls.any.js": [ - "89783a9ea7439ca1c9c7eb7ed74b5a05792e3842", + "Create-http-urls.any.js": [ + "17590fc43ef5ab55fdf43ed2224a13f96e24a646", [ - "websockets/Create-invalid-urls.any.html", - { - "script_metadata": [ - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } + "websockets/Create-http-urls.any.html", + {} ], [ - "websockets/Create-invalid-urls.any.html?wpt_flags=h2", - { - "script_metadata": [ - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } - ], + "websockets/Create-http-urls.any.worker.html", + {} + ] + ], + "Create-invalid-urls.any.js": [ + "73c9fadab9d8e249bcfc7e1f6a548becd1e27112", [ - "websockets/Create-invalid-urls.any.html?wss", - { - "script_metadata": [ - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } + "websockets/Create-invalid-urls.any.html", + {} ], [ "websockets/Create-invalid-urls.any.worker.html", - { - "script_metadata": [ - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } - ], - [ - "websockets/Create-invalid-urls.any.worker.html?wpt_flags=h2", - { - "script_metadata": [ - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } - ], - [ - "websockets/Create-invalid-urls.any.worker.html?wss", - { - "script_metadata": [ - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } + {} ] ], "Create-non-absolute-url.any.js": [ - "8d533fd2e04f14274c6639e68fc9a3ae9dd8fe90", + "5a7b1794d04188c96eed64ebe4440a0af92e4389", [ "websockets/Create-non-absolute-url.any.html", - { - "script_metadata": [ - [ - "script", - "constants.sub.js" - ], - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } - ], - [ - "websockets/Create-non-absolute-url.any.html?wpt_flags=h2", - { - "script_metadata": [ - [ - "script", - "constants.sub.js" - ], - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } - ], - [ - "websockets/Create-non-absolute-url.any.html?wss", - { - "script_metadata": [ - [ - "script", - "constants.sub.js" - ], - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } + {} ], [ "websockets/Create-non-absolute-url.any.worker.html", - { - "script_metadata": [ - [ - "script", - "constants.sub.js" - ], - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } - ], - [ - "websockets/Create-non-absolute-url.any.worker.html?wpt_flags=h2", - { - "script_metadata": [ - [ - "script", - "constants.sub.js" - ], - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } - ], - [ - "websockets/Create-non-absolute-url.any.worker.html?wss", - { - "script_metadata": [ - [ - "script", - "constants.sub.js" - ], - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } + {} ] ], "Create-nonAscii-protocol-string.any.js": [ @@ -708314,6 +709123,13 @@ } ] ], + "Create-url-with-windows-1252-encoding.html": [ + "6596b5e1a0b42a639cc0efee19fe88fbca6d373a", + [ + null, + {} + ] + ], "Create-valid-url-array-protocols.any.js": [ "00ab1ca9873248013dfaab04720befb8c0083f1f", [ @@ -709301,147 +710117,6 @@ } ] ], - "Create-wrong-scheme.any.js": [ - "00cfffece601c7f136d08ace80ea957e2db1ff10", - [ - "websockets/Create-wrong-scheme.any.html", - { - "script_metadata": [ - [ - "script", - "constants.sub.js" - ], - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } - ], - [ - "websockets/Create-wrong-scheme.any.html?wpt_flags=h2", - { - "script_metadata": [ - [ - "script", - "constants.sub.js" - ], - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } - ], - [ - "websockets/Create-wrong-scheme.any.html?wss", - { - "script_metadata": [ - [ - "script", - "constants.sub.js" - ], - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } - ], - [ - "websockets/Create-wrong-scheme.any.worker.html", - { - "script_metadata": [ - [ - "script", - "constants.sub.js" - ], - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } - ], - [ - "websockets/Create-wrong-scheme.any.worker.html?wpt_flags=h2", - { - "script_metadata": [ - [ - "script", - "constants.sub.js" - ], - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } - ], - [ - "websockets/Create-wrong-scheme.any.worker.html?wss", - { - "script_metadata": [ - [ - "script", - "constants.sub.js" - ], - [ - "variant", - "" - ], - [ - "variant", - "?wss" - ], - [ - "variant", - "?wpt_flags=h2" - ] - ] - } - ] - ], "Send-0byte-data.any.js": [ "b984b641084a3cddbf1b757aa794532ab708000c", [ @@ -713174,21 +713849,6 @@ {} ] ], - "002.html": [ - "8c80c23735f1cc32e0ed9e7ff30504514c837245", - [ - null, - {} - ], - [ - "websockets/constructor/002.html?wpt_flags=h2", - {} - ], - [ - "websockets/constructor/002.html?wss", - {} - ] - ], "004.html": [ "e599bf224ae0fe7667bfa08ff2d92be206648d0b", [ @@ -716733,7 +717393,7 @@ }, "webtransport": { "close.https.any.js": [ - "642d716a10342ad46ba2c852713e3360cfc5ca03", + "de675036f3d7ea4a7e2aaf5bf88bdfb35a173f3a", [ "webtransport/close.https.any.html", { @@ -722009,7 +722669,7 @@ ] ], "dedicated-worker-import-meta.html": [ - "cff8e91488e8239abe213619d12d5a603072fbea", + "97a5da870f8d713287ace636660d759b9e61486b", [ null, {} @@ -745057,13 +745717,6 @@ {} ] ], - "order-of-images.htm": [ - "3ae03636d19d38f89ead6d942eb809b7b5e0e662", - [ - null, - {} - ] - ], "ttwf-css3background-border-color-shorthand-missing-bottom.htm": [ "b7bccd77af49810bdd83d4cdf9ec5b7126967283", [ @@ -748687,6 +749340,15 @@ {} ] ] + }, + "reload": { + "invalid.py": [ + "35be21ef19fe2843d3d0e2c5fb837c09e998cad4", + [ + null, + {} + ] + ] } }, "errors": { @@ -748701,7 +749363,7 @@ "input": { "perform_actions": { "invalid.py": [ - "53b7f3a323e857fd0b43d371d8e487da22080c7a", + "b07802292c9b6886a7ec6bbea9bd78e68b988c15", [ null, {} @@ -748722,49 +749384,49 @@ ] ], "pointer_mouse.py": [ - "b73d3d859dd3e165eb61db98e931a056f2fcc438", + "7e262581018e858048466ef38bf08d901a8633d5", [ null, {} ] ], "pointer_mouse_modifier.py": [ - "9f76e250a1ad6b88e5554123a1b16a6dc70d6a19", + "8eec30f1a0ce504684bfacaaa391c0d89032759b", [ null, {} ] ], "pointer_mouse_multiclick.py": [ - "4f67f8fda9434a09ae05e0c28e015cd17b9c8236", + "f74650c2f3ed2d886f38a92c68b7666fbf911651", [ null, {} ] ], "pointer_origin.py": [ - "c953d3d1b024ceeda4c687ead2aad381d059fd5c", + "7991eecbdba6da29d93af7d914672bfd5dbc3ac4", [ null, {} ] ], "pointer_pen.py": [ - "5483a1436c1f2b9d52cec73c7d7a47f62818aba2", + "30728f9a1368bf05928986f16b0d4e44ccdadd78", [ null, {} ] ], "pointer_touch.py": [ - "9c31b0127fe0f029c97546d35a44fefaa7b51eca", + "126e72c76ed4e03f712fa8f3537964838a27ba42", [ null, {} ] ], "wheel.py": [ - "00e10e912263a326a5056d5aba0beb0aa145275e", + "cf96a9cd9bac3d728eec27fc72d0b64ad0b66ff2", [ null, {} @@ -748940,7 +749602,7 @@ }, "call_function": { "arguments.py": [ - "0cb571038b76242f6b2e33b787217eba36dd78fe", + "ea85b2c6c94fffd24b6ca6794910e9fb1270a7fd", [ null, {} @@ -750454,7 +751116,7 @@ ] ], "pointer_mouse.py": [ - "5b9aec0434f80893eb9f89640a11bc44ab8a65f0", + "14da9871f4047a6dd57e0f394d0870cabb4b3e56", [ null, { diff --git a/tests/wpt/metadata/WebCryptoAPI/import_export/ec_importKey.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/import_export/ec_importKey.https.any.js.ini index 20fd3d91938..ccb45e9861d 100644 --- a/tests/wpt/metadata/WebCryptoAPI/import_export/ec_importKey.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/import_export/ec_importKey.https.any.js.ini @@ -323,6 +323,78 @@ [Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDH, namedCurve: P-521}, false, [\])] expected: FAIL + [Empty Usages: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, true, [\])] + expected: FAIL + + [Empty Usages: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, true, [\])] + expected: FAIL + + [Empty Usages: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, false, [\])] + expected: FAIL + + [Empty Usages: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, false, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, true, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, true, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, false, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, false, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, true, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, false, [\])] + expected: FAIL + + [Empty Usages: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [\])] + expected: FAIL + + [Empty Usages: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [\])] + expected: FAIL + + [Empty Usages: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, false, [\])] + expected: FAIL + + [Empty Usages: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, true, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, false, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, true, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [\])] + expected: FAIL + [ec_importKey.https.any.worker.html] [Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, true, [\])] @@ -648,3 +720,75 @@ [Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDH, namedCurve: P-521}, false, [\])] expected: FAIL + + [Empty Usages: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, true, [\])] + expected: FAIL + + [Empty Usages: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, true, [\])] + expected: FAIL + + [Empty Usages: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, false, [\])] + expected: FAIL + + [Empty Usages: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, false, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, true, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, true, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, false, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, false, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, true, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, false, [\])] + expected: FAIL + + [Empty Usages: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [\])] + expected: FAIL + + [Empty Usages: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [\])] + expected: FAIL + + [Empty Usages: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, false, [\])] + expected: FAIL + + [Empty Usages: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, true, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, false, [\])] + expected: FAIL + + [Empty Usages: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, true, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [\])] + expected: FAIL + + [Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [\])] + expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_Ed25519.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_Ed25519.https.any.js.ini index c1b505a94d6..5f9f5a1866a 100644 --- a/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_Ed25519.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_Ed25519.https.any.js.ini @@ -731,6 +731,18 @@ [Bad key length: importKey(raw, {name: Ed25519}, false, [verify, verify\])] expected: FAIL + [Empty usages: importKey(pkcs8, {name: Ed25519}, true, [\])] + expected: FAIL + + [Empty usages: importKey(pkcs8, {name: Ed25519}, false, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: Ed25519}, true, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: Ed25519}, false, [\])] + expected: FAIL + [okp_importKey_failures_Ed25519.https.any.html] [Bad usages: importKey(spki, {name: Ed25519}, true, [encrypt\])] @@ -1464,3 +1476,15 @@ [Bad key length: importKey(raw, {name: Ed25519}, false, [verify, verify\])] expected: FAIL + + [Empty usages: importKey(pkcs8, {name: Ed25519}, true, [\])] + expected: FAIL + + [Empty usages: importKey(pkcs8, {name: Ed25519}, false, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: Ed25519}, true, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: Ed25519}, false, [\])] + expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.js.ini index 9b794a6f26d..53e0d58bd6a 100644 --- a/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.js.ini @@ -737,6 +737,18 @@ [Bad key length: importKey(raw, {name: Ed448}, false, [verify, verify\])] expected: FAIL + [Empty usages: importKey(pkcs8, {name: Ed448}, true, [\])] + expected: FAIL + + [Empty usages: importKey(pkcs8, {name: Ed448}, false, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: Ed448}, true, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: Ed448}, false, [\])] + expected: FAIL + [okp_importKey_failures_Ed448.https.any.html] [Bad usages: importKey(spki, {name: Ed448}, true, [encrypt\])] @@ -1476,3 +1488,15 @@ [Bad key length: importKey(raw, {name: Ed448}, false, [verify, verify\])] expected: FAIL + + [Empty usages: importKey(pkcs8, {name: Ed448}, true, [\])] + expected: FAIL + + [Empty usages: importKey(pkcs8, {name: Ed448}, false, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: Ed448}, true, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: Ed448}, false, [\])] + expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any.js.ini index 2e25c323ab7..4708548bc93 100644 --- a/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any.js.ini @@ -635,6 +635,18 @@ [Bad key length: importKey(raw, {name: X25519}, false, [\])] expected: FAIL + [Empty usages: importKey(pkcs8, {name: X25519}, true, [\])] + expected: FAIL + + [Empty usages: importKey(pkcs8, {name: X25519}, false, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: X25519}, true, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: X25519}, false, [\])] + expected: FAIL + [okp_importKey_failures_X25519.https.any.worker.html] [Bad usages: importKey(spki, {name: X25519}, true, [encrypt\])] @@ -1272,3 +1284,15 @@ [Bad key length: importKey(raw, {name: X25519}, false, [\])] expected: FAIL + + [Empty usages: importKey(pkcs8, {name: X25519}, true, [\])] + expected: FAIL + + [Empty usages: importKey(pkcs8, {name: X25519}, false, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: X25519}, true, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: X25519}, false, [\])] + expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js.ini index d8e9e68083e..de2be849f97 100644 --- a/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js.ini @@ -647,6 +647,18 @@ [Bad key length: importKey(raw, {name: X448}, false, [\])] expected: FAIL + [Empty usages: importKey(pkcs8, {name: X448}, true, [\])] + expected: FAIL + + [Empty usages: importKey(pkcs8, {name: X448}, false, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: X448}, true, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: X448}, false, [\])] + expected: FAIL + [okp_importKey_failures_X448.https.any.html] [Bad usages: importKey(spki, {name: X448}, true, [encrypt\])] @@ -1296,3 +1308,15 @@ [Bad key length: importKey(raw, {name: X448}, false, [\])] expected: FAIL + + [Empty usages: importKey(pkcs8, {name: X448}, true, [\])] + expected: FAIL + + [Empty usages: importKey(pkcs8, {name: X448}, false, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: X448}, true, [\])] + expected: FAIL + + [Empty usages: importKey(jwk(private), {name: X448}, false, [\])] + expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/import_export/rsa_importKey.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/import_export/rsa_importKey.https.any.js.ini index 84e96a37380..624406cac27 100644 --- a/tests/wpt/metadata/WebCryptoAPI/import_export/rsa_importKey.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/import_export/rsa_importKey.https.any.js.ini @@ -1439,6 +1439,438 @@ [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [sign\])] expected: FAIL + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + [rsa_importKey.https.any.html] [Good parameters: 1024 bits (spki, buffer(162), {hash: SHA-1, name: RSA-OAEP}, true, [encrypt\])] @@ -2880,3 +3312,435 @@ [Good parameters: 4096 bits (jwk, object(kty, n, e, d, p, q, dp, dq, qi), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [sign\])] expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-OAEP}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSA-PSS}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 1024 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 2048 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-1, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-256, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-384, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, true, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (pkcs8, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL + + [Empty Usages: 4096 bits (jwk, object(spki, pkcs8, jwk), {hash: SHA-512, name: RSASSA-PKCS1-v1_5}, false, [\])] + expected: FAIL diff --git a/tests/wpt/metadata/WebCryptoAPI/import_export/symmetric_importKey.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/import_export/symmetric_importKey.https.any.js.ini index 0b00e9b07fb..49374f9470a 100644 --- a/tests/wpt/metadata/WebCryptoAPI/import_export/symmetric_importKey.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/import_export/symmetric_importKey.https.any.js.ini @@ -701,6 +701,240 @@ [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [deriveKey\])] expected: FAIL + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128CTR, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CTR}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128CTR, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CTR}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CTR}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CTR}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CTR}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CTR}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128CBC, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CBC}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128CBC, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CBC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CBC}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CBC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CBC}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CBC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128GCM, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-GCM}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128GCM, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-GCM}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-GCM}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-GCM}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-GCM}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-GCM}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128KW, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-KW}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128KW, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-KW}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-KW}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-KW}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-KW}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-KW}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-1, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-1, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-1, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-1, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-256, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-256, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-256, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-256, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-384, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-384, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-384, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-384, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-512, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-512, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-512, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-512, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [\])] + expected: FAIL + [symmetric_importKey.https.any.html] [Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [encrypt\])] @@ -1404,3 +1638,237 @@ [Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [deriveKey\])] expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128CTR, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CTR}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128CTR, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CTR}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CTR}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CTR}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CTR}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CTR}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256CTR, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CTR}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128CBC, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CBC}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128CBC, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-CBC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CBC}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-CBC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CBC}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-CBC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256CBC, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-CBC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128GCM, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-GCM}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128GCM, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-GCM}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-GCM}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-GCM}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-GCM}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-GCM}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256GCM, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-GCM}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128KW, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-KW}, true, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: A128KW, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {name: AES-KW}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-KW}, true, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: A192KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {name: AES-KW}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-KW}, true, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: A256KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-KW}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-1, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-1, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-1, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-1, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-256, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-256, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-256, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-256, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-384, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-384, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-384, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-384, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-512, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-512, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-512, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {hash: SHA-512, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [\])] + expected: FAIL + + [Empty Usages: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [\])] + expected: FAIL + + [Empty Usages: 192 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [\])] + expected: FAIL + + [Empty Usages: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: PBKDF2}, false, [\])] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-animations/inheritance.html.ini b/tests/wpt/metadata/css/css-animations/inheritance.html.ini new file mode 100644 index 00000000000..382b1e2efcc --- /dev/null +++ b/tests/wpt/metadata/css/css-animations/inheritance.html.ini @@ -0,0 +1,3 @@ +[inheritance.html] + [Property animation-duration has initial value auto] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-computed.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-computed.html.ini deleted file mode 100644 index 6c025f1c5e7..00000000000 --- a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-computed.html.ini +++ /dev/null @@ -1,54 +0,0 @@ -[animation-delay-end-computed.html] - [Property animation-delay-start value 'initial'] - expected: FAIL - - [Property animation-delay-start value '-500ms'] - expected: FAIL - - [Property animation-delay-start value 'calc(2 * 3s)'] - expected: FAIL - - [Property animation-delay-start value '20s, 10s'] - expected: FAIL - - [Property animation-delay-start value 'cover 0%'] - expected: FAIL - - [Property animation-delay-start value 'COVER 0%'] - expected: FAIL - - [Property animation-delay-start value 'cover 100%'] - expected: FAIL - - [Property animation-delay-start value 'cover 120%'] - expected: FAIL - - [Property animation-delay-start value 'cover 42%'] - expected: FAIL - - [Property animation-delay-start value 'cover -42%'] - expected: FAIL - - [Property animation-delay-start value 'contain 42%'] - expected: FAIL - - [Property animation-delay-start value 'exit 42%'] - expected: FAIL - - [Property animation-delay-start value 'exit calc(41% + 1%)'] - expected: FAIL - - [Property animation-delay-start value 'exit 1%, cover 2%, contain 100%'] - expected: FAIL - - [Property animation-delay-end value 'initial'] - expected: FAIL - - [Property animation-delay-end value '-500ms'] - expected: FAIL - - [Property animation-delay-end value 'calc(2 * 3s)'] - expected: FAIL - - [Property animation-delay-end value '20s, 10s'] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-computed.tentative.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-computed.tentative.html.ini new file mode 100644 index 00000000000..f4ec3b330f0 --- /dev/null +++ b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-computed.tentative.html.ini @@ -0,0 +1,12 @@ +[animation-delay-end-computed.tentative.html] + [Property animation-delay-end value 'initial'] + expected: FAIL + + [Property animation-delay-end value '-500ms'] + expected: FAIL + + [Property animation-delay-end value 'calc(2 * 3s)'] + expected: FAIL + + [Property animation-delay-end value '20s, 10s'] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-valid.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-valid.html.ini deleted file mode 100644 index b4afe67f574..00000000000 --- a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-valid.html.ini +++ /dev/null @@ -1,51 +0,0 @@ -[animation-delay-end-valid.html] - [e.style['animation-delay-start'\] = "-5ms" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "0s" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "10s" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "20s, 10s" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "cover 0%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "cover 100%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "cover 120%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "cover 42%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "cover -42%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "contain 42%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "exit 42%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "exit 1%, cover 2%, contain 100%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "enter 42%" should set the property value] - expected: FAIL - - [e.style['animation-delay-end'\] = "-5ms" should set the property value] - expected: FAIL - - [e.style['animation-delay-end'\] = "0s" should set the property value] - expected: FAIL - - [e.style['animation-delay-end'\] = "10s" should set the property value] - expected: FAIL - - [e.style['animation-delay-end'\] = "20s, 10s" should set the property value] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-valid.tentative.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-valid.tentative.html.ini new file mode 100644 index 00000000000..0809ede9423 --- /dev/null +++ b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-valid.tentative.html.ini @@ -0,0 +1,12 @@ +[animation-delay-end-valid.tentative.html] + [e.style['animation-delay-end'\] = "-5ms" should set the property value] + expected: FAIL + + [e.style['animation-delay-end'\] = "0s" should set the property value] + expected: FAIL + + [e.style['animation-delay-end'\] = "10s" should set the property value] + expected: FAIL + + [e.style['animation-delay-end'\] = "20s, 10s" should set the property value] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-start-computed.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-start-computed.html.ini deleted file mode 100644 index 66f7c1a42c6..00000000000 --- a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-start-computed.html.ini +++ /dev/null @@ -1,42 +0,0 @@ -[animation-delay-start-computed.html] - [Property animation-delay-start value 'initial'] - expected: FAIL - - [Property animation-delay-start value '-500ms'] - expected: FAIL - - [Property animation-delay-start value 'calc(2 * 3s)'] - expected: FAIL - - [Property animation-delay-start value '20s, 10s'] - expected: FAIL - - [Property animation-delay-start value 'cover 0%'] - expected: FAIL - - [Property animation-delay-start value 'COVER 0%'] - expected: FAIL - - [Property animation-delay-start value 'cover 100%'] - expected: FAIL - - [Property animation-delay-start value 'cover 120%'] - expected: FAIL - - [Property animation-delay-start value 'cover 42%'] - expected: FAIL - - [Property animation-delay-start value 'cover -42%'] - expected: FAIL - - [Property animation-delay-start value 'contain 42%'] - expected: FAIL - - [Property animation-delay-start value 'exit 42%'] - expected: FAIL - - [Property animation-delay-start value 'exit calc(41% + 1%)'] - expected: FAIL - - [Property animation-delay-start value 'exit 1%, cover 2%, contain 100%'] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-start-computed.tentative.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-start-computed.tentative.html.ini new file mode 100644 index 00000000000..8341379e4d8 --- /dev/null +++ b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-start-computed.tentative.html.ini @@ -0,0 +1,12 @@ +[animation-delay-start-computed.tentative.html] + [Property animation-delay-start value 'initial'] + expected: FAIL + + [Property animation-delay-start value '-500ms'] + expected: FAIL + + [Property animation-delay-start value 'calc(2 * 3s)'] + expected: FAIL + + [Property animation-delay-start value '20s, 10s'] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-start-valid.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-start-valid.html.ini deleted file mode 100644 index 806a329b1ab..00000000000 --- a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-start-valid.html.ini +++ /dev/null @@ -1,39 +0,0 @@ -[animation-delay-start-valid.html] - [e.style['animation-delay-start'\] = "-5ms" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "0s" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "10s" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "20s, 10s" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "cover 0%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "cover 100%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "cover 120%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "cover 42%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "cover -42%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "contain 42%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "exit 42%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "exit 1%, cover 2%, contain 100%" should set the property value] - expected: FAIL - - [e.style['animation-delay-start'\] = "enter 42%" should set the property value] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-start-valid.tentative.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-start-valid.tentative.html.ini new file mode 100644 index 00000000000..4ad3bb1e96b --- /dev/null +++ b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-start-valid.tentative.html.ini @@ -0,0 +1,12 @@ +[animation-delay-start-valid.tentative.html] + [e.style['animation-delay-start'\] = "-5ms" should set the property value] + expected: FAIL + + [e.style['animation-delay-start'\] = "0s" should set the property value] + expected: FAIL + + [e.style['animation-delay-start'\] = "10s" should set the property value] + expected: FAIL + + [e.style['animation-delay-start'\] = "20s, 10s" should set the property value] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-shorthand.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-shorthand.html.ini index 24d9f069eee..a9e8a84265d 100644 --- a/tests/wpt/metadata/css/css-animations/parsing/animation-shorthand.html.ini +++ b/tests/wpt/metadata/css/css-animations/parsing/animation-shorthand.html.ini @@ -25,3 +25,9 @@ [e.style['animation'\] = "4 1s -3s cubic-bezier(0, -2, 1, 3), anim paused both reverse" should set animation-range-start] expected: FAIL + + [e.style['animation'\] = "anim paused both reverse, 4 1s -3s cubic-bezier(0, -2, 1, 3)" should set animation-duration] + expected: FAIL + + [e.style['animation'\] = "4 1s -3s cubic-bezier(0, -2, 1, 3), anim paused both reverse" should set animation-duration] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-shorthand.tentative.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-shorthand.tentative.html.ini deleted file mode 100644 index 8462ff6a79a..00000000000 --- a/tests/wpt/metadata/css/css-animations/parsing/animation-shorthand.tentative.html.ini +++ /dev/null @@ -1,18 +0,0 @@ -[animation-shorthand.tentative.html] - [e.style['animation'\] = "anim paused both reverse 4 1s -3s cubic-bezier(0, -2, 1, 3)" should set animation-delay-end] - expected: FAIL - - [e.style['animation'\] = "anim paused both reverse 4 1s -3s cubic-bezier(0, -2, 1, 3)" should set animation-delay-start] - expected: FAIL - - [e.style['animation'\] = "anim paused both reverse 4 1s -3s cubic-bezier(0, -2, 1, 3)" should set animation-timeline] - expected: FAIL - - [e.style['animation'\] = "anim paused both reverse 4 1s -3s cubic-bezier(0, -2, 1, 3)" should not set unrelated longhands] - expected: FAIL - - [e.style['animation'\] = "anim paused both reverse 4 1s -3s cubic-bezier(0, -2, 1, 3)" should set animation-range-end] - expected: FAIL - - [e.style['animation'\] = "anim paused both reverse 4 1s -3s cubic-bezier(0, -2, 1, 3)" should set animation-range-start] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-valid.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-valid.html.ini new file mode 100644 index 00000000000..d8f84798d62 --- /dev/null +++ b/tests/wpt/metadata/css/css-animations/parsing/animation-valid.html.ini @@ -0,0 +1,24 @@ +[animation-valid.html] + [e.style['animation'\] = "cubic-bezier(0, -2, 1, 3)" should set the property value] + expected: FAIL + + [e.style['animation'\] = "4" should set the property value] + expected: FAIL + + [e.style['animation'\] = "reverse" should set the property value] + expected: FAIL + + [e.style['animation'\] = "both" should set the property value] + expected: FAIL + + [e.style['animation'\] = "paused" should set the property value] + expected: FAIL + + [e.style['animation'\] = "none" should set the property value] + expected: FAIL + + [e.style['animation'\] = "anim" should set the property value] + expected: FAIL + + [e.style['animation'\] = "anim paused both reverse, 4 1s -3s cubic-bezier(0, -2, 1, 3)" should set the property value] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/animation/color-interpolation.html.ini b/tests/wpt/metadata/css/css-color/animation/color-interpolation.html.ini index cb4cec9128b..4261f2b1e75 100644 --- a/tests/wpt/metadata/css/css-color/animation/color-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-color/animation/color-interpolation.html.ini @@ -451,3 +451,39 @@ [Web Animations: property <color> from [color(srgb 0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(150 0 0)\]] expected: FAIL + + [CSS Transitions: property <color> from [rgb(0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Transitions with transition: all: property <color> from [rgb(0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Animations: property <color> from [rgb(0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [Web Animations: property <color> from [rgb(0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Transitions: property <color> from [color(srgb 0 0 0)\] to [rgb(255 255 255)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Transitions with transition: all: property <color> from [color(srgb 0 0 0)\] to [rgb(255 255 255)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Animations: property <color> from [color(srgb 0 0 0)\] to [rgb(255 255 255)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [Web Animations: property <color> from [color(srgb 0 0 0)\] to [rgb(255 255 255)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Transitions: property <color> from [color(srgb 0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Transitions with transition: all: property <color> from [color(srgb 0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [CSS Animations: property <color> from [color(srgb 0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL + + [Web Animations: property <color> from [color(srgb 0 0 0)\] to [color(srgb 1 1 1)\] at (1.5) should be [oklab(1 0 0)\]] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/parsing/color-valid-color-mix-function.html.ini b/tests/wpt/metadata/css/css-color/parsing/color-valid-color-mix-function.html.ini index bf32053353b..5cceaf5ee0a 100644 --- a/tests/wpt/metadata/css/css-color/parsing/color-valid-color-mix-function.html.ini +++ b/tests/wpt/metadata/css/css-color/parsing/color-valid-color-mix-function.html.ini @@ -1,4 +1,5 @@ [color-valid-color-mix-function.html] + expected: ERROR [e.style['color'\] = "color-mix(in srgb, red, blue)" should set the property value] expected: FAIL @@ -1564,3 +1565,39 @@ [e.style['color'\] = "color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / none))" should set the property value] expected: FAIL + + [e.style['color'\] = "color-mix(in hsl specified hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hsl specified hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hsl specified hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hsl specified hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hsl specified hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hsl specified hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hwb specified hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hwb specified hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hwb specified hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hwb specified hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hwb specified hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))" should set the property value] + expected: FAIL + + [e.style['color'\] = "color-mix(in hwb specified hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))" should set the property value] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/parsing/color-valid-hwb.html.ini b/tests/wpt/metadata/css/css-color/parsing/color-valid-hwb.html.ini index 8c9a4ca783d..b52a2cd54fa 100644 --- a/tests/wpt/metadata/css/css-color/parsing/color-valid-hwb.html.ini +++ b/tests/wpt/metadata/css/css-color/parsing/color-valid-hwb.html.ini @@ -19,3 +19,6 @@ [e.style['color'\] = "hwb(none 100% 50% / none)" should set the property value] expected: FAIL + + [e.style['color'\] = "hwb(320deg 30% 40%)" should set the property value] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-flexbox/percentage-padding-003.html.ini b/tests/wpt/metadata/css/css-flexbox/percentage-padding-003.html.ini new file mode 100644 index 00000000000..7bb1493db2f --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/percentage-padding-003.html.ini @@ -0,0 +1,2 @@ +[percentage-padding-003.html] + expected: FAIL diff --git a/tests/wpt/metadata/fetch/api/basic/keepalive.any.js.ini b/tests/wpt/metadata/fetch/api/basic/keepalive.any.js.ini index 4c1c78640bb..e9ab91fc80e 100644 --- a/tests/wpt/metadata/fetch/api/basic/keepalive.any.js.ini +++ b/tests/wpt/metadata/fetch/api/basic/keepalive.any.js.ini @@ -1,4 +1,3 @@ [keepalive.any.html] - expected: TIMEOUT [keepalive in onunload in nested frame in another window] expected: FAIL diff --git a/tests/wpt/metadata/fetch/api/request/multi-globals/construct-in-detached-frame.window.js.ini b/tests/wpt/metadata/fetch/api/request/multi-globals/construct-in-detached-frame.window.js.ini new file mode 100644 index 00000000000..7f0d7e70992 --- /dev/null +++ b/tests/wpt/metadata/fetch/api/request/multi-globals/construct-in-detached-frame.window.js.ini @@ -0,0 +1,3 @@ +[construct-in-detached-frame.window.html] + [creating a request from another request in a detached realm should work] + expected: FAIL diff --git a/tests/wpt/metadata/fetch/api/response/response-static-json.any.js.ini b/tests/wpt/metadata/fetch/api/response/response-static-json.any.js.ini index 50541664b27..36cffd180be 100644 --- a/tests/wpt/metadata/fetch/api/response/response-static-json.any.js.ini +++ b/tests/wpt/metadata/fetch/api/response/response-static-json.any.js.ini @@ -26,6 +26,15 @@ [Check static json() propagates JSON serializer errors] expected: FAIL + [Check response returned by static json() with input 𝌆] + expected: FAIL + + [Check response returned by static json() with input U+df06U+d834] + expected: FAIL + + [Check response returned by static json() with input U+dead] + expected: FAIL + [response-static-json.any.html] [Check response returned by static json() with init undefined] @@ -52,6 +61,15 @@ [Check static json() propagates JSON serializer errors] expected: FAIL + [Check response returned by static json() with input 𝌆] + expected: FAIL + + [Check response returned by static json() with input U+df06U+d834] + expected: FAIL + + [Check response returned by static json() with input U+dead] + expected: FAIL + [response-static-json.any.serviceworker.html] expected: ERROR diff --git a/tests/wpt/metadata/fetch/data-urls/navigate.window.js.ini b/tests/wpt/metadata/fetch/data-urls/navigate.window.js.ini new file mode 100644 index 00000000000..d3c0ec7eb61 --- /dev/null +++ b/tests/wpt/metadata/fetch/data-urls/navigate.window.js.ini @@ -0,0 +1,6 @@ +[navigate.window.html] + [Nothing fancy] + expected: FAIL + + [base64] + expected: FAIL diff --git a/tests/wpt/metadata/fetch/local-network-access/iframe.tentative.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/iframe.tentative.https.window.js.ini index b6675b938ea..5b0348afa74 100644 --- a/tests/wpt/metadata/fetch/local-network-access/iframe.tentative.https.window.js.ini +++ b/tests/wpt/metadata/fetch/local-network-access/iframe.tentative.https.window.js.ini @@ -1,5 +1,4 @@ [iframe.tentative.https.window.html] - expected: TIMEOUT [private to local: failed preflight.] expected: FAIL @@ -31,10 +30,7 @@ expected: FAIL [public to local, grandparent navigates: failure.] - expected: TIMEOUT + expected: FAIL [public to local, grandparent navigates: success.] - expected: TIMEOUT - - [local to local, grandparent navigates: no preflight required.] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini b/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini index aa6caedd473..9749a4fccd5 100644 --- a/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini +++ b/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini @@ -147,5 +147,5 @@ [list-style-image sec-fetch-site - HTTPS downgrade-upgrade] expected: FAIL - [background-image sec-fetch-dest - Not sent to non-trustworthy same-site destination] - expected: TIMEOUT + [border-image sec-fetch-dest - Not sent to non-trustworthy cross-site destination] + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini deleted file mode 100644 index 3e07e6b7d1f..00000000000 --- a/tests/wpt/metadata/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/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini index 51fd557bd7f..149bcb4ff8c 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini @@ -7,3 +7,6 @@ [load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank#foo'] expected: FAIL + + [load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank'] + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-no-beforeunload.window.js.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-no-beforeunload.window.js.ini index e91aac214b4..abd95eec1fd 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-no-beforeunload.window.js.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-no-beforeunload.window.js.ini @@ -4,16 +4,7 @@ expected: NOTRUN [Navigating an opened window with an iframe via location.href to a javascript: URL must not fire beforeunload on the iframe: undefined completion] - expected: NOTRUN + expected: FAIL [Navigating an opened window via location.href to a javascript: URL must not fire beforeunload: string completion] - expected: NOTRUN - - [Navigating an opened window via location.href to a javascript: URL must not fire beforeunload: undefined completion] expected: TIMEOUT - - [Navigating an iframe via location.href to a javascript: URL must not fire beforeunload: string completion] - expected: NOTRUN - - [Navigating an iframe via src="" to a javascript: URL after insertion must not fire beforeunload: string completion] - expected: NOTRUN diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini index 8ae58f9f1e2..78240a2f463 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini @@ -16,6 +16,3 @@ [D83D DE0D set in href="" targeting a frame and clicked] expected: FAIL - - [DE0D 0041 set in href="" targeting a frame and clicked] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini index 27889a98fb5..9eb22957864 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini @@ -1,6 +1,7 @@ [navigate-to-unparseable-url.html] + expected: TIMEOUT [location.href setter throws a SyntaxError DOMException for unparseable URLs] - expected: FAIL + expected: TIMEOUT [<a> tag navigate fails for unparseable URLs] - expected: FAIL + expected: NOTRUN diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.js.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.js.ini deleted file mode 100644 index 4ecd6d9f753..00000000000 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.js.ini +++ /dev/null @@ -1,3 +0,0 @@ -[navigation-unload-cross-origin.sub.window.html] - [Cross-origin navigation started from unload handler must be ignored] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin-fragment.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin-fragment.html.ini deleted file mode 100644 index 49cc2e16746..00000000000 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin-fragment.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[navigation-unload-same-origin-fragment.html] - [Tests that a fragment navigation in the unload handler will not block the initial navigation] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini deleted file mode 100644 index 7dc346632a4..00000000000 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini +++ /dev/null @@ -1,3 +0,0 @@ -[navigation-unload-same-origin.window.html] - [Same-origin navigation started from unload handler must be ignored] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html.ini index 9f7f24f662e..0e40ffc0656 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html.ini @@ -1,3 +1,4 @@ [nav-cancelation-2.sub.html] + expected: TIMEOUT [grandparent cancels a pending navigation in a cross-origin grandchild] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini new file mode 100644 index 00000000000..ba0aed26689 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini @@ -0,0 +1,3 @@ +[traverse_the_history_1.html] + [Multiple history traversals from the same task] + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini deleted file mode 100644 index 5d17a8e9419..00000000000 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[traverse_the_history_2.html] - [Multiple history traversals, last would be aborted] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini deleted file mode 100644 index 4b4820d1729..00000000000 --- a/tests/wpt/metadata/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[creating_browsing_context_test_01.html] - [first argument: absolute url] - expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.absolute.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.absolute.html.ini new file mode 100644 index 00000000000..6a8206c0505 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.absolute.html.ini @@ -0,0 +1,3 @@ +[2d.text.drawing.style.letterSpacing.measure.absolute.html] + [Testing letter spacing with absolute length] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.absolute.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.absolute.worker.js.ini new file mode 100644 index 00000000000..eaae7cc8c84 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.absolute.worker.js.ini @@ -0,0 +1,3 @@ +[2d.text.drawing.style.letterSpacing.measure.absolute.worker.html] + [Testing letter spacing with absolute length] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.html.ini deleted file mode 100644 index 708eee4c24f..00000000000 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[2d.text.drawing.style.letterSpacing.measure.html] - [Testing letter spacing and word spacing] - expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.relative.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.relative.html.ini new file mode 100644 index 00000000000..9cb3a0a857b --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.relative.html.ini @@ -0,0 +1,3 @@ +[2d.text.drawing.style.letterSpacing.measure.relative.html] + [Testing letter spacing with font-relative length] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.relative.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.relative.worker.js.ini new file mode 100644 index 00000000000..eca264d6801 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.relative.worker.js.ini @@ -0,0 +1,3 @@ +[2d.text.drawing.style.letterSpacing.measure.relative.worker.html] + [Testing letter spacing with font-relative length] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.worker.js.ini deleted file mode 100644 index 53f6eb73da5..00000000000 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.worker.js.ini +++ /dev/null @@ -1,3 +0,0 @@ -[2d.text.drawing.style.letterSpacing.measure.worker.html] - [Testing letter spacing and word spacing] - expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.absolute.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.absolute.html.ini new file mode 100644 index 00000000000..2d3e39dc1ab --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.absolute.html.ini @@ -0,0 +1,3 @@ +[2d.text.drawing.style.wordSpacing.measure.absolute.html] + [Testing if word spacing is working properly with absolute length] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.absolute.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.absolute.worker.js.ini new file mode 100644 index 00000000000..dc9c3e064a6 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.absolute.worker.js.ini @@ -0,0 +1,3 @@ +[2d.text.drawing.style.wordSpacing.measure.absolute.worker.html] + [Testing if word spacing is working properly with absolute length] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.html.ini deleted file mode 100644 index 21d30292a8b..00000000000 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[2d.text.drawing.style.wordSpacing.measure.html] - [Testing if word spacing is working properly] - expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.relative.html.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.relative.html.ini new file mode 100644 index 00000000000..7a3721c0c12 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.relative.html.ini @@ -0,0 +1,3 @@ +[2d.text.drawing.style.wordSpacing.measure.relative.html] + [Testing if word spacing is working properly with font-relative length] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.relative.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.relative.worker.js.ini new file mode 100644 index 00000000000..2142c126098 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.relative.worker.js.ini @@ -0,0 +1,3 @@ +[2d.text.drawing.style.wordSpacing.measure.relative.worker.html] + [Testing if word spacing is working properly with font-relative length] + expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.worker.js.ini deleted file mode 100644 index 546865fd8b2..00000000000 --- a/tests/wpt/metadata/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.worker.js.ini +++ /dev/null @@ -1,3 +0,0 @@ -[2d.text.drawing.style.wordSpacing.measure.worker.html] - [Testing if word spacing is working properly] - expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini index 25d9964f057..2d3fbf0f308 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini @@ -1,4 +1,5 @@ [iframe_sandbox_popups_escaping-1.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/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini index 6f7461b9472..f9138fb999a 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini @@ -1,4 +1,5 @@ [iframe_sandbox_popups_nonescaping-1.html] type: testharness + expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] - expected: FAIL + expected: NOTRUN diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini index 6bec7a732b8..76e34322dca 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini @@ -1,4 +1,5 @@ [iframe_sandbox_popups_nonescaping-2.html] type: testharness + expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] - expected: FAIL + expected: NOTRUN diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/image-compositing-change.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/image-compositing-change.html.ini new file mode 100644 index 00000000000..30b696b181c --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/image-compositing-change.html.ini @@ -0,0 +1,2 @@ +[image-compositing-change.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini index 3cdeb8ebcbc..47b45e65a1c 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini @@ -1,3 +1,9 @@ [non-active-document.html] [DOMParser] expected: FAIL + + [createHTMLDocument] + expected: FAIL + + [<template>] + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini index 5845ddee93e..4ba57fcf86e 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini @@ -181,3 +181,6 @@ [multipart/form-data: lone surrogate in name and value (formdata event)] expected: FAIL + + [multipart/form-data: Basic test (formdata event)] + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html.ini deleted file mode 100644 index 7682a4830bf..00000000000 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[reparent-form-during-planned-navigation-task.html] - expected: TIMEOUT - [reparent-form-during-planned-navigation-task] - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini index 5df1d116577..2ed4e055249 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini @@ -181,3 +181,6 @@ [text/plain: lone surrogate in name and value (formdata event)] expected: FAIL + + [text/plain: Basic File test (formdata event)] + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/historical.html.ini b/tests/wpt/metadata/html/semantics/forms/historical.html.ini deleted file mode 100644 index 5d8289307cc..00000000000 --- a/tests/wpt/metadata/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/metadata/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini b/tests/wpt/metadata/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini index 6ba4d555845..2d44172f4dc 100644 --- a/tests/wpt/metadata/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini +++ b/tests/wpt/metadata/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini @@ -11,7 +11,7 @@ expected: NOTRUN [Check that rel=noopener with target=_parent does a normal load] - expected: FAIL + expected: NOTRUN [Check that rel=noopener with target=_self does a normal load] expected: NOTRUN diff --git a/tests/wpt/metadata/html/semantics/popovers/popover-anchor-transition.tentative.html.ini b/tests/wpt/metadata/html/semantics/popovers/popover-anchor-transition.tentative.html.ini new file mode 100644 index 00000000000..5f06e84df4a --- /dev/null +++ b/tests/wpt/metadata/html/semantics/popovers/popover-anchor-transition.tentative.html.ini @@ -0,0 +1,3 @@ +[popover-anchor-transition.tentative.html] + [Transitioning display property of an anchored popover should not cause a position shift] + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/popovers/popover-dialog-initial-focus.html.ini b/tests/wpt/metadata/html/semantics/popovers/popover-dialog-initial-focus.html.ini deleted file mode 100644 index d7c7f792165..00000000000 --- a/tests/wpt/metadata/html/semantics/popovers/popover-dialog-initial-focus.html.ini +++ /dev/null @@ -1,6 +0,0 @@ -[popover-dialog-initial-focus.html] - [Opening dialogs as popovers should use dialog initial focus algorithm.] - expected: FAIL - - [Opening dialogs as popovers which have autofocus should focus the dialog.] - expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/popovers/popover-focus-child-dialog.html.ini b/tests/wpt/metadata/html/semantics/popovers/popover-focus-child-dialog.html.ini deleted file mode 100644 index 83b373290ff..00000000000 --- a/tests/wpt/metadata/html/semantics/popovers/popover-focus-child-dialog.html.ini +++ /dev/null @@ -1,7 +0,0 @@ -[popover-focus-child-dialog.html] - expected: ERROR - [Popovers should not initially focus child dialog elements.] - expected: FAIL - - [Popovers should not initially focus child popover elements.] - expected: NOTRUN diff --git a/tests/wpt/metadata/html/semantics/popovers/popover-open-overflow-display.html.ini b/tests/wpt/metadata/html/semantics/popovers/popover-open-overflow-display.html.ini deleted file mode 100644 index 94f5e7eee7a..00000000000 --- a/tests/wpt/metadata/html/semantics/popovers/popover-open-overflow-display.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[popover-open-overflow-display.html] - expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/popovers/popover-open-overflow-display.tentative.html.ini b/tests/wpt/metadata/html/semantics/popovers/popover-open-overflow-display.tentative.html.ini new file mode 100644 index 00000000000..2d47510b317 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/popovers/popover-open-overflow-display.tentative.html.ini @@ -0,0 +1,2 @@ +[popover-open-overflow-display.tentative.html] + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/defer-script/async-script.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/defer-script/async-script.html.ini deleted file mode 100644 index 2212b9d731f..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/defer-script/async-script.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[async-script.html?reload] - expected: ERROR - -[async-script.html] diff --git a/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini b/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini deleted file mode 100644 index b8bdf33cb65..00000000000 --- a/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[DOMContentLoaded-defer.html] - [The end: DOMContentLoaded and defer scripts] - expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini new file mode 100644 index 00000000000..fc0233f5241 --- /dev/null +++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini @@ -0,0 +1,3 @@ +[module-delayed.html] + [async document.write in a module] + expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini new file mode 100644 index 00000000000..39ffbb01044 --- /dev/null +++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini @@ -0,0 +1,4 @@ +[reload.window.html] + expected: TIMEOUT + [Reloading a document.open()'d page should reload the URL of the entry realm's responsible document] + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini index e55f8f2ce3c..8845054116d 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini @@ -3,6 +3,3 @@ expected: TIMEOUT [The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document] expected: TIMEOUT - - [The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document] - expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini index cb8afdd7287..dbe1def99e3 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini @@ -1,7 +1,6 @@ [promise-job-entry-different-function-realm.html] - expected: TIMEOUT [Fulfillment handler on fulfilled promise] - expected: TIMEOUT + expected: FAIL [Rejection handler on pending-then-rejected promise] expected: FAIL @@ -10,7 +9,7 @@ expected: FAIL [Rejection handler on rejected promise] - expected: TIMEOUT + expected: FAIL [Fulfillment handler on pending-then-fulfilled promise] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/resource-timing/interim-response-times.h2.html.ini b/tests/wpt/metadata/resource-timing/interim-response-times.h2.html.ini index 249721963bd..b240a617b59 100644 --- a/tests/wpt/metadata/resource-timing/interim-response-times.h2.html.ini +++ b/tests/wpt/metadata/resource-timing/interim-response-times.h2.html.ini @@ -13,3 +13,39 @@ [Fetch from cross-origin without early hints, with Timing-Allow-Origin should not expose interim response times] expected: FAIL + + [Fetch from same-origin with early hints, with 100 response] + expected: FAIL + + [Fetch from cross-origin with early hints, with 100 response] + expected: FAIL + + [Fetch from cross-origin-with-TAO with early hints, with 100 response] + expected: FAIL + + [Fetch from same-origin with early hints, without 100 response] + expected: FAIL + + [Fetch from cross-origin with early hints, without 100 response] + expected: FAIL + + [Fetch from cross-origin-with-TAO with early hints, without 100 response] + expected: FAIL + + [Fetch from same-origin without early hints, with 100 response] + expected: FAIL + + [Fetch from cross-origin without early hints, with 100 response] + expected: FAIL + + [Fetch from cross-origin-with-TAO without early hints, with 100 response] + expected: FAIL + + [Fetch from same-origin without early hints, without 100 response] + expected: FAIL + + [Fetch from cross-origin without early hints, without 100 response] + expected: FAIL + + [Fetch from cross-origin-with-TAO without early hints, without 100 response] + expected: FAIL diff --git a/tests/wpt/metadata/resource-timing/interim-response-times.html.ini b/tests/wpt/metadata/resource-timing/interim-response-times.html.ini index efec5faa42f..af29d923453 100644 --- a/tests/wpt/metadata/resource-timing/interim-response-times.html.ini +++ b/tests/wpt/metadata/resource-timing/interim-response-times.html.ini @@ -13,3 +13,39 @@ [Fetch from cross-origin without early hints, with Timing-Allow-Origin should not expose interim response times] expected: FAIL + + [Fetch from same-origin with early hints, with 100 response] + expected: FAIL + + [Fetch from cross-origin with early hints, with 100 response] + expected: FAIL + + [Fetch from cross-origin-with-TAO with early hints, with 100 response] + expected: FAIL + + [Fetch from same-origin with early hints, without 100 response] + expected: FAIL + + [Fetch from cross-origin with early hints, without 100 response] + expected: FAIL + + [Fetch from cross-origin-with-TAO with early hints, without 100 response] + expected: FAIL + + [Fetch from same-origin without early hints, with 100 response] + expected: FAIL + + [Fetch from cross-origin without early hints, with 100 response] + expected: FAIL + + [Fetch from cross-origin-with-TAO without early hints, with 100 response] + expected: FAIL + + [Fetch from same-origin without early hints, without 100 response] + expected: FAIL + + [Fetch from cross-origin without early hints, without 100 response] + expected: FAIL + + [Fetch from cross-origin-with-TAO without early hints, without 100 response] + expected: FAIL diff --git a/tests/wpt/metadata/webmessaging/without-ports/017.html.ini b/tests/wpt/metadata/webmessaging/without-ports/017.html.ini deleted file mode 100644 index c7946fc91b4..00000000000 --- a/tests/wpt/metadata/webmessaging/without-ports/017.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[017.html] - expected: TIMEOUT - [origin of the script that invoked the method, about:blank] - expected: TIMEOUT diff --git a/tests/wpt/metadata/webmessaging/without-ports/018.html.ini b/tests/wpt/metadata/webmessaging/without-ports/018.html.ini new file mode 100644 index 00000000000..b7b36c1d3a4 --- /dev/null +++ b/tests/wpt/metadata/webmessaging/without-ports/018.html.ini @@ -0,0 +1,4 @@ +[018.html] + expected: TIMEOUT + [origin of the script that invoked the method, javascript:] + expected: TIMEOUT diff --git a/tests/wpt/metadata/websockets/Create-http-urls.any.js.ini b/tests/wpt/metadata/websockets/Create-http-urls.any.js.ini new file mode 100644 index 00000000000..e36bebb1325 --- /dev/null +++ b/tests/wpt/metadata/websockets/Create-http-urls.any.js.ini @@ -0,0 +1,8 @@ +[Create-http-urls.any.worker.html] + [WebSocket: ensure both HTTP schemes are supported] + expected: FAIL + + +[Create-http-urls.any.html] + [WebSocket: ensure both HTTP schemes are supported] + expected: FAIL diff --git a/tests/wpt/metadata/websockets/Create-non-absolute-url.any.js.ini b/tests/wpt/metadata/websockets/Create-non-absolute-url.any.js.ini new file mode 100644 index 00000000000..05fc96cb047 --- /dev/null +++ b/tests/wpt/metadata/websockets/Create-non-absolute-url.any.js.ini @@ -0,0 +1,26 @@ +[Create-non-absolute-url.any.worker.html] + [Create WebSocket - Pass a non absolute URL: test] + expected: FAIL + + [Create WebSocket - Pass a non absolute URL: ?] + expected: FAIL + + [Create WebSocket - Pass a non absolute URL: null] + expected: FAIL + + [Create WebSocket - Pass a non absolute URL: 123] + expected: FAIL + + +[Create-non-absolute-url.any.html] + [Create WebSocket - Pass a non absolute URL: test] + expected: FAIL + + [Create WebSocket - Pass a non absolute URL: ?] + expected: FAIL + + [Create WebSocket - Pass a non absolute URL: null] + expected: FAIL + + [Create WebSocket - Pass a non absolute URL: 123] + expected: FAIL diff --git a/tests/wpt/metadata/websockets/Create-url-with-windows-1252-encoding.html.ini b/tests/wpt/metadata/websockets/Create-url-with-windows-1252-encoding.html.ini new file mode 100644 index 00000000000..918c19fbfcd --- /dev/null +++ b/tests/wpt/metadata/websockets/Create-url-with-windows-1252-encoding.html.ini @@ -0,0 +1,3 @@ +[Create-url-with-windows-1252-encoding.html] + [URL's percent-encoding is always in UTF-8 for WebSocket] + expected: FAIL diff --git a/tests/wpt/metadata/websockets/Create-wrong-scheme.any.js.ini b/tests/wpt/metadata/websockets/Create-wrong-scheme.any.js.ini deleted file mode 100644 index 2ddc8cbb3a0..00000000000 --- a/tests/wpt/metadata/websockets/Create-wrong-scheme.any.js.ini +++ /dev/null @@ -1,11 +0,0 @@ -[Create-wrong-scheme.any.worker.html?wpt_flags=h2] - -[Create-wrong-scheme.any.worker.html] - -[Create-wrong-scheme.any.html?wpt_flags=h2] - -[Create-wrong-scheme.any.html?wss] - -[Create-wrong-scheme.any.worker.html?wss] - -[Create-wrong-scheme.any.html] diff --git a/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini b/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini deleted file mode 100644 index 80f9a4f15b8..00000000000 --- a/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[Worker-constructor.html] - expected: ERROR diff --git a/tests/wpt/mozilla/meta/css/stylesheet_media_queries.html.ini b/tests/wpt/mozilla/meta/css/stylesheet_media_queries.html.ini new file mode 100644 index 00000000000..77ca6b0688d --- /dev/null +++ b/tests/wpt/mozilla/meta/css/stylesheet_media_queries.html.ini @@ -0,0 +1,3 @@ +[stylesheet_media_queries.html] + [Media queries within stylesheets] + expected: FAIL diff --git a/tests/wpt/web-platform-tests/.azure-pipelines.yml b/tests/wpt/web-platform-tests/.azure-pipelines.yml index 20d5ec0f431..7851cd61e1f 100644 --- a/tests/wpt/web-platform-tests/.azure-pipelines.yml +++ b/tests/wpt/web-platform-tests/.azure-pipelines.yml @@ -111,20 +111,25 @@ jobs: - template: tools/ci/azure/update_manifest.yml - script: | set -eux -o pipefail - ./wpt run --yes --no-manifest-update --manifest MANIFEST.json --metadata infrastructure/metadata/ --log-mach - --log-mach-level info --channel dev chrome infrastructure/ + ./wpt run --yes --no-manifest-update --manifest MANIFEST.json --metadata infrastructure/metadata/ --log-mach - --log-mach-level info --log-wptreport $(Build.ArtifactStagingDirectory)/wpt_report_macos_chrome.json --channel dev chrome infrastructure/ condition: succeededOrFailed() displayName: 'Run tests (Chrome Dev)' - script: | set -eux -o pipefail - ./wpt run --yes --no-manifest-update --manifest MANIFEST.json --metadata infrastructure/metadata/ --log-mach - --log-mach-level info --channel nightly firefox infrastructure/ + ./wpt run --yes --no-manifest-update --manifest MANIFEST.json --metadata infrastructure/metadata/ --log-mach - --log-mach-level info --log-wptreport $(Build.ArtifactStagingDirectory)/wpt_report_macos_firefox.json --channel nightly firefox infrastructure/ condition: succeededOrFailed() displayName: 'Run tests (Firefox Nightly)' - script: | set -eux -o pipefail export SYSTEM_VERSION_COMPAT=0 - ./wpt run --yes --no-manifest-update --manifest MANIFEST.json --metadata infrastructure/metadata/ --log-mach - --log-mach-level info --channel preview safari infrastructure/ + ./wpt run --yes --no-manifest-update --manifest MANIFEST.json --metadata infrastructure/metadata/ --log-mach - --log-mach-level info --log-wptreport $(Build.ArtifactStagingDirectory)/wpt_report_macos_safari.json --channel preview safari infrastructure/ condition: succeededOrFailed() displayName: 'Run tests (Safari Technology Preview)' + - task: PublishBuildArtifacts@1 + condition: succeededOrFailed() + displayName: 'Publish results' + inputs: + artifactName: 'infrastructure-results' - template: tools/ci/azure/publish_logs.yml - template: tools/ci/azure/sysdiagnose.yml diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/failures.js b/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/failures.js index c39e4d211cb..e0f0279a69b 100644 --- a/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/failures.js +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/generateKey/failures.js @@ -204,7 +204,7 @@ function run_test(algorithmNames) { }); - // The last thing that should be checked is an empty usages (for secret keys). + // The last thing that should be checked is empty usages (disallowed for secret and private keys). testVectors.forEach(function(vector) { var name = vector.name; diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/ec_importKey.https.any.js b/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/ec_importKey.https.any.js index c70583bf12e..25defa369c1 100644 --- a/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/ec_importKey.https.any.js +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/ec_importKey.https.any.js @@ -85,13 +85,13 @@ }); // Next, test private keys - allValidUsages(vector.privateUsages, []).forEach(function(usages) { - ['pkcs8', 'jwk'].forEach(function(format) { - var algorithm = {name: vector.name, namedCurve: curve}; - var data = keyData[curve]; - + ['pkcs8', 'jwk'].forEach(function(format) { + var algorithm = {name: vector.name, namedCurve: curve}; + var data = keyData[curve]; + allValidUsages(vector.privateUsages, []).forEach(function(usages) { testFormat(format, algorithm, data, curve, usages, extractable); }); + testEmptyUsages(format, algorithm, data, curve, extractable); }); }); @@ -136,6 +136,21 @@ }, "Good parameters: " + keySize.toString() + " bits " + parameterString(format, compressed, keyData, algorithm, extractable, usages)); } + // Test importKey with a given key format and other parameters but with empty usages. + // Should fail with SyntaxError + function testEmptyUsages(format, algorithm, data, keySize, extractable) { + const keyData = data[format]; + const usages = []; + promise_test(function(test) { + return subtle.importKey(format, keyData, algorithm, extractable, usages). + then(function(key) { + assert_unreached("importKey succeeded but should have failed with SyntaxError"); + }, function(err) { + assert_equals(err.name, "SyntaxError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, "Empty Usages: " + keySize.toString() + " bits " + parameterString(format, false, keyData, algorithm, extractable, usages)); + } + // Helper methods follow: diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/okp_importKey_failures.js b/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/okp_importKey_failures.js index a5cc08a01e9..ebdb73616d6 100644 --- a/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/okp_importKey_failures.js +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/okp_importKey_failures.js @@ -132,6 +132,19 @@ function run_test(algorithmNames) { }); }); + // Algorithms normalize okay, but usages bad (empty). + // Should fail due to SyntaxError + testVectors.forEach(function(vector) { + var name = vector.name; + validKeyData.filter((test) => test.format === 'pkcs8' || (test.format === 'jwk' && test.data.d)).forEach(function(test) { + allAlgorithmSpecifiersFor(name).forEach(function(algorithm) { + [true, false].forEach(function(extractable) { + testError(test.format, algorithm, test.data, name, [/* Empty usages */], extractable, "SyntaxError", "Empty usages"); + }); + }); + }); + }); + // Algorithms normalize okay, usages ok. The length of the key must thouw a DataError exception. testVectors.forEach(function(vector) { var name = vector.name; diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/rsa_importKey.https.any.js b/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/rsa_importKey.https.any.js index 41d25da89c6..5582b2f506b 100644 --- a/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/rsa_importKey.https.any.js +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/rsa_importKey.https.any.js @@ -92,13 +92,13 @@ }); // Next, test private keys - allValidUsages(vector.privateUsages, []).forEach(function(usages) { - ['pkcs8', 'jwk'].forEach(function(format) { - var algorithm = {name: vector.name, hash: hash}; - var data = keyData[size]; - + ['pkcs8', 'jwk'].forEach(function(format) { + var algorithm = {name: vector.name, hash: hash}; + var data = keyData[size]; + allValidUsages(vector.privateUsages, []).forEach(function(usages) { testFormat(format, algorithm, data, size, usages, extractable); }); + testEmptyUsages(format, algorithm, data, size, extractable); }); }); }); @@ -135,6 +135,20 @@ }, "Good parameters: " + keySize.toString() + " bits " + parameterString(format, keyData[format], algorithm, extractable, usages)); } + // Test importKey with a given key format and other parameters but with empty usages. + // Should fail with SyntaxError + function testEmptyUsages(format, algorithm, keyData, keySize, extractable) { + const usages = []; + promise_test(function(test) { + return subtle.importKey(format, keyData[format], algorithm, extractable, usages). + then(function(key) { + assert_unreached("importKey succeeded but should have failed with SyntaxError"); + }, function(err) { + assert_equals(err.name, "SyntaxError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, "Empty Usages: " + keySize.toString() + " bits " + parameterString(format, keyData, algorithm, extractable, usages)); + } + // Helper methods follow: diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/symmetric_importKey.https.any.js b/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/symmetric_importKey.https.any.js index 404b66ac002..a9ce9be0a1b 100644 --- a/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/symmetric_importKey.https.any.js +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/import_export/symmetric_importKey.https.any.js @@ -41,17 +41,18 @@ } rawKeyData.forEach(function(keyData) { - // Generate all combinations of valid usages for testing - allValidUsages(vector.legalUsages, []).forEach(function(usages) { - // Try each legal value of the extractable parameter - vector.extractable.forEach(function(extractable) { - vector.formats.forEach(function(format) { - var data = keyData; - if (format === "jwk") { - data = jwkData(keyData, algorithm); - } + // Try each legal value of the extractable parameter + vector.extractable.forEach(function(extractable) { + vector.formats.forEach(function(format) { + var data = keyData; + if (format === "jwk") { + data = jwkData(keyData, algorithm); + } + // Generate all combinations of valid usages for testing + allValidUsages(vector.legalUsages, []).forEach(function(usages) { testFormat(format, algorithm, data, keyData.length * 8, usages, extractable); }); + testEmptyUsages(format, algorithm, data, keyData.length * 8, extractable); }); }); @@ -90,6 +91,20 @@ }, "Good parameters: " + keySize.toString() + " bits " + parameterString(format, keyData, algorithm, extractable, usages)); } + // Test importKey with a given key format and other parameters but with empty usages. + // Should fail with SyntaxError + function testEmptyUsages(format, algorithm, keyData, keySize, extractable) { + const usages = []; + promise_test(function(test) { + return subtle.importKey(format, keyData, algorithm, extractable, usages). + then(function(key) { + assert_unreached("importKey succeeded but should have failed with SyntaxError"); + }, function(err) { + assert_equals(err.name, "SyntaxError", "Should throw correct error, not " + err.name + ": " + err.message); + }); + }, "Empty Usages: " + keySize.toString() + " bits " + parameterString(format, keyData, algorithm, extractable, usages)); + } + // Helper methods follow: diff --git a/tests/wpt/web-platform-tests/credential-management/support/fedcm-mock.js b/tests/wpt/web-platform-tests/credential-management/support/fedcm-mock.js index cb48bdb27e8..16a72b1d2c3 100644 --- a/tests/wpt/web-platform-tests/credential-management/support/fedcm-mock.js +++ b/tests/wpt/web-platform-tests/credential-management/support/fedcm-mock.js @@ -105,6 +105,9 @@ export class MockFederatedAuthRequest { async unregisterIdP(configURL) { } + async resolveTokenRequest(token) { + } + async closeModalDialogView() { } diff --git a/tests/wpt/web-platform-tests/css/css-animations/inheritance.html b/tests/wpt/web-platform-tests/css/css-animations/inheritance.html index 6e7697b9d81..dd9d6469336 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/inheritance.html +++ b/tests/wpt/web-platform-tests/css/css-animations/inheritance.html @@ -17,7 +17,7 @@ <script> assert_not_inherited('animation-delay', '0s', '2s'); assert_not_inherited('animation-direction', 'normal', 'reverse'); -assert_not_inherited('animation-duration', '0s', '3s'); +assert_not_inherited('animation-duration', 'auto', '3s'); assert_not_inherited('animation-fill-mode', 'none', 'forwards'); assert_not_inherited('animation-iteration-count', '1', '4'); assert_not_inherited('animation-name', 'none', 'spinner'); diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-computed.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-computed.html index f8d34b889ba..9152c49ee0c 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-computed.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-computed.html @@ -18,24 +18,24 @@ // [ none | <keyframes-name> ] test(() => { - assert_equals(getComputedStyle(document.getElementById('target')).animation, "0s ease 0s 1 normal none running none"); + assert_equals(getComputedStyle(document.getElementById('target')).animation, "auto ease 0s 1 normal none running none"); }, "Default animation value"); test_computed_value("animation", "1s", "1s ease 0s 1 normal none running none"); -test_computed_value("animation", "cubic-bezier(0, -2, 1, 3)", "0s cubic-bezier(0, -2, 1, 3) 0s 1 normal none running none"); +test_computed_value("animation", "cubic-bezier(0, -2, 1, 3)", "auto cubic-bezier(0, -2, 1, 3) 0s 1 normal none running none"); test_computed_value("animation", "1s -3s", "1s ease -3s 1 normal none running none"); -test_computed_value("animation", "4", "0s ease 0s 4 normal none running none"); -test_computed_value("animation", "reverse", "0s ease 0s 1 reverse none running none"); -test_computed_value("animation", "both", "0s ease 0s 1 normal both running none"); -test_computed_value("animation", "paused", "0s ease 0s 1 normal none paused none"); -test_computed_value("animation", "none", "0s ease 0s 1 normal none running none"); -test_computed_value("animation", "anim", "0s ease 0s 1 normal none running anim"); +test_computed_value("animation", "4", "auto ease 0s 4 normal none running none"); +test_computed_value("animation", "reverse", "auto ease 0s 1 reverse none running none"); +test_computed_value("animation", "both", "auto ease 0s 1 normal both running none"); +test_computed_value("animation", "paused", "auto ease 0s 1 normal none paused none"); +test_computed_value("animation", "none", "auto ease 0s 1 normal none running none"); +test_computed_value("animation", "anim", "auto ease 0s 1 normal none running anim"); test_computed_value("animation", "anim paused both reverse 4 1s -3s cubic-bezier(0, -2, 1, 3)", "1s cubic-bezier(0, -2, 1, 3) -3s 4 reverse both paused anim"); test_computed_value("animation", "anim paused both reverse, 4 1s -3s cubic-bezier(0, -2, 1, 3)", - "0s ease 0s 1 reverse both paused anim, 1s cubic-bezier(0, -2, 1, 3) -3s 4 normal none running none"); + "auto ease 0s 1 reverse both paused anim, 1s cubic-bezier(0, -2, 1, 3) -3s 4 normal none running none"); // TODO: Add test with a single timing-function keyword. </script> diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-computed.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-computed.tentative.html index 77f96706383..77f96706383 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-computed.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-computed.tentative.html diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-invalid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-invalid.tentative.html index 7cabd4e8e54..7cabd4e8e54 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-invalid.tentative.html diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-valid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-valid.tentative.html index 162c781bb01..162c781bb01 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-valid.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-valid.tentative.html diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-computed.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-computed.tentative.html index bfb89d0267f..bfb89d0267f 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-computed.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-computed.tentative.html diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-invalid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-invalid.tentative.html index bff31f3789a..bff31f3789a 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-invalid.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-invalid.tentative.html diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-valid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-valid.tentative.html index f52286444ed..f52286444ed 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-valid.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-valid.tentative.html diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html index 464e42460b1..8b482ff900f 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.html @@ -26,7 +26,7 @@ test_shorthand_value('animation', 'anim paused both reverse 4 1s -3s cubic-bezie }); test_shorthand_value('animation', 'anim paused both reverse, 4 1s -3s cubic-bezier(0, -2, 1, 3)', { - 'animation-duration': '0s, 1s', + 'animation-duration': 'auto, 1s', 'animation-timing-function': 'ease, cubic-bezier(0, -2, 1, 3)', 'animation-delay': '0s, -3s', 'animation-iteration-count': '1, 4', @@ -40,7 +40,7 @@ test_shorthand_value('animation', 'anim paused both reverse, 4 1s -3s cubic-bezi }); test_shorthand_value('animation', '4 1s -3s cubic-bezier(0, -2, 1, 3), anim paused both reverse', { - 'animation-duration': '1s, 0s', + 'animation-duration': '1s, auto', 'animation-timing-function': 'cubic-bezier(0, -2, 1, 3), ease', 'animation-delay': '-3s, 0s', 'animation-iteration-count': '4, 1', diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.tentative.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.tentative.html deleted file mode 100644 index 04d06080e5e..00000000000 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-shorthand.tentative.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html> -<link rel="help" href="https://drafts.csswg.org/css-animations/#propdef-animation"> -<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/css/support/shorthand-testcommon.js"></script> -<script> -// TODO(https://github.com/w3c/csswg-drafts/issues/8054): When support for -// animation-delay-start and -end is added to the animation shorthand, this -// file should just merge with animation-shorthand.html. -test_shorthand_value('animation', 'anim paused both reverse 4 1s -3s cubic-bezier(0, -2, 1, 3)', { - 'animation-duration': '1s', - 'animation-timing-function': 'cubic-bezier(0, -2, 1, 3)', - 'animation-delay-start': '-3s', - 'animation-delay-end': '0s', - 'animation-iteration-count': '4', - 'animation-direction': 'reverse', - 'animation-fill-mode': 'both', - 'animation-play-state': 'paused', - 'animation-name': 'anim', - 'animation-timeline': 'auto', - 'animation-range-start': 'normal', - 'animation-range-end': 'normal', -}); -</script> diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-valid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-valid.html index 4027ee1226e..0c5d5713e3e 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-valid.html +++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-valid.html @@ -16,20 +16,20 @@ // <single-animation-fill-mode> || <single-animation-play-state> || // [ none | <keyframes-name> ] test_valid_value("animation", "1s", ["1s", "1s ease 0s 1 normal none running none"]); -test_valid_value("animation", "cubic-bezier(0, -2, 1, 3)", ["cubic-bezier(0, -2, 1, 3)", "0s cubic-bezier(0, -2, 1, 3) 0s 1 normal none running none"]); +test_valid_value("animation", "cubic-bezier(0, -2, 1, 3)", ["cubic-bezier(0, -2, 1, 3)", "auto cubic-bezier(0, -2, 1, 3) 0s 1 normal none running none"]); test_valid_value("animation", "1s -3s", ["1s -3s", "1s ease -3s 1 normal none running none"]); -test_valid_value("animation", "4", ["4", "0s ease 0s 4 normal none running none"]); -test_valid_value("animation", "reverse", ["reverse", "0s ease 0s 1 reverse none running none"]); -test_valid_value("animation", "both", ["both", "0s ease 0s 1 normal both running none"]); -test_valid_value("animation", "paused", ["paused", "0s ease 0s 1 normal none paused none"]); -test_valid_value("animation", "none", ["0s", "none", "0s ease 0s 1 normal none running none"]); -test_valid_value("animation", "anim", ["anim", "0s ease 0s 1 normal none running anim"]); +test_valid_value("animation", "4", ["4", "auto ease 0s 4 normal none running none"]); +test_valid_value("animation", "reverse", ["reverse", "auto ease 0s 1 reverse none running none"]); +test_valid_value("animation", "both", ["both", "auto ease 0s 1 normal both running none"]); +test_valid_value("animation", "paused", ["paused", "auto ease 0s 1 normal none paused none"]); +test_valid_value("animation", "none", ["auto", "none", "auto ease 0s 1 normal none running none"]); +test_valid_value("animation", "anim", ["anim", "auto ease 0s 1 normal none running anim"]); test_valid_value("animation", "anim paused both reverse 4 1s -3s cubic-bezier(0, -2, 1, 3)", "1s cubic-bezier(0, -2, 1, 3) -3s 4 reverse both paused anim"); test_valid_value("animation", "anim paused both reverse, 4 1s -3s cubic-bezier(0, -2, 1, 3)", - ["reverse both paused anim, 1s cubic-bezier(0, -2, 1, 3) -3s 4", "0s ease 0s 1 reverse both paused anim, 1s cubic-bezier(0, -2, 1, 3) -3s 4 normal none running none"]); + ["reverse both paused anim, 1s cubic-bezier(0, -2, 1, 3) -3s 4", "auto ease 0s 1 reverse both paused anim, 1s cubic-bezier(0, -2, 1, 3) -3s 4 normal none running none"]); // TODO: Add test with a single negative time. // TODO: Add test with a single timing-function keyword. diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/order-of-images.htm b/tests/wpt/web-platform-tests/css/css-backgrounds/order-of-images.htm index 3ae03636d19..9f165fb9b5a 100644 --- a/tests/wpt/web-platform-tests/css/css-backgrounds/order-of-images.htm +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/order-of-images.htm @@ -1,9 +1,10 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> - <title>CSS Test: Order of images</title> + <title>CSS Backgrounds Test: Order of multiple overlapping background images</title> <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> <link rel="help" href="http://www.w3.org/TR/css3-background/#the-background-image" /> + <link rel="match" href="reference/order-of-images-ref.html" /> <meta name="assert" content="Background images are listed in order, with the first image being rendered on top of all the other images, and so on." /> <style type="text/css"> div @@ -20,4 +21,4 @@ <p>Test passes if a blue box overlaps an orange box, which overlaps a black box.</p> <div></div> </body> -</html>
\ No newline at end of file +</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/reference/order-of-images-ref.html b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/order-of-images-ref.html new file mode 100644 index 00000000000..a704cd4f93b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/order-of-images-ref.html @@ -0,0 +1,49 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + + <style> + div + { + height: 100px; + position: relative; + width: 100px; + } + + div#outer-black + { + background-color: black; + left: 90px; + top: 90px; + } + + div#middle-orange + { + background-color: orange; + bottom: 30px; + right: 30px; + } + + div#inner-blue + { + background-color: blue; + bottom: 30px; + right: 30px; + } + </style> + + <p>Test passes if a blue box overlaps an orange box, which overlaps a black box. + + <div id="outer-black"> + + <div id="middle-orange"> + + <div id="inner-blue"></div> + + </div> + + </div> diff --git a/tests/wpt/web-platform-tests/css/css-break/abspos-in-opacity-002.html b/tests/wpt/web-platform-tests/css/css-break/abspos-in-opacity-002.html new file mode 100644 index 00000000000..e6d61eacd1a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/abspos-in-opacity-002.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1371426"> +<link rel="match" href="../reference/ref-filled-greenish-100px-square.html"> +<p>Test passes if there is a filled green-ish square and <strong>no red</strong>.</p> +<div style="columns:5; column-fill:auto; gap:0; width:100px; height:100px; background:green;"> + <div style="position:relative; opacity:0.1;"> + <div style="position:absolute; width:100%;"> + <div style="height:500px; background:red;"></div> + </div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-break/abspos-in-opacity-003.html b/tests/wpt/web-platform-tests/css/css-break/abspos-in-opacity-003.html new file mode 100644 index 00000000000..13a1b31add5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/abspos-in-opacity-003.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1371426"> +<link rel="match" href="../reference/ref-filled-greenish-100px-square.html"> +<p>Test passes if there is a filled green-ish square and <strong>no red</strong>.</p> +<div style="columns:5; column-fill:auto; gap:0; width:100px; height:100px; background:green;"> + <div style="height:300px;"></div> + <div style="position:relative; opacity:0.1;"> + <div style="position:absolute; top:-300px; width:100%;"> + <div style="height:500px; background:red;"></div> + </div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-break/block-max-height-004-ref.html b/tests/wpt/web-platform-tests/css/css-break/block-max-height-004-ref.html new file mode 100644 index 00000000000..74a2ed73c17 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/block-max-height-004-ref.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html> + <title>CSS Reference: max-height block fragmentation</title> + <link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com"> + <link rel="author" title="Mozilla" href="https://www.mozilla.org/"> + <style> + .multicol { + height: 30px; + width: 100px; + column-width: 30px; + column-fill: auto; + border: 2px solid orange; + } + .block { + display: block; + background: teal; + border: 5px solid black; + border-top-width: 0; + height: 40px; + } + .child { + display: block; + width: 50%; + height: 80px; + } + img.child { background: salmon; } + div.child { background: purple; } + </style> + + <div class="multicol"> + <main class="block"> + <img src="" class="child"><div class="child"></div> + </main> + </div> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-break/block-max-height-004.html b/tests/wpt/web-platform-tests/css/css-break/block-max-height-004.html new file mode 100644 index 00000000000..4ceb23a80bf --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/block-max-height-004.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html> + <title>CSS Test: max-height block fragmentation</title> + <link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com"> + <link rel="author" title="Mozilla" href="https://www.mozilla.org/"> + <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id="> + <link rel="help" href="https://drafts.csswg.org/css-break"> + <link rel="match" href="block-max-height-004-ref.html"> + + <style> + .multicol { + height: 30px; + width: 100px; + column-width: 30px; + column-fill: auto; + border: 2px solid orange; + } + .block { + display: block; + background: teal; + border: 5px solid black; + border-top-width: 0; + max-height: 40px; + } + .child { + display: block; + width: 50%; + height: 80px; + } + img.child { background: salmon; } + div.child { background: purple; } + </style> + + <div class="multicol"> + <main class="block"> + <img src="" class="child"><div class="child"></div> + </main> + </div> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-break/clipping-001.html b/tests/wpt/web-platform-tests/css/css-break/clipping-001.html new file mode 100644 index 00000000000..da15ec7a2e3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/clipping-001.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1442211"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="columns:2; gap:0; column-fill:auto; width:100px; height:100px; background:red;"> + <div style="height:25px; background:green;"></div> + <div style="position:relative; overflow:clip; height:150px;"> + <div> + <div style="position:absolute; top:-25px; width:100%;"> + <div style="height:25px; background:red;"></div> + <div style="height:150px; background:green;"></div> + <div style="height:25px; background:red;"></div> + </div> + </div> + </div> + <div style="height:25px; background:green;"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-break/clipping-002.html b/tests/wpt/web-platform-tests/css/css-break/clipping-002.html new file mode 100644 index 00000000000..e1f2c4e1c6b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/clipping-002.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1442211"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="columns:4; gap:0; column-fill:auto; width:100px; height:100px; background:red;"> + <div style="height:25px; background:green;"></div> + <div style="position:relative; overflow:clip; height:350px;"> + <div> + <div style="position:absolute; top:-25px; width:100%;"> + <div style="height:25px; background:red;"></div> + <div style="height:350px; background:green;"></div> + <div style="height:25px; background:red;"></div> + </div> + </div> + </div> + <div style="height:25px; background:green;"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-break/transform-012.html b/tests/wpt/web-platform-tests/css/css-break/transform-012.html new file mode 100644 index 00000000000..4156aff6298 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/transform-012.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/css-break-3/#transforms"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1371426"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="display:flow-root; width:100px; height:100px; background:red;"> + <div style="columns:3; margin-top:100px; margin-left:-50px; column-fill:auto; gap:0; width:150px; height:100px;"> + <div style="transform:rotate(180deg); transform-origin:bottom center; height:77px;"> + <div style="position:absolute; top:100px; width:100%; height:200px; background:green;"></div> + </div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-break/transform-013.html b/tests/wpt/web-platform-tests/css/css-break/transform-013.html new file mode 100644 index 00000000000..31cce10b52f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/transform-013.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/css-break-3/#transforms"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1371426"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="display:flow-root; width:100px; height:100px; background:red;"> + <div style="columns:3; margin-top:100px; column-fill:auto; gap:0; width:150px; height:100px;"> + <div style="transform:rotate(180deg); transform-origin:bottom left; height:120px;"> + <div style="position:absolute; top:100px; width:100%;"> + <!-- The containing block (the transformed element) takes up 20px in the + second column. To compensate for the 180 degree rotation with a + transform origin at the bottom, move the green rectangle by the + double. --> + <div style="position:relative; top:40px; height:100px; background:green;"></div> + <!-- The containing block doesn't exist in third column, meaning that the + block-size of the non-existing fragment is 0. --> + <div style="height:100px; background:green;"></div> + </div> + </div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-break/transform-014.html b/tests/wpt/web-platform-tests/css/css-break/transform-014.html new file mode 100644 index 00000000000..16fc15d760d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/transform-014.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/css-break-3/#transforms"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1371426"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="display:flow-root; writing-mode:vertical-rl; width:100px; height:100px; background:red;"> + <div style="columns:3; column-fill:auto; gap:0; inline-size:150px; block-size:100px; margin-block-start:100px; margin-inline-start:-50px;"> + <div style="transform:rotate(180deg); transform-origin:middle left; block-size:77px;"> + <div style="position:absolute; inset-block-start:100px; inline-size:100%; block-size:200px; background:green;"></div> + </div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-break/transform-015.html b/tests/wpt/web-platform-tests/css/css-break/transform-015.html new file mode 100644 index 00000000000..676c291b6ef --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/transform-015.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1371426"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="columns:5; column-fill:auto; gap:0; width:100px; height:100px; background:red;"> + <div style="transform:scale(10); transform-origin:top left;"> + <div style="position:absolute;"> + <div style="width:2px; height:10px; background:green;"></div> + <div style="height:90px;"></div> + <div style="width:2px; height:10px; background:green;"></div> + <div style="height:90px;"></div> + <div style="width:2px; height:10px; background:green;"></div> + <div style="height:90px;"></div> + <div style="width:2px; height:10px; background:green;"></div> + <div style="height:90px;"></div> + <div style="width:2px; height:10px; background:green;"></div> + </div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-break/transform-016.html b/tests/wpt/web-platform-tests/css/css-break/transform-016.html new file mode 100644 index 00000000000..5a10d860c3f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/transform-016.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html class="reftest-wait"> + <link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> + <link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1371426"> + <link rel="match" href="../reference/ref-filled-green-100px-square.xht"> + <p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + <div id="container" style="columns:2; gap:0; column-fill:auto; width:101px; height:100px; background:red;"> + <div style="transform:rotate(180deg); height:100px; background:green;"> + <div style="position:absolute; width:100%; transform:translateY(-100px); top:100px; height:100px; background:green;"></div> + </div> + </div> + <script> + requestAnimationFrame(()=> { + requestAnimationFrame(()=> { + container.style.width = "100px"; + document.documentElement.classList.remove("reftest-wait"); + }); + }); + </script> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-break/transform-017.html b/tests/wpt/web-platform-tests/css/css-break/transform-017.html new file mode 100644 index 00000000000..b01e3ccee76 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/transform-017.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1442211"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="columns:1; gap:0; column-fill:auto; width:100px; height:100px; background:red;"> + <div style="height:50px;"></div> + <div style="transform:scaleY(2); transform-origin:bottom; width:100px; height:50px;"> + <div style="position:absolute; top:150px;"> + <div style="position:absolute; top:-150px; width:100px; height:50px; background:green;"></div> + </div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-break/transform-018.html b/tests/wpt/web-platform-tests/css/css-break/transform-018.html new file mode 100644 index 00000000000..dc9a791e6a8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/transform-018.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1442211"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="display:flow-root; position:relative; width:100px; height:100px; background:red;"> + <div style="position:absolute; width:25%; height:40px; background:green;"></div> + <div style="position:absolute; right:0; top:0; width:25%; height:30px; background:green;"></div> + <div style="position:absolute; right:0; bottom:0; width:25%; height:30px; background:green;"></div> + <div style="margin-top:50px; columns:4; gap:0; column-fill:auto; height:50px;"> + <div style="height:20px;"></div> + <div style="transform:scaleY(2); transform-origin:bottom; height:150px;"> + <div> + <div style="position:absolute; width:100%; height:100%; background:green;"></div> + </div> + </div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-break/transform-019.html b/tests/wpt/web-platform-tests/css/css-break/transform-019.html new file mode 100644 index 00000000000..758ff713ba2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/transform-019.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1442211"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="columns:2; gap:0; column-fill:auto; width:100px; height:100px; background:red;"> + <div style="height:50px;"> + <div style="height:150px; background:green;"></div> + </div> + <div style="transform:scaleY(2); transform-origin:bottom; width:50px; height:100px;"> + <div> + <div style="position:absolute; top:100px; width:50px; height:25px; background:green;"></div> + </div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-break/transform-020.html b/tests/wpt/web-platform-tests/css/css-break/transform-020.html new file mode 100644 index 00000000000..e15df5f7342 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/transform-020.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1442211"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="display:flow-root; position:relative; width:100px; height:100px; background:red;"> + <div style="position:absolute; width:25%; height:50px; background:green;"></div> + <div style="position:absolute; right:0; width:25%; height:50px; background:green;"></div> + <div style="columns:4; margin-top:50px; gap:0; column-fill:auto; width:100px; height:50px;"> + <div style="position:relative; height:50px; background:green;"> + <div style="position:absolute; transform:scaleY(2); transform-origin:bottom; top:50px; width:100%; height:100px;"> + <div> + <div style="position:absolute; top:50px; width:100%; height:75px; background:green;"></div> + </div> + <div style="height:50px; background:green;"></div> + </div> + </div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-break/transform-021.html b/tests/wpt/web-platform-tests/css/css-break/transform-021.html new file mode 100644 index 00000000000..c97ef30b7f5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/transform-021.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1442211"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="display:flow-root; position:relative; width:100px; height:100px; background:red;"> + <div style="position:absolute; width:25%; height:50px; background:green;"></div> + <div style="position:absolute; right:0; width:25%; height:50px; background:green;"></div> + <div style="columns:4; margin-top:50px; gap:0; column-fill:auto; width:100px; height:50px;"> + <div style="position:relative; height:50px; background:green;"> + <div style="position:absolute; transform:scaleY(2); transform-origin:bottom; top:50px; width:100%; height:100px;"> + <div style="position:absolute; top:50px; width:100%; height:75px; background:green;"></div> + <div style="height:50px; background:green;"></div> + </div> + </div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-color/animation/color-interpolation.html b/tests/wpt/web-platform-tests/css/css-color/animation/color-interpolation.html index 7bda888a0b4..d22f53409c9 100644 --- a/tests/wpt/web-platform-tests/css/css-color/animation/color-interpolation.html +++ b/tests/wpt/web-platform-tests/css/css-color/animation/color-interpolation.html @@ -102,7 +102,7 @@ test_interpolation({ {at: 0.3, expect: 'oklab(0.3 0 0)'}, {at: 0.6, expect: 'oklab(0.6 0 0)'}, {at: 1, expect: 'oklab(1 0 0)'}, - {at: 1.5, expect: 'oklab(1.5 0 0)'}, + {at: 1.5, expect: 'oklab(1 0 0)'}, ]); test_interpolation({ @@ -115,7 +115,7 @@ test_interpolation({ {at: 0.3, expect: 'oklab(0.3 0 0)'}, {at: 0.6, expect: 'oklab(0.6 0 0)'}, {at: 1, expect: 'oklab(1 0 0)'}, - {at: 1.5, expect: 'oklab(1.5 0 0)'}, + {at: 1.5, expect: 'oklab(1 0 0)'}, ]); test_interpolation({ @@ -128,6 +128,6 @@ test_interpolation({ {at: 0.3, expect: 'oklab(0.3 0 0)'}, {at: 0.6, expect: 'oklab(0.6 0 0)'}, {at: 1, expect: 'oklab(1 0 0)'}, - {at: 1.5, expect: 'oklab(1.5 0 0)'}, + {at: 1.5, expect: 'oklab(1 0 0)'}, ]); </script> diff --git a/tests/wpt/web-platform-tests/css/css-color/lab-l-over-100-1.html b/tests/wpt/web-platform-tests/css/css-color/lab-l-over-100-1.html new file mode 100644 index 00000000000..fdb3955e96e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-color/lab-l-over-100-1.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Color 4: Verify lightness in Lab is always clamped to a value between 0 to 100</title> +<link rel="help" href="https://w3c.github.io/csswg-drafts/css-color/#ok-lab"> +<link rel="match" href="lab-l-over-100-ref.html"> +<meta name="assert" content="lab() with lightness greater than 100"> +<style> + .ref { background-color: lab(100 150 20); width: 100px; height: 100px} + /* l = 150 should clamp back to 100 */ + .test { background-color: lab(150 150 20); width: 100px; height: 100px} +</style> + +<body> + <p>Test passes if you see a single color.</p> + <div class="ref"></div> + <div class="test"></div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-color/lab-l-over-100-2.html b/tests/wpt/web-platform-tests/css/css-color/lab-l-over-100-2.html new file mode 100644 index 00000000000..f62f9e0559b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-color/lab-l-over-100-2.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Color 4: Verify lightness in Lab is always clamped to a value between 0% to 100%</title> +<link rel="help" href="https://w3c.github.io/csswg-drafts/css-color/#ok-lab"> +<link rel="match" href="lab-l-over-100-ref.html"> +<meta name="assert" content="lab() with lightness greater than 100%"> +<style> + .ref { background-color: lab(100% 150 20); width: 100px; height: 100px} + /* l = 150 should clamp back to 100 */ + .test { background-color: lab(150% 150 20); width: 100px; height: 100px} +</style> + +<body> + <p>Test passes if you see a single color.</p> + <div class="ref"></div> + <div class="test"></div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-color/lab-l-over-100-ref.html b/tests/wpt/web-platform-tests/css/css-color/lab-l-over-100-ref.html new file mode 100644 index 00000000000..57328cfa7c5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-color/lab-l-over-100-ref.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Color 4: Verify lightness in Lab is always clamped to a value between 0 to 100</title> +<style> + .ref { background-color: lab(100 150 20); width: 100px; height: 200px} +</style> + +<body> + <p>Test passes if you see a single color.</p> + <div class="ref"></div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-color/lch-l-over-100-1.html b/tests/wpt/web-platform-tests/css/css-color/lch-l-over-100-1.html new file mode 100644 index 00000000000..9711956242d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-color/lch-l-over-100-1.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Color 4: Verify lightness in LCH is always clamped to a value between 0 to 100</title> +<link rel="help" href="https://w3c.github.io/csswg-drafts/css-color/#cie-lab"> +<link rel="match" href="lch-l-over-100-ref.html"> +<meta name="assert" content="lch() with lightness greater than 100"> +<style> + .ref { background-color: lch(100 150 20); width: 100px; height: 100px} + /* l = 150 should clamp back to 100 */ + .test { background-color: lch(150 150 20); width: 100px; height: 100px} +</style> + +<body> + <p>Test passes if you see a single color.</p> + <div class="ref"></div> + <div class="test"></div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-color/lch-l-over-100-2.html b/tests/wpt/web-platform-tests/css/css-color/lch-l-over-100-2.html new file mode 100644 index 00000000000..a909a49f0c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-color/lch-l-over-100-2.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Color 4: Verify lightness in LCH is always clamped to a value between 0% to 100%</title> +<link rel="help" href="https://w3c.github.io/csswg-drafts/css-color/#cie-lab"> +<link rel="match" href="lch-l-over-100-ref.html"> +<meta name="assert" content="lch() with lightness graeter than 100%"> +<style> + .ref { background-color: lch(100% 150 20); width: 100px; height: 100px} + /* l = 150% should clamp back to 100% */ + .test { background-color: lch(150% 150 20); width: 100px; height: 100px} +</style> + +<body> + <p>Test passes if you see a single color.</p> + <div class="ref"></div> + <div class="test"></div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-color/lch-l-over-100-ref.html b/tests/wpt/web-platform-tests/css/css-color/lch-l-over-100-ref.html new file mode 100644 index 00000000000..67766274e59 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-color/lch-l-over-100-ref.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Color 4: Specifying LCH with lightness over 100</title> +<style> + .ref { background-color: lch(100 150 20); width: 100px; height: 200px} +</style> + +<body> + <p>Test passes if you see a single color.</p> + <div class="ref"></div> + <div class="test"></div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-color-mix-function.html b/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-color-mix-function.html index 6e5a129fa0a..659117a23b0 100644 --- a/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-color-mix-function.html +++ b/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-color-mix-function.html @@ -79,6 +79,14 @@ test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color-mix(in hsl decreasing hue, rgb(191, 106, 64), rgb(191, 64, 149))`); test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color-mix(in hsl decreasing hue, rgb(191, 64, 149), rgb(191, 106, 64))`); + + test_valid_value(`color`, `color-mix(in hsl specified hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color-mix(in hsl specified hue, rgb(191, 149, 64), rgb(191, 191, 64))`); + test_valid_value(`color`, `color-mix(in hsl specified hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color-mix(in hsl specified hue, rgb(191, 191, 64), rgb(191, 149, 64))`); + test_valid_value(`color`, `color-mix(in hsl specified hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color-mix(in hsl specified hue, rgb(191, 170, 64), rgb(191, 64, 128))`); + test_valid_value(`color`, `color-mix(in hsl specified hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color-mix(in hsl specified hue, rgb(191, 64, 128), rgb(191, 170, 64))`); + test_valid_value(`color`, `color-mix(in hsl specified hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color-mix(in hsl specified hue, rgb(191, 106, 64), rgb(191, 64, 149))`); + test_valid_value(`color`, `color-mix(in hsl specified hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color-mix(in hsl specified hue, rgb(191, 64, 149), rgb(191, 106, 64))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(none none none), hsl(none none none))`, `color-mix(in hsl, rgb(0, 0, 0), rgb(0, 0, 0))`); test_valid_value(`color`, `color-mix(in hsl, hsl(none none none), hsl(30deg 40% 80%))`, `color-mix(in hsl, rgb(0, 0, 0), rgb(224, 204, 184))`); test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 20% 40%), hsl(none none none))`, `color-mix(in hsl, rgb(82, 122, 82), rgb(0, 0, 0))`); @@ -95,6 +103,9 @@ test_valid_value(`color`, `color-mix(in hsl, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`); test_valid_value(`color`, `color-mix(in hsl, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`); test_valid_value(`color`, `color-mix(in hsl, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`); + test_valid_value(`color`, `color-mix(in hsl, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`); + test_valid_value(`color`, `color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`); + test_valid_value(`color`, `color-mix(in hsl, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`); test_valid_value(`color`, `color-mix(in hsl, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`); test_valid_value(`color`, `color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`); test_valid_value(`color`, `color-mix(in hsl, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`); @@ -155,6 +166,13 @@ test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color-mix(in hwb decreasing hue, rgb(153, 102, 77), rgb(153, 77, 128))`); test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color-mix(in hwb decreasing hue, rgb(153, 77, 128), rgb(153, 102, 77))`); + test_valid_value(`color`, `color-mix(in hwb specified hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color-mix(in hwb specified hue, rgb(153, 128, 77), rgb(153, 153, 77))`); + test_valid_value(`color`, `color-mix(in hwb specified hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color-mix(in hwb specified hue, rgb(153, 153, 77), rgb(153, 128, 77))`); + test_valid_value(`color`, `color-mix(in hwb specified hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color-mix(in hwb specified hue, rgb(153, 140, 77), rgb(153, 77, 115))`); + test_valid_value(`color`, `color-mix(in hwb specified hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color-mix(in hwb specified hue, rgb(153, 77, 115), rgb(153, 140, 77))`); + test_valid_value(`color`, `color-mix(in hwb specified hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color-mix(in hwb specified hue, rgb(153, 102, 77), rgb(153, 77, 128))`); + test_valid_value(`color`, `color-mix(in hwb specified hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color-mix(in hwb specified hue, rgb(153, 77, 128), rgb(153, 102, 77))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(none none none), hwb(none none none))`, `color-mix(in hwb, rgb(255, 0, 0), rgb(255, 0, 0))`); test_valid_value(`color`, `color-mix(in hwb, hwb(none none none), hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(255, 0, 0), rgb(153, 115, 77))`); test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(none none none))`, `color-mix(in hwb, rgb(26, 204, 26), rgb(255, 0, 0))`); @@ -170,6 +188,11 @@ test_valid_value(`color`, `color-mix(in hwb, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`); test_valid_value(`color`, `color-mix(in hwb, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`); test_valid_value(`color`, `color-mix(in hwb, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`); + test_valid_value(`color`, `color-mix(in hwb, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`); + test_valid_value(`color`, `color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`); + test_valid_value(`color`, `color-mix(in hwb, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`); + test_valid_value(`color`, `color-mix(in hwb, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`); + test_valid_value(`color`, `color-mix(in hwb, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`); test_valid_value(`color`, `color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`); test_valid_value(`color`, `color-mix(in hwb, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`); diff --git a/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-hwb.html b/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-hwb.html index 07367ac450b..dc2cec5276e 100644 --- a/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-hwb.html +++ b/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-hwb.html @@ -28,6 +28,11 @@ test_valid_value("color", "hwb(120 30% 50% / none)", "rgba(77, 128, 77, 0)"); test_valid_value("color", "hwb(120 30% 50% / 0)", "rgba(77, 128, 77, 0)"); test_valid_value("color", "hwb(none 100% 50% / none)", "rgba(170, 170, 170, 0)"); test_valid_value("color", "hwb(0 100% 50% / 0)", "rgba(170, 170, 170, 0)"); + +// Test that rounding happens properly. hwb(320deg 30% 40%) in sRGB has a blue +// channel of exactly one-half. +// 0.5 * 255 = 127.5. This value should be rounded UP to 128, not down to 127. +test_valid_value("color", "hwb(320deg 30% 40%)", "rgb(153, 77, 128)"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-rgb.html b/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-rgb.html index 14bcce854fe..eb50db02cb2 100644 --- a/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-rgb.html +++ b/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-rgb.html @@ -28,6 +28,18 @@ test_valid_value("color", "rgba(none none none / .5)", "rgba(0, 0, 0, 0.5)"); test_valid_value("color", "rgba(20% none none)", "rgb(51, 0, 0)"); test_valid_value("color", "rgba(20% none none / none)", "rgba(51, 0, 0, 0)"); test_valid_value("color", "rgba(none none none / 50%)", "rgba(0, 0, 0, 0.5)"); +test_valid_value("color", "rgb(-2 3 4)", "rgb(0, 3, 4)"); +test_valid_value("color", "rgb(-20% 20% 40%)", "rgb(0, 51, 102)"); +test_valid_value("color", "rgb(257 30 40)", "rgb(255, 30, 40)"); +test_valid_value("color", "rgb(250% 20% 40%)", "rgb(255, 51, 102)"); +test_valid_value("color", "rgba(-2 3 4)", "rgb(0, 3, 4)"); +test_valid_value("color", "rgba(-20% 20% 40%)", "rgb(0, 51, 102)"); +test_valid_value("color", "rgba(257 30 40)", "rgb(255, 30, 40)"); +test_valid_value("color", "rgba(250% 20% 40%)", "rgb(255, 51, 102)"); +test_valid_value("color", "rgba(-2 3 4 / .5)", "rgba(0, 3, 4, 0.5)"); +test_valid_value("color", "rgba(-20% 20% 40% / 50%)", "rgba(0, 51, 102, 0.5)"); +test_valid_value("color", "rgba(257 30 40 / 50%)", "rgba(255, 30, 40, 0.5)"); +test_valid_value("color", "rgba(250% 20% 40% / .5)", "rgba(255, 51, 102, 0.5)"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-contain/container-queries/at-container-style-parsing.html b/tests/wpt/web-platform-tests/css/css-contain/container-queries/at-container-style-parsing.html index b49205824b5..36fda2e3663 100644 --- a/tests/wpt/web-platform-tests/css/css-contain/container-queries/at-container-style-parsing.html +++ b/tests/wpt/web-platform-tests/css/css-contain/container-queries/at-container-style-parsing.html @@ -4,8 +4,8 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="support/cq-testcommon.js"></script> -<div style="container-name:name;container-type:size; width:100px; height:100px"> - <main id=main></main> +<div style="container-name:name"> + <main id="main"></main> </div> <script> setup(() => assert_implements_container_queries()); diff --git a/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-rule-cache-ref.html b/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-rule-cache-ref.html new file mode 100644 index 00000000000..6c8261959f6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-rule-cache-ref.html @@ -0,0 +1,18 @@ +<!doctype html> +<meta charset="utf-8"> +<style> + .container { + width: 100px; + } + + .half { + height: 50%; + background-color: green; + } +</style> +<div class="container" style="height: 100px"> + <div class="half"></div> +</div> +<div class="container" style="height: 200px"> + <div class="half"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-rule-cache.html b/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-rule-cache.html new file mode 100644 index 00000000000..cc93f7793ae --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/container-queries/container-units-rule-cache.html @@ -0,0 +1,24 @@ +<!doctype html> +<meta charset="utf-8"> +<link rel="help" href="https://drafts.csswg.org/css-contain-3/#container-lengths"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1832481"> +<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> +<link rel="author" href="https://mozilla.org" title="Mozilla"> +<link rel="match" href="container-units-rule-cache-ref.html"> +<style> + .container { + width: 100px; + container-type: size; + } + + .half { + height: 50cqh; + background-color: green; + } +</style> +<div class="container" style="height: 100px"> + <div class="half"></div> +</div> +<div class="container" style="height: 200px"> + <div class="half"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-contain/container-queries/style-container-for-shadow-dom.html b/tests/wpt/web-platform-tests/css/css-contain/container-queries/style-container-for-shadow-dom.html index c3ac961de2d..b8bea097504 100644 --- a/tests/wpt/web-platform-tests/css/css-contain/container-queries/style-container-for-shadow-dom.html +++ b/tests/wpt/web-platform-tests/css/css-contain/container-queries/style-container-for-shadow-dom.html @@ -137,12 +137,6 @@ <template shadowrootmode="open"> <div exportparts="inner-part" style="-foo: baz"> <template shadowrootmode="open"> - <style> - div { - width: 200px; - container-type: inline-size; - } - </style> <div style="--foo: baz"> <span id="t9" part="inner-part"></span> </div> diff --git a/tests/wpt/web-platform-tests/css/css-counter-styles/counter-style-at-rule/fallback-cycle-ref.html b/tests/wpt/web-platform-tests/css/css-counter-styles/counter-style-at-rule/fallback-cycle-ref.html deleted file mode 100644 index 22bcf8d9b4e..00000000000 --- a/tests/wpt/web-platform-tests/css/css-counter-styles/counter-style-at-rule/fallback-cycle-ref.html +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE html> -<meta charset=utf-8> -<title>CSS Reference: fallback cycle</title> -<style> -.decimal { - list-style-type: decimal; -} -.paren::marker { - content: "(" counter(list-item) ")\A0"; -} -.bracket::marker { - content: "[" counter(list-item, lower-roman) "]\A0"; -} -.brace::marker { - content: "{" counter(list-item, lower-alpha) "}\A0"; -} -</style> - -<ol> - <li class=decimal>paren > bracket > brace > decimal - <li class=paren>paren - <li class=paren>paren - <li class=paren>paren - <li class=bracket>paren > bracket - <li class=bracket>paren > bracket - <li class=bracket>paren > bracket - <li class=brace>paren > bracket > brace - <li class=brace>paren > bracket > brace - <li class=decimal>paren > bracket > brace > decimal -</ol> - -<ol> - <li class=decimal>bracket > brace > paren > decimal - <li class=paren>bracket > brace > paren - <li class=paren>bracket > brace > paren - <li class=bracket>bracket - <li class=bracket>bracket - <li class=bracket>bracket - <li class=bracket>bracket - <li class=brace>bracket > brace - <li class=brace>bracket > brace - <li class=decimal>bracket > brace > paren > decimal -</ol> - -<ol> - <li class=decimal>brace > paren > bracket > decimal - <li class=paren>brace > paren - <li class=paren>brace > paren - <li class=paren>brace > paren - <li class=bracket>brace > paren > bracket - <li class=bracket>brace > paren > bracket - <li class=brace>brace - <li class=brace>brace - <li class=brace>brace - <li class=decimal>brace > paren > bracket > decimal -</ol> diff --git a/tests/wpt/web-platform-tests/css/css-counter-styles/counter-style-at-rule/fallback-cycle.html b/tests/wpt/web-platform-tests/css/css-counter-styles/counter-style-at-rule/fallback-cycle.html deleted file mode 100644 index 2e63a3f4d44..00000000000 --- a/tests/wpt/web-platform-tests/css/css-counter-styles/counter-style-at-rule/fallback-cycle.html +++ /dev/null @@ -1,85 +0,0 @@ -<!DOCTYPE html> -<meta charset=utf-8> -<title>CSS Test: fallback cycle</title> -<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com"> -<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-range"> -<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-fallback"> -<meta name="assert" content="While following fallbacks to find a counter style that can render the given counter value, - if a loop in the specified fallbacks is detected, the decimal style must be used instead"> -<link rel="match" href="fallback-cycle-ref.html"> -<style> -/* - Three styles with different but overlapping ranges, - with fallback to each other in a cycle. - - Depending where in the cycle we start, we expect different results - for the overlapping ranges; in all cases we fall back to the default - (decimal) style when fallback would loop around. -*/ -@counter-style paren { - system: extends decimal; - prefix: "("; - suffix: ")\A0"; - range: 2 4; - fallback: bracket; -} - -@counter-style bracket { - system: extends lower-roman; - prefix: "["; - suffix: "]\A0"; - range: 4 7; - fallback: brace; -} - -@counter-style brace { - system: extends lower-alpha; - prefix: "{"; - suffix: "}\A0"; - range: 7 9; - fallback: paren; -} - -ol { - list-style-type: disc; /* overridden by the counter-style rules */ -} -</style> - -<ol style="list-style: paren"> - <li>paren > bracket > brace > decimal - <li>paren - <li>paren - <li>paren - <li>paren > bracket - <li>paren > bracket - <li>paren > bracket - <li>paren > bracket > brace - <li>paren > bracket > brace - <li>paren > bracket > brace > decimal -</ol> - -<ol style="list-style: bracket"> - <li>bracket > brace > paren > decimal - <li>bracket > brace > paren - <li>bracket > brace > paren - <li>bracket - <li>bracket - <li>bracket - <li>bracket - <li>bracket > brace - <li>bracket > brace - <li>bracket > brace > paren > decimal -</ol> - -<ol style="list-style: brace"> - <li>brace > paren > bracket > decimal - <li>brace > paren - <li>brace > paren - <li>brace > paren - <li>brace > paren > bracket - <li>brace > paren > bracket - <li>brace - <li>brace - <li>brace - <li>brace > paren > bracket > decimal -</ol> diff --git a/tests/wpt/web-platform-tests/css/css-counter-styles/counter-style-at-rule/suffix-fallback-ref.html b/tests/wpt/web-platform-tests/css/css-counter-styles/counter-style-at-rule/suffix-fallback-ref.html deleted file mode 100644 index 15cd54cb24f..00000000000 --- a/tests/wpt/web-platform-tests/css/css-counter-styles/counter-style-at-rule/suffix-fallback-ref.html +++ /dev/null @@ -1,47 +0,0 @@ -<!DOCTYPE html> -<meta charset=utf-8> -<title>CSS Reference: suffix fallback</title> -<style> -div div { - width: 4em; - text-align: right; -} -</style> - -<div> - <div>1st</div> - <div>2nd</div> - <div>3rd</div> - <div>4th</div> - <div>5th</div> - <div>6th</div> - <div>7th</div> - <div>8th</div> - <div>9th</div> - <div>10th</div> - <div>11th</div> - <div>12th</div> - <div>13th</div> - <div>14th</div> - <div>15th</div> - <div>16th</div> - <div>17th</div> - <div>18th</div> - <div>19th</div> - <div>20th</div> - <div>21st</div> - <div>22nd</div> - <div>23rd</div> - <div>24th</div> - <div>25th</div> - <div>26th</div> - <div>27th</div> - <div>28th</div> - <div>29th</div> - <div>30th</div> - <div>31st</div> - <div>32nd</div> - <div>33rd</div> - <div>34th</div> - <div>35th</div> -</div> diff --git a/tests/wpt/web-platform-tests/css/css-counter-styles/counter-style-at-rule/suffix-fallback.html b/tests/wpt/web-platform-tests/css/css-counter-styles/counter-style-at-rule/suffix-fallback.html deleted file mode 100644 index 7684c9a10a9..00000000000 --- a/tests/wpt/web-platform-tests/css/css-counter-styles/counter-style-at-rule/suffix-fallback.html +++ /dev/null @@ -1,84 +0,0 @@ -<!DOCTYPE html> -<meta charset=utf-8> -<title>CSS Test: suffix fallback</title> -<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com"> -<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-range"> -<link rel="help" href="https://drafts.csswg.org/css-counter-styles-3/#counter-style-fallback"> -<link rel="match" href="suffix-fallback-ref.html"> -<style> -/* A set of rules that rely on range limits and fallback to vary the suffix. */ -@counter-style ordinal-default { - system: numeric; - symbols: "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"; - suffix: "th"; - range: 1 infinite; -} - -@counter-style ordinal { - system: extends ordinal-default; - suffix: "st"; - fallback: ordinal-twos; - range: 1 1, 21 21, 31 31, 41 41, 51 51, 61 61, 71 71, 81 81, 91 91; -} - -@counter-style ordinal-twos { - system: extends ordinal-default; - suffix: "nd"; - fallback: ordinal-threes; - range: 2 2, 22 22, 32 32, 42 42, 52 52, 62 62, 72 72, 82 82, 92 92; -} - -@counter-style ordinal-threes { - system: extends ordinal-default; - suffix: "rd"; - fallback: ordinal-default; - range: 3 3, 23 23, 33 33, 43 43, 53 53, 63 63, 73 73, 83 83, 93 93; -} - -ol.ordinal { - margin: 0; - padding: 0; - list-style: ordinal; -} -li { - margin-left: 4em; -} -</style> - -<ol class="ordinal"> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> - <li></li> -</ol> diff --git a/tests/wpt/web-platform-tests/css/css-display/parsing/display-computed.html b/tests/wpt/web-platform-tests/css/css-display/parsing/display-computed.html index e0d08a00458..b8c7b5e47ea 100644 --- a/tests/wpt/web-platform-tests/css/css-display/parsing/display-computed.html +++ b/tests/wpt/web-platform-tests/css/css-display/parsing/display-computed.html @@ -45,6 +45,97 @@ test_computed_value("display", "inline-flex"); test_computed_value("display", "contents"); +test_computed_value("display", "run-in"); +test_computed_value("display", "flow", "block"); +test_computed_value("display", "flow-root"); +test_computed_value("display", "ruby"); + +test_computed_value("display", "flow list-item", "list-item"); +test_computed_value("display", "list-item flow", "list-item"); +test_computed_value("display", "flow-root list-item", "flow-root list-item"); +test_computed_value("display", "list-item flow-root", "flow-root list-item"); + +test_computed_value("display", "block flow", "block"); +test_computed_value("display", "flow block", "block"); +test_computed_value("display", "flow-root block", "flow-root"); +test_computed_value("display", "block flow-root", "flow-root"); +test_computed_value("display", "flex block", "flex"); +test_computed_value("display", "block flex", "flex"); +test_computed_value("display", "grid block", "grid"); +test_computed_value("display", "block grid", "grid"); +test_computed_value("display", "table block", "table"); +test_computed_value("display", "block table", "table"); +test_computed_value("display", "block ruby", "block ruby"); +test_computed_value("display", "ruby block", "block ruby"); +test_computed_value("display", "block list-item", "list-item"); +test_computed_value("display", "list-item block", "list-item"); +test_computed_value("display", "flow block list-item", "list-item"); +test_computed_value("display", "block flow list-item", "list-item"); +test_computed_value("display", "flow list-item block", "list-item"); +test_computed_value("display", "block list-item flow", "list-item"); +test_computed_value("display", "list-item block flow", "list-item"); +test_computed_value("display", "list-item flow block", "list-item"); +test_computed_value("display", "flow-root block list-item", "flow-root list-item"); +test_computed_value("display", "block flow-root list-item", "flow-root list-item"); +test_computed_value("display", "flow-root list-item block", "flow-root list-item"); +test_computed_value("display", "block list-item flow-root", "flow-root list-item"); +test_computed_value("display", "list-item block flow-root", "flow-root list-item"); +test_computed_value("display", "list-item flow-root block", "flow-root list-item"); + +test_computed_value("display", "inline flow", "inline"); +test_computed_value("display", "flow inline", "inline"); +test_computed_value("display", "flow-root inline", "inline-block"); +test_computed_value("display", "inline flow-root", "inline-block"); +test_computed_value("display", "flex inline", "inline-flex"); +test_computed_value("display", "inline flex", "inline-flex"); +test_computed_value("display", "grid inline", "inline-grid"); +test_computed_value("display", "inline grid", "inline-grid"); +test_computed_value("display", "table inline", "inline-table"); +test_computed_value("display", "inline table", "inline-table"); +test_computed_value("display", "inline ruby", "ruby"); +test_computed_value("display", "ruby inline", "ruby"); +test_computed_value("display", "inline list-item", "inline list-item"); +test_computed_value("display", "list-item inline", "inline list-item"); +test_computed_value("display", "flow inline list-item", "inline list-item"); +test_computed_value("display", "inline flow list-item", "inline list-item"); +test_computed_value("display", "flow list-item inline", "inline list-item"); +test_computed_value("display", "inline list-item flow", "inline list-item"); +test_computed_value("display", "list-item inline flow", "inline list-item"); +test_computed_value("display", "list-item flow inline", "inline list-item"); +test_computed_value("display", "flow-root inline list-item", "inline flow-root list-item"); +test_computed_value("display", "inline flow-root list-item", "inline flow-root list-item"); +test_computed_value("display", "flow-root list-item inline", "inline flow-root list-item"); +test_computed_value("display", "inline list-item flow-root", "inline flow-root list-item"); +test_computed_value("display", "list-item inline flow-root", "inline flow-root list-item"); +test_computed_value("display", "list-item flow-root inline", "inline flow-root list-item"); + +test_computed_value("display", "run-in flow", "run-in"); +test_computed_value("display", "flow run-in", "run-in"); +test_computed_value("display", "flow-root run-in", "run-in flow-root"); +test_computed_value("display", "run-in flow-root", "run-in flow-root"); +test_computed_value("display", "flex run-in", "run-in flex"); +test_computed_value("display", "run-in flex", "run-in flex"); +test_computed_value("display", "grid run-in", "run-in grid"); +test_computed_value("display", "run-in grid", "run-in grid"); +test_computed_value("display", "table run-in", "run-in table"); +test_computed_value("display", "run-in table", "run-in table"); +test_computed_value("display", "run-in ruby", "run-in ruby"); +test_computed_value("display", "ruby run-in", "run-in ruby"); +test_computed_value("display", "run-in list-item", "run-in list-item"); +test_computed_value("display", "list-item run-in", "run-in list-item"); +test_computed_value("display", "flow run-in list-item", "run-in list-item"); +test_computed_value("display", "run-in flow list-item", "run-in list-item"); +test_computed_value("display", "flow list-item run-in", "run-in list-item"); +test_computed_value("display", "run-in list-item flow", "run-in list-item"); +test_computed_value("display", "list-item run-in flow", "run-in list-item"); +test_computed_value("display", "list-item flow run-in", "run-in list-item"); +test_computed_value("display", "flow-root run-in list-item", "run-in flow-root list-item"); +test_computed_value("display", "run-in flow-root list-item", "run-in flow-root list-item"); +test_computed_value("display", "flow-root list-item run-in", "run-in flow-root list-item"); +test_computed_value("display", "run-in list-item flow-root", "run-in flow-root list-item"); +test_computed_value("display", "list-item run-in flow-root", "run-in flow-root list-item"); +test_computed_value("display", "list-item flow-root run-in", "run-in flow-root list-item"); + // https://www.w3.org/TR/CSS2/visuren.html#dis-pos-flo function test_display_affected(property, value) { const target = document.getElementById('target'); diff --git a/tests/wpt/web-platform-tests/css/css-display/parsing/display-valid.html b/tests/wpt/web-platform-tests/css/css-display/parsing/display-valid.html index ecd57511422..9501a6e2ba7 100644 --- a/tests/wpt/web-platform-tests/css/css-display/parsing/display-valid.html +++ b/tests/wpt/web-platform-tests/css/css-display/parsing/display-valid.html @@ -36,9 +36,15 @@ test_valid_value("display", "table-cell"); test_valid_value("display", "table-caption"); test_valid_value("display", "none"); +// https://drafts.csswg.org/css-flexbox-1/#flex-containers +test_valid_value("display", "flex"); +test_valid_value("display", "inline-flex"); + +test_valid_value("display", "contents"); + // https://drafts.csswg.org/css-display/#the-display-properties test_valid_value("display", "run-in"); -test_valid_value("display", "flow", "block"); +test_valid_value("display", "flow"); test_valid_value("display", "flow-root"); test_valid_value("display", "ruby"); @@ -76,14 +82,14 @@ test_valid_value("display", "list-item flow-root block", "flow-root list-item"); test_valid_value("display", "inline flow", "inline"); test_valid_value("display", "flow inline", "inline"); -test_valid_value("display", "flow-root inline", "inline-block"); -test_valid_value("display", "inline flow-root", "inline-block"); -test_valid_value("display", "flex inline", "inline-flex"); -test_valid_value("display", "inline flex", "inline-flex"); -test_valid_value("display", "grid inline", "inline-grid"); -test_valid_value("display", "inline grid", "inline-grid"); -test_valid_value("display", "table inline", "inline-table"); -test_valid_value("display", "inline table", "inline-table"); +test_valid_value("display", "flow-root inline", "inline flow-root"); +test_valid_value("display", "inline flow-root"); +test_valid_value("display", "flex inline", "inline flex"); +test_valid_value("display", "inline flex"); +test_valid_value("display", "grid inline", "inline grid"); +test_valid_value("display", "inline grid"); +test_valid_value("display", "table inline", "inline table"); +test_valid_value("display", "inline table"); test_valid_value("display", "inline ruby", "ruby"); test_valid_value("display", "ruby inline", "ruby"); test_valid_value("display", "inline list-item", "inline list-item"); diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/percentage-padding-003.html b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-padding-003.html new file mode 100644 index 00000000000..ee84f1570ef --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-padding-003.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> +<link rel="help" href="https://crbug.com/1440908"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<meta name="assert" + content="vertical-rl block's auto height should encompass its children, and the percentage padding should resolve based on that." /> + +<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 id="container" style="writing-mode:vertical-rl; width:101px;"> + <div style="display:flex; padding-right:5%;"> + <div style="writing-mode:horizontal-tb; padding-right:10%;"> + <div + style="width:100px; height:100px; background:green; position:relative; left:15px;"> + </div> + </div> + </div> +</div> +<script> + document.body.offsetTop; + container.style.width = "100px"; +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/masonry/tentative/masonry-columns-item-containing-block-is-grid-content-width.html b/tests/wpt/web-platform-tests/css/css-grid/masonry/tentative/masonry-columns-item-containing-block-is-grid-content-width.html new file mode 100644 index 00000000000..e48b6502539 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/masonry/tentative/masonry-columns-item-containing-block-is-grid-content-width.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-3/#containing-block"> +<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> +<meta name="assert" content="Svg should use grid's content logical width for its containing block size and get sized to 100px x 100px"> +<style> +grid { + display: grid; + grid-template-columns:masonry; + grid-template-rows: auto; +} +</style> +</head> +<body> +<p>Test passes if there is a filled green square.</p> +<grid> + <svg width="100" height="100" viewBox="0 0 1 1" style="width: 100%; max-width: 100px; background: green;"></svg> +</grid> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-no-items-on-edges-001.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-no-items-on-edges-001.html new file mode 100644 index 00000000000..e2fe1a366e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-no-items-on-edges-001.html @@ -0,0 +1,47 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Grid Test: Subgrid with no grid items accommodates border and padding</title> +<link rel="author" title="Ethan Jimenez" href="mailto:ethavar@microsoft.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-2"> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<style> +.wrapper { + width: 100px; + height: 100px; + background: red; +} +.grid { + display: inline-grid; + grid: repeat(3, auto) / repeat(5, auto); + background: red; +} +.subgrid { + display: grid; + grid-row: 1 / -1; + grid-column: 1 / -1; + grid-template: subgrid / subgrid; + background: green; + padding: 11px 7px 20px 13px; + border-width: 14px 18px 5px 12px; + border-style: solid; + border-color: green; +} +</style> +</head> +<body> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="wrapper"> + <div class="grid"> + <div class="subgrid"> + <div class="subgrid"></div> + </div> + </div> +</div> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-no-items-on-edges-002.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-no-items-on-edges-002.html new file mode 100644 index 00000000000..a2c73b18843 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-no-items-on-edges-002.html @@ -0,0 +1,53 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Grid Test: Subgrid with no grid items accommodates gutter size and padding</title> +<link rel="author" title="Ethan Jimenez" href="mailto:ethavar@microsoft.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid-2"> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<style> +.wrapper { + width: 100px; + height: 100px; + background: red; +} +.grid { + display: inline-grid; + grid: repeat(2, auto) / repeat(4, auto); + background: red; +} +.subgrid { + display: grid; + grid-template: subgrid / subgrid; + background: green; + padding: 11px 3px 9px 7px; +} +</style> +</head> +<body> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="wrapper"> + <div class="grid"> + <div class="subgrid" style="grid-column: span 4; grid-row: span 2; gap: 20px 10px"> + <div class="subgrid" style="grid-column: span 2; grid-row: span 2"> + <div class="subgrid"></div> + <div class="subgrid"></div> + <div class="subgrid"></div> + <div class="subgrid"></div> + </div> + <div class="subgrid" style="grid-column: span 2; grid-row: span 2"> + <div class="subgrid"></div> + <div class="subgrid"></div> + <div class="subgrid"></div> + <div class="subgrid"></div> + </div> + </div> + </div> +</div> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/writing-directions-001-ref.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/writing-directions-001-ref.html new file mode 100644 index 00000000000..90612516889 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/writing-directions-001-ref.html @@ -0,0 +1,96 @@ +<!DOCTYPE HTML> +<html><head> + <meta charset="utf-8"> + <title>Reference: nested subgrids map margin/border/padding according to writing direction</title> + <link rel="author" title="Kurt Catti-Schmidt" href="mailto:kschmi@microsoft.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <style> +html,body { + font:12px/1 monospace; +} + +.grid { + display: grid; + grid: 0.2em 1.4em / repeat(10, 30px); + border: 1px solid; + padding: 0 0 0 0; +} + +div > div { + display: grid; + grid-column: 2 / span 3; + grid: auto / subgrid; + border: 1px solid; + background: grey; +} + +n { + grid-row: 1; + counter-increment: n; +} +n::before { content: counter(n, decimal); } + +x { + background: silver; +} + + </style> +</head> +<body> + +<div class="grid"> + <n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid; padding: 0 0 0 10px;"> + <div style="grid-template-columns: subgrid; grid-column: 1 /span 3; margin-right: 29px;"> + <x style="grid-column: 1; ">x</x> + </div> + </div> +</div> + +<div class="grid"> + <n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid;"> + <div style="grid-template-columns: subgrid; grid-column: 1 /span 3; margin-right: 29px; padding-left: 10px;"> + <x style="grid-column: 1; ">x</x> + </div> + </div> +</div> + +<div class="grid"> + <n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid; border-right: 20px solid; border-left: 10px solid;"> + <div style="grid-template-columns: subgrid; grid-column-start:span 3; margin-right: 10px;"> + <x style="grid-column: 1;">x</x> + </div> + </div> +</div> + +<div class="grid"> + <n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid;"> + <div style="grid-template-columns: subgrid; grid-column-start:span 3; border-right: 20px solid; border-left: 10px solid; margin-right: 29px;"> + <x style="grid-column: 1;">x</x> + </div> + </div> +</div> + +<div class="grid"> + <n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid; margin: 0 20px 0 0;"> + <div style="grid-template-columns: subgrid; grid-column-start:span 3; margin-right: 9px;"> + <x style="grid-column: 1;">x</x> + </div> + </div> +</div> + +<div class="grid"> + <n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div style="grid-template-columns: subgrid;"> + <div style="grid-template-columns: subgrid; grid-column-start:span 3; margin: 0 20px 0 0; margin-right: 49px;"> + <x style="grid-column: 1;">x</x> + </div> + </div> +</div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/writing-directions-001.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/writing-directions-001.html new file mode 100644 index 00000000000..24caaebc4f1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/writing-directions-001.html @@ -0,0 +1,100 @@ +<!DOCTYPE HTML> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: nested subgrids map margin/border/padding according to writing direction</title> + <link rel="author" title="Kurt Catti-Schmidt" href="mailto:kschmi@microsoft.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid-2"> + <link rel="match" href="writing-directions-001-ref.html"> + <style> +html,body { + font:12px/1 monospace; +} + +.grid { + display: grid; + grid: 0.2em 1.4em / repeat(10, 30px); + border: 1px solid; + padding: 0 0 0 0; +} + +div > div { + display: grid; + grid-column: 2 / span 3; + grid: auto / subgrid; + border: 1px solid; + background: grey; +} + +n { + grid-row: 1; + counter-increment: n; +} +n::before { content: counter(n, decimal); } + +x { + background: silver; +} + +.rtl { direction:rtl; } +.ltr { direction:ltr; } + + </style> +</head> +<body> + +<div class="grid"> + <n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="rtl" style="grid-template-columns: subgrid; padding: 0 0 0 10px;"> + <div class="ltr" style="grid-template-columns: subgrid;"> + <x style="grid-column: 1;">x</x> + </div> + </div> +</div> + +<div class="grid"> + <n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="rtl" style="grid-template-columns: subgrid; "> + <div class="ltr" style="grid-template-columns: subgrid; padding: 0 0 0 10px;"> + <x style="grid-column: 1;">x</x> + </div> + </div> +</div> + +<div class="grid"> + <n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="rtl" style="grid-template-columns: subgrid; border-right: 20px solid; border-left: 10px solid;"> + <div class="ltr" style="grid-template-columns: subgrid; "> + <x style="grid-column: 1;">x</x> + </div> + </div> +</div> + +<div class="grid"> + <n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="rtl" style="grid-template-columns: subgrid;"> + <div class="ltr" style="grid-template-columns: subgrid; border-right: 20px solid; border-left: 10px solid;"> + <x style="grid-column: 1;">x</x> + </div> + </div> +</div> + +<div class="grid"> + <n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="rtl" style="grid-template-columns: subgrid; margin: 0 20px 0 0;"> + <div class="ltr" style="grid-template-columns: subgrid; "> + <x style="grid-column: 1;">x</x> + </div> + </div> +</div> + +<div class="grid"> + <n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n><n></n> + <div class="rtl" style="grid-template-columns: subgrid;"> + <div class="ltr" style="grid-template-columns: subgrid; margin: 0 20px 0 0;"> + <x style="grid-column: 1;">x</x> + </div> + </div> +</div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-highlight-api/painting/css-highlight-painting-underline-offset-001-ref.html b/tests/wpt/web-platform-tests/css/css-highlight-api/painting/css-highlight-painting-underline-offset-001-ref.html new file mode 100644 index 00000000000..3d01bccf55d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-highlight-api/painting/css-highlight-painting-underline-offset-001-ref.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<html> +<meta charset="utf-8"> +<title>CSS Highlight API Test: ::highlight with text-underline-offset, reference</title> +<style> + #target { + text-decoration: wavy underline green 5px; + text-underline-offset: 20px; + } +</style> +<p id="target">The underline should be offset.</p> +</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-highlight-api/painting/css-highlight-painting-underline-offset-001.html b/tests/wpt/web-platform-tests/css/css-highlight-api/painting/css-highlight-painting-underline-offset-001.html new file mode 100644 index 00000000000..14b238ce170 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-highlight-api/painting/css-highlight-painting-underline-offset-001.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<meta charset="utf-8"> +<title>CSS Highlight API Test: ::highlight with text-underline-offset</title> +<link rel="help" href="https://drafts.csswg.org/css-highlight-api-1/"> +<link rel="match" href="css-highlight-painting-underline-offset-001-ref.html"> +<meta name="assert" content="Verify that text-underline-offset works in a ::highlight pseudo-element."> +<style> + ::highlight(example) { + text-decoration: wavy underline green 5px; + text-underline-offset: 20px; + } +</style> +<p id="target">The underline should be offset.</p> +<script> + let range = new Range(); + range.setStart(target, 0); + range.setEnd(target, 1); + CSS.highlights.set(`example`, new Highlight(range)); +</script> +</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-highlight-api/painting/custom-highlight-painting-004-2.html b/tests/wpt/web-platform-tests/css/css-highlight-api/painting/custom-highlight-painting-004-2.html index 044cdb5d649..0a612d66d1e 100644 --- a/tests/wpt/web-platform-tests/css/css-highlight-api/painting/custom-highlight-painting-004-2.html +++ b/tests/wpt/web-platform-tests/css/css-highlight-api/painting/custom-highlight-painting-004-2.html @@ -4,6 +4,7 @@ <link rel="help" href="https://drafts.csswg.org/css-highlight-api-1/"> <link rel="match" href="custom-highlight-painting-004-2-ref.html"> <meta name="assert" value="When painting overlapping highlights with the same .priority, the one added last should be painted on top; and style properties not defined by the one on top (background-color in this case) should follow the rules of the next Highlight from top to bottom until there's one that overwrites default (or use default value otherwise)."> +<meta name="fuzzy" content="0-88;0-1"> <style> ::highlight(foo) { color:blue; diff --git a/tests/wpt/web-platform-tests/css/css-highlight-api/painting/custom-highlight-painting-004.html b/tests/wpt/web-platform-tests/css/css-highlight-api/painting/custom-highlight-painting-004.html index b67c30b7097..320617f8d1f 100644 --- a/tests/wpt/web-platform-tests/css/css-highlight-api/painting/custom-highlight-painting-004.html +++ b/tests/wpt/web-platform-tests/css/css-highlight-api/painting/custom-highlight-painting-004.html @@ -4,6 +4,7 @@ <link rel="help" href="https://drafts.csswg.org/css-highlight-api-1/"> <link rel="match" href="custom-highlight-painting-004-ref.html"> <meta name="assert" value="When painting overlapping highlights with the same .priority, the one added last should be painted on top; and style properties not defined by the one on top (color in this case) should follow the rules of the next Highlight from top to bottom until there's one that overwrites default (or use default value otherwise)."> +<meta name="fuzzy" content="0-255;0-110"> <style> ::highlight(foo) { color:blue; diff --git a/tests/wpt/web-platform-tests/css/css-highlight-api/painting/custom-highlight-painting-text-decoration-001.html b/tests/wpt/web-platform-tests/css/css-highlight-api/painting/custom-highlight-painting-text-decoration-001.html index df6e5dd32cc..72201e6e782 100644 --- a/tests/wpt/web-platform-tests/css/css-highlight-api/painting/custom-highlight-painting-text-decoration-001.html +++ b/tests/wpt/web-platform-tests/css/css-highlight-api/painting/custom-highlight-painting-text-decoration-001.html @@ -4,6 +4,7 @@ <link rel="help" href="https://drafts.csswg.org/css-highlight-api-1/"> <link rel="match" href="custom-highlight-painting-text-decoration-001-ref.html"> <meta name="assert" content="This test checks that ::highlight pseudo-element paints text-decorations defined by it."> +<meta name="fuzzy" content="0-255;0-27"> <style> div { float: left; diff --git a/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-type-first-match-rendering.html b/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-type-first-match-rendering.html index 7e6ea8fa1f7..eafe5bfb2cc 100644 --- a/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-type-first-match-rendering.html +++ b/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-type-first-match-rendering.html @@ -8,8 +8,8 @@ <style> #test { background-image: image-set( - url("/images/green.png") 1x type('image/png'), - url("/images/red.png") 1x type('image/png') + url("/images/green.png") 0.0001x type('image/png'), + url("/images/red.png") 0.0001x type('image/png') ); width: 100px; height: 100px; diff --git a/tests/wpt/web-platform-tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001-ref.html b/tests/wpt/web-platform-tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001-ref.html new file mode 100644 index 00000000000..4fc498a27bd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001-ref.html @@ -0,0 +1,20 @@ +<!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" /> +<link rel="match" href="text-box-trim-half-leading-inline-box-001-ref.html"> + +<style> +.div-parent { + outline: 1px solid orange; + font-family: Ahem; + font-size: 20px; + line-height: 1; + text-box-trim: both; +} +</style> + +<div class ="div-parent""> + <div id="d1"></div> + <div id="d2">Testline1<br><br><br>Testline2<br><br><br>Testline3</div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001.html b/tests/wpt/web-platform-tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001.html new file mode 100644 index 00000000000..9ad9ffc3fc6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-inline/text-box-trim/text-box-trim-half-leading-block-box-001.html @@ -0,0 +1,20 @@ +<!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"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<link rel="match" href="text-box-trim-half-leading-inline-box-001-ref.html"> + +<style> +.div-parent { + outline: 1px solid orange; + font-family: Ahem; + font-size: 20px; + line-height: 3; + text-box-trim: both; +} +</style> + +<div class ="div-parent""> + <div id="d1"></div> + <div id="d2">Testline1<br>Testline2<br>Testline3</div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-inline/text-box-trim/text-box-trim-half-leading-inline-box-002-ref.html b/tests/wpt/web-platform-tests/css/css-inline/text-box-trim/text-box-trim-half-leading-inline-box-002-ref.html new file mode 100644 index 00000000000..4ae48240456 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-inline/text-box-trim/text-box-trim-half-leading-inline-box-002-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<title>Reference for trimming multi-line text in inline boxes</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 { + border: 1px solid orange; + font-size: 20px; + line-height: 1; +} + +span { + border: 1px solid blue; + font-family: Ahem; + font-size: 20px; + line-height: 1; +} +</style> + +<div> + <span>Testline1<br><br><br>TestLine2<br><br><br>TestLine3</span> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-inline/text-box-trim/text-box-trim-half-leading-inline-box-002.html b/tests/wpt/web-platform-tests/css/css-inline/text-box-trim/text-box-trim-half-leading-inline-box-002.html new file mode 100644 index 00000000000..3e679f6ce89 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-inline/text-box-trim/text-box-trim-half-leading-inline-box-002.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<title>Tests inline boxes with multi-line text are trimmed at text-over/text-under baselines</title> +<link rel="help" href="https://drafts.csswg.org/css-inline-3/#leading-trim"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<link rel="match" href="text-box-trim-half-leading-inline-box-001-ref.html"> + +<style> +div { + border: 1px solid orange; + font-size: 20px; + line-height: 1; +} + +span { + border: 1px solid blue; + font-family: Ahem; + font-size: 20px; + line-height: 3; + text-box-trim: both; +} +</style> + +<div> + <span>Testline1<br>TestLine2<br>TestLine3</span> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-masking/clip-path/reference/clip-path-path-interpolation-001-ref.html b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-path-interpolation-001-ref.html index 4e26ac61f62..4e26ac61f62 100644 --- a/tests/wpt/web-platform-tests/css/css-masking/clip-path/reference/clip-path-path-interpolation-001-ref.html +++ b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-path-interpolation-001-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-path-interpolation-001.html b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-path-interpolation-001.html index 9b12621b9d6..0c988e090e6 100644 --- a/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-path-interpolation-001.html +++ b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-path-interpolation-001.html @@ -3,7 +3,7 @@ <head> <title>CSS Masking: Test clip-path nonzero path interpolation</title> <link rel="help" href="https://drafts.csswg.org/css-shapes-2/#funcdef-path"> - <link rel="match" href="reference/clip-path-path-interpolation-001-ref.html"> + <link rel="match" href="clip-path-path-interpolation-001-ref.html"> <meta name="assert" content="The clip-path property takes the basic shape 'path()' for clipping. Test the interpolation of nonzero path function."> diff --git a/tests/wpt/web-platform-tests/css/css-masking/clip-path/reference/clip-path-path-interpolation-002-ref.html b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-path-interpolation-002-ref.html index 567764a3012..567764a3012 100644 --- a/tests/wpt/web-platform-tests/css/css-masking/clip-path/reference/clip-path-path-interpolation-002-ref.html +++ b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-path-interpolation-002-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-path-interpolation-002.html b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-path-interpolation-002.html index 4cf6fb4a07d..4c1c485f7f8 100644 --- a/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-path-interpolation-002.html +++ b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-path-interpolation-002.html @@ -3,7 +3,7 @@ <head> <title>CSS Masking: Test clip-path evenodd path interpolation</title> <link rel="help" href="https://drafts.csswg.org/css-shapes-2/#funcdef-path"> - <link rel="match" href="reference/clip-path-path-interpolation-002-ref.html"> + <link rel="match" href="clip-path-path-interpolation-002-ref.html"> <meta name="assert" content="The clip-path property takes the basic shape 'path()' for clipping. Test the interpolation of evenodd path function."> diff --git a/tests/wpt/web-platform-tests/css/css-masking/clip-path/reference/clip-path-path-interpolation-with-zoom-ref.html b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-path-interpolation-with-zoom-ref.html index 7e0d2a54266..7e0d2a54266 100644 --- a/tests/wpt/web-platform-tests/css/css-masking/clip-path/reference/clip-path-path-interpolation-with-zoom-ref.html +++ b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-path-interpolation-with-zoom-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-path-interpolation-with-zoom.html b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-path-interpolation-with-zoom.html index 4d54708da19..50dc5e6f4e7 100644 --- a/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-path-interpolation-with-zoom.html +++ b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-path-interpolation-with-zoom.html @@ -2,7 +2,7 @@ <html> <title>CSS Masking: Test clip-path nonzero path interpolation with zoom</title> <link rel="help" href="https://drafts.csswg.org/css-shapes-2/#funcdef-path"> - <link rel="match" href="reference/clip-path-path-interpolation-with-zoom-ref.html"> + <link rel="match" href="clip-path-path-interpolation-with-zoom-ref.html"> <meta name="assert" content="The clip-path property takes the basic shape 'path()' for clipping. Test the interpolation of nonzero path function."> diff --git a/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-shape-interpolation-001.html b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-shape-interpolation-001.html index 1d881e5bd58..dae7f24d37c 100644 --- a/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-shape-interpolation-001.html +++ b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-shape-interpolation-001.html @@ -3,7 +3,7 @@ <head> <title>CSS Masking: Test clip-path nonzero path interpolation</title> <link rel="help" href="https://drafts.csswg.org/css-shapes-2/#funcdef-shape"> - <link rel="match" href="reference/clip-path-path-interpolation-001-ref.html"> + <link rel="match" href="clip-path-path-interpolation-001-ref.html"> <meta name="assert" content="The clip-path property takes the basic shape 'shape()' for clipping. Test the interpolation of nonzero path function."> diff --git a/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-shape-interpolation-002.html b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-shape-interpolation-002.html index 9d8ab65b2d9..6af23c37d6b 100644 --- a/tests/wpt/web-platform-tests/css/css-masking/clip-path/clip-path-shape-interpolation-002.html +++ b/tests/wpt/web-platform-tests/css/css-masking/clip-path/animations/clip-path-shape-interpolation-002.html @@ -3,7 +3,7 @@ <head> <title>CSS Masking: Test clip-path evenodd path interpolation</title> <link rel="help" href="https://drafts.csswg.org/css-shapes-2/#funcdef-shape"> - <link rel="match" href="reference/clip-path-path-interpolation-002-ref.html"> + <link rel="match" href="clip-path-path-interpolation-002-ref.html"> <meta name="assert" content="The clip-path property takes the basic shape 'shape()' for clipping. Test the interpolation of evenodd path function."> diff --git a/tests/wpt/web-platform-tests/css/css-nesting/implicit-nesting-ref.html b/tests/wpt/web-platform-tests/css/css-nesting/implicit-nesting-ref.html index 006216b60e7..0057a67fd03 100644 --- a/tests/wpt/web-platform-tests/css/css-nesting/implicit-nesting-ref.html +++ b/tests/wpt/web-platform-tests/css/css-nesting/implicit-nesting-ref.html @@ -5,8 +5,8 @@ <style> .test { background-color: green; - width: 100px; - height: 100px; + width: 30px; + height: 30px; display: grid; } @@ -21,4 +21,7 @@ <div class="test"></div> <div class="test"></div> <div class="test"></div> + <div class="test"></div> + <div class="test"></div> + <div class="test"></div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-nesting/implicit-nesting.html b/tests/wpt/web-platform-tests/css/css-nesting/implicit-nesting.html index 05b9e04fa84..0a76dedc5bf 100644 --- a/tests/wpt/web-platform-tests/css/css-nesting/implicit-nesting.html +++ b/tests/wpt/web-platform-tests/css/css-nesting/implicit-nesting.html @@ -6,8 +6,8 @@ <style> .test { background-color: red; - width: 100px; - height: 100px; + width: 30px; + height: 30px; display: grid; } @@ -41,12 +41,30 @@ } } - .test { + .test-5 { :is(.test-5, &.does-not-exist) { background-color: green; } } + .test-6 { + > .foo,.test-6-child,+ .bar { + background-color: green; + } + } + + .test-7 { + > .foo, .bar, + .test-7-sibling { + background-color: green; + } + } + + .test-8 { + > .foo, .test-8-child, + .bar { + background-color: green; + } + } + body * + * { margin-top: 8px; } @@ -57,5 +75,8 @@ <div class="test test-2"><div class="test-2-child"></div></div> <div class="test test-3"><div class="test-3-child"></div></div> <div class="test test-4"></div> - <div class="test test-5"></div> + <div class="test test-5"><div class="test-5"></div></div> + <div class="test test-6"><div class="test-6-child"></div></div> + <div class="test test-7" style="display:none"></div><div class="test test-7-sibling"></div> + <div class="test test-8"><div class="test-8-child"></div></div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-nesting/parsing.html b/tests/wpt/web-platform-tests/css/css-nesting/parsing.html index 8e445faf1c9..c22eaada3c2 100644 --- a/tests/wpt/web-platform-tests/css/css-nesting/parsing.html +++ b/tests/wpt/web-platform-tests/css/css-nesting/parsing.html @@ -19,6 +19,11 @@ `.foo {\n &.bar { color: green; }\n}`, `.foo {\n & .bar { color: green; }\n}`, `.foo {\n & > .bar { color: green; }\n}`, + `.foo {\n > .bar { color: green; }\n}`, + `.foo {\n > & .bar { color: green; }\n}`, + `.foo {\n + .bar & { color: green; }\n}`, + `.foo {\n .test > & .bar { color: green; }\n}`, + `.foo {\n + .bar, .foo, > .lol { color: green; }\n}`, `.foo {\n &:is(.bar, &.baz) { color: green; }\n}`, `.foo {\n .bar& { color: green; }\n}`, `.foo {\n .bar & { color: green; }\n}`, diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-computed.html b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-computed.html new file mode 100644 index 00000000000..dd8a5e280f2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-computed.html @@ -0,0 +1,140 @@ +<!DOCTYPE html> +<html> + +<head> + <meta charset="utf-8"> + <title> CSS Scroll Snap 2 Test: scroll-start-* computed values</title> + <link rel="help" href="https://drafts.csswg.org/css-scroll-snap-2/#scroll-start"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/css/support/computed-testcommon.js"></script> +</head> + +<body> + <div id="target"></div> + <script> + test_computed_value("scroll-start", "start"); + test_computed_value("scroll-start", "start start", "start"); + test_computed_value("scroll-start", "100px"); + test_computed_value("scroll-start", "50%"); + test_computed_value("scroll-start", "center"); + test_computed_value("scroll-start", "100px 200px"); + test_computed_value("scroll-start", "50% 100px"); + test_computed_value("scroll-start", "start 50%"); + test_computed_value("scroll-start", "center start", "center"); + test_computed_value("scroll-start", "end center"); + test_computed_value("scroll-start", "top end"); + test_computed_value("scroll-start", "bottom top"); + test_computed_value("scroll-start", "left bottom"); + test_computed_value("scroll-start", "right left"); + test_computed_value("scroll-start", "auto right"); + test_computed_value("scroll-start", "calc(1px)", "1px") + test_computed_value("scroll-start", "calc(1px) start", "1px") + + test_computed_value("scroll-start-block", "100px"); + test_computed_value("scroll-start-block", "50%"); + test_computed_value("scroll-start-block", "start"); + test_computed_value("scroll-start-block", "center"); + test_computed_value("scroll-start-block", "end"); + test_computed_value("scroll-start-block", "top"); + test_computed_value("scroll-start-block", "bottom"); + test_computed_value("scroll-start-block", "left"); + test_computed_value("scroll-start-block", "right"); + test_computed_value("scroll-start-block", "auto"); + test_computed_value("scroll-start-block", "calc(-1px)", "0px"); + + test_computed_value("scroll-start-inline", "100px"); + test_computed_value("scroll-start-inline", "50%"); + test_computed_value("scroll-start-inline", "start"); + test_computed_value("scroll-start-inline", "center"); + test_computed_value("scroll-start-inline", "end"); + test_computed_value("scroll-start-inline", "top"); + test_computed_value("scroll-start-inline", "bottom"); + test_computed_value("scroll-start-inline", "left"); + test_computed_value("scroll-start-inline", "right"); + test_computed_value("scroll-start-inline", "auto"); + test_computed_value("scroll-start-inline", "calc(-1px)", "0px"); + + test_computed_value("scroll-start-x", "100px"); + test_computed_value("scroll-start-x", "50%"); + test_computed_value("scroll-start-x", "start"); + test_computed_value("scroll-start-x", "center"); + test_computed_value("scroll-start-x", "end"); + test_computed_value("scroll-start-x", "top"); + test_computed_value("scroll-start-x", "bottom"); + test_computed_value("scroll-start-x", "left"); + test_computed_value("scroll-start-x", "right"); + test_computed_value("scroll-start-x", "auto"); + test_computed_value("scroll-start-x", "calc(-1px)", "0px"); + + test_computed_value("scroll-start-y", "100px"); + test_computed_value("scroll-start-y", "50%"); + test_computed_value("scroll-start-y", "start"); + test_computed_value("scroll-start-y", "center"); + test_computed_value("scroll-start-y", "end"); + test_computed_value("scroll-start-y", "top"); + test_computed_value("scroll-start-y", "bottom"); + test_computed_value("scroll-start-y", "left"); + test_computed_value("scroll-start-y", "right"); + test_computed_value("scroll-start-y", "auto"); + test_computed_value("scroll-start-y", "calc(-1px)", "0px"); + + target.style = ""; + + // Test logical-physical mapping. + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartBlock = "100px"; + assert_equals(getComputedStyle(target).scrollStartX, "auto"); + assert_equals(getComputedStyle(target).scrollStartY, "100px"); + }, "scroll-start-block maps to scroll-start-y in horizontal writing mode."); + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartInline = "200px"; + assert_equals(getComputedStyle(target).scrollStartX, "200px"); + assert_equals(getComputedStyle(target).scrollStartY, "auto"); + }, "scroll-start-inline maps to scroll-start-x in horizontal writing mode."); + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartX = "100px"; + assert_equals(getComputedStyle(target).scrollStartBlock, "auto"); + assert_equals(getComputedStyle(target).scrollStartInline, "100px"); + }, "scroll-start-x maps to scroll-start-inline in horizontal writing mode."); + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartY = "200px"; + assert_equals(getComputedStyle(target).scrollStartBlock, "200px"); + assert_equals(getComputedStyle(target).scrollStartInline, "auto"); + }, "scroll-start-y maps to scroll-start-block in horizontal writing mode."); + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartBlock = "100px"; + target.style.writingMode = "vertical-lr"; + assert_equals(getComputedStyle(target).scrollStartX, "100px"); + assert_equals(getComputedStyle(target).scrollStartY, "auto"); + }, "scroll-start-block maps to scroll-start-x in vertical writing mode."); + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartInline = "200px"; + target.style.writingMode = "vertical-lr"; + assert_equals(getComputedStyle(target).scrollStartX, "auto"); + assert_equals(getComputedStyle(target).scrollStartY, "200px"); + }, "scroll-start-inline maps to scroll-start-y in vertical writing mode."); + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartX = "100px"; + target.style.writingMode = "vertical-lr"; + assert_equals(getComputedStyle(target).scrollStartBlock, "100px"); + assert_equals(getComputedStyle(target).scrollStartInline, "auto"); + }, "scroll-start-x maps to scroll-start-block in vertical writing mode."); + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartY = "200px"; + target.style.writingMode = "vertical-lr"; + assert_equals(getComputedStyle(target).scrollStartBlock, "auto"); + assert_equals(getComputedStyle(target).scrollStartInline, "200px"); + }, "scroll-start-y maps to scroll-start-inline in vertical writing mode."); + </script> +</body> + +</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-invalid.html b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-invalid.html new file mode 100644 index 00000000000..01dbbc48580 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-invalid.html @@ -0,0 +1,48 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title> CSS Scroll Snap 2 Test: scroll-start-block with invalid values</title> + <link rel="help" href="https://drafts.csswg.org/css-scroll-snap-2/#scroll-start"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> + <script> + test_invalid_value("scroll-start", "-100px"); + test_invalid_value("scroll-start", "-50%"); + test_invalid_value("scroll-start", "invalid_keyword"); + test_invalid_value("scroll-start", "-100px -50%"); + test_invalid_value("scroll-start", "-50% invalid_keyword"); + test_invalid_value("scroll-start", "invalid_keyword invalid_keyword"); + test_invalid_value("scroll-start", "-100px - 100px"); + test_invalid_value("scroll-start", "-50% -100px"); + test_invalid_value("scroll-start", "invalid_keyword -50%"); + test_invalid_value("scroll-start", "-100px invalid_keyword"); + test_invalid_value("scroll-start", "-50% -50%"); + test_invalid_value("scroll-start", "invalid_keyword -100px"); + test_invalid_value("scroll-start", "100px 200px 300px"); + + test_invalid_value("scroll-start-block", "-100px"); + test_invalid_value("scroll-start-block", "-50%"); + test_invalid_value("scroll-start-block", "invalid_keyword"); + test_invalid_value("scroll-start-block", "100px 200px"); + + test_invalid_value("scroll-start-inline", "-100px"); + test_invalid_value("scroll-start-inline", "-50%"); + test_invalid_value("scroll-start-inline", "invalid_keyword"); + test_invalid_value("scroll-start-inline", "100px 200px"); + + test_invalid_value("scroll-start-x", "-100px"); + test_invalid_value("scroll-start-x", "-50%"); + test_invalid_value("scroll-start-x", "invalid_keyword"); + test_invalid_value("scroll-start-x", "100px 200px"); + + test_invalid_value("scroll-start-y", "-100px"); + test_invalid_value("scroll-start-y", "-50%"); + test_invalid_value("scroll-start-y", "invalid_keyword"); + test_invalid_value("scroll-start-y", "100px 200px"); + </script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-shorthand.html b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-shorthand.html new file mode 100644 index 00000000000..22e206ec627 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-shorthand.html @@ -0,0 +1,63 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Scroll Snap 2 Test: scroll-start sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-2/#scroll-start"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> + +<body> + <script> + test_shorthand_value('scroll-start', '100px', { + 'scroll-start-block': '100px', + 'scroll-start-inline': 'start', + }); + test_shorthand_value('scroll-start', '50%', { + 'scroll-start-block': '50%', + 'scroll-start-inline': 'start', + }); + test_shorthand_value('scroll-start', 'center', { + 'scroll-start-block': 'center', + 'scroll-start-inline': 'start', + }); + test_shorthand_value('scroll-start', '100px 200px', { + 'scroll-start-block': '100px', + 'scroll-start-inline': '200px', + }); + test_shorthand_value('scroll-start', '100px 50%', { + 'scroll-start-block': '100px', + 'scroll-start-inline': '50%', + }); + test_shorthand_value('scroll-start', '100px center', { + 'scroll-start-block': '100px', + 'scroll-start-inline': 'center', + }); + test_shorthand_value('scroll-start', '50% 200px', { + 'scroll-start-block': '50%', + 'scroll-start-inline': '200px', + }); + test_shorthand_value('scroll-start', '50% 25%', { + 'scroll-start-block': '50%', + 'scroll-start-inline': '25%', + }); + test_shorthand_value('scroll-start', '50% center', { + 'scroll-start-block': '50%', + 'scroll-start-inline': 'center', + }); + test_shorthand_value('scroll-start', 'center 200px', { + 'scroll-start-block': 'center', + 'scroll-start-inline': '200px', + }); + test_shorthand_value('scroll-start', 'center 25%', { + 'scroll-start-block': 'center', + 'scroll-start-inline': '25%', + }); + test_shorthand_value('scroll-start', 'center end', { + 'scroll-start-block': 'center', + 'scroll-start-inline': 'end', + }); + </script> +</body>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-target-computed.html b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-target-computed.html new file mode 100644 index 00000000000..bb31f2b2446 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-target-computed.html @@ -0,0 +1,86 @@ +<!DOCTYPE html> +<html> + +<head> + <meta charset="utf-8"> + <title> CSS Scroll Snap 2 Test: scroll-start-target-* computed values</title> + <link rel="help" href="https://drafts.csswg.org/css-scroll-snap-2/#scroll-start"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/css/support/computed-testcommon.js"></script> +</head> + +<body> + <div id="target"></div> + <script> + test_computed_value("scroll-start-target-block", "auto"); + test_computed_value("scroll-start-target-block", "none"); + + test_computed_value("scroll-start-target-inline", "auto"); + test_computed_value("scroll-start-target-inline", "none"); + + test_computed_value("scroll-start-target-x", "auto"); + test_computed_value("scroll-start-target-x", "none"); + + test_computed_value("scroll-start-target-y", "auto"); + test_computed_value("scroll-start-target-y", "none"); + + target.style = ""; + + // Test logical-physical mapping. + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartTargetBlock = "auto"; + assert_equals(getComputedStyle(target).scrollStartTargetX, "none"); + assert_equals(getComputedStyle(target).scrollStartTargetY, "auto"); + }, "scroll-start-block maps to scroll-start-y in horizontal writing mode."); + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartTargetInline = "auto"; + assert_equals(getComputedStyle(target).scrollStartTargetX, "auto"); + assert_equals(getComputedStyle(target).scrollStartTargetY, "none"); + }, "scroll-start-inline maps to scroll-start-x in horizontal writing mode."); + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartTargetX = "auto"; + assert_equals(getComputedStyle(target).scrollStartTargetBlock, "none"); + assert_equals(getComputedStyle(target).scrollStartTargetInline, "auto"); + }, "scroll-start-x maps to scroll-start-inline in horizontal writing mode."); + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartTargetY = "auto"; + assert_equals(getComputedStyle(target).scrollStartTargetBlock, "auto"); + assert_equals(getComputedStyle(target).scrollStartTargetInline, "none"); + }, "scroll-start-y maps to scroll-start-block in horizontal writing mode."); + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartTargetBlock = "auto"; + target.style.writingMode = "vertical-lr"; + assert_equals(getComputedStyle(target).scrollStartTargetX, "auto"); + assert_equals(getComputedStyle(target).scrollStartTargetY, "none"); + }, "scroll-start-block maps to scroll-start-x in vertical writing mode."); + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartTargetInline = "auto"; + target.style.writingMode = "vertical-lr"; + assert_equals(getComputedStyle(target).scrollStartTargetX, "none"); + assert_equals(getComputedStyle(target).scrollStartTargetY, "auto"); + }, "scroll-start-inline maps to scroll-start-y in vertical writing mode."); + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartTargetX = "auto"; + target.style.writingMode = "vertical-lr"; + assert_equals(getComputedStyle(target).scrollStartTargetBlock, "auto"); + assert_equals(getComputedStyle(target).scrollStartTargetInline, "none"); + }, "scroll-start-x maps to scroll-start-block in vertical writing mode."); + test((t) => { + t.add_cleanup(() => { target.style = ""; }); + target.style.scrollStartTargetY = "auto"; + target.style.writingMode = "vertical-lr"; + assert_equals(getComputedStyle(target).scrollStartTargetBlock, "none"); + assert_equals(getComputedStyle(target).scrollStartTargetInline, "auto"); + }, "scroll-start-y maps to scroll-start-inline in vertical writing mode."); + </script> +</body> + +</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-target-invalid.html b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-target-invalid.html new file mode 100644 index 00000000000..03ca718629c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-target-invalid.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title> CSS Scroll Snap 2 Test: scroll-start-target-* with invalid values</title> + <link rel="help" href="https://drafts.csswg.org/css-scroll-snap-2/#scroll-start"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> + <script> + test_invalid_value("scroll-start-target", "invalid_keyword"); + test_invalid_value("scroll-start-target", "100px"); + test_invalid_value("scroll-start-target", "none none none"); + test_invalid_value("scroll-start-target", "invalid_keyword1 invalid_keyword2"); + test_invalid_value("scroll-start-target", "100px 100px"); + + test_invalid_value("scroll-start-target-block", "invalid_keyword"); + test_invalid_value("scroll-start-target-block", "100px"); + test_invalid_value("scroll-start-target-block", "none none"); + + test_invalid_value("scroll-start-target-inline", "invalid_keyword"); + test_invalid_value("scroll-start-target-inline", "100px"); + test_invalid_value("scroll-start-target-inline", "none none"); + + test_invalid_value("scroll-start-target-x", "invalid_keyword"); + test_invalid_value("scroll-start-target-x", "100px"); + test_invalid_value("scroll-start-target-x", "none none"); + + test_invalid_value("scroll-start-target-y", "invalid_keyword"); + test_invalid_value("scroll-start-target-y", "100px"); + test_invalid_value("scroll-start-target-y", "none none"); + </script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-target-shorthand.html b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-target-shorthand.html new file mode 100644 index 00000000000..60171578425 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-target-shorthand.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Scroll Snap 2 Test: scroll-none-target sets longhands</title> +<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-2/#scroll-start-target"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/shorthand-testcommon.js"></script> +</head> + +<body> + <script> + test_shorthand_value("scroll-start-target", "none", { + "scroll-start-target-block": "none", + "scroll-start-target-inline": "none", + }); + test_shorthand_value("scroll-start-target", "auto", { + "scroll-start-target-block": "auto", + "scroll-start-target-inline": "none", + }); + test_shorthand_value("scroll-start-target", "none auto", { + "scroll-start-target-block": "none", + "scroll-start-target-inline": "auto", + }); + test_shorthand_value("scroll-start-target", "auto none", { + "scroll-start-target-block": "auto", + "scroll-start-target-inline": "none", + }); + </script> +</body>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-target-valid.html b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-target-valid.html new file mode 100644 index 00000000000..aed964bdff4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-target-valid.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html> + +<head> + <meta charset="utf-8"> + <title> CSS Scroll Snap 2 Test: scroll-start-target-* with valid values</title> + <link rel="help" href="https://drafts.csswg.org/css-scroll-snap-2/#scroll-start"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/css/support/parsing-testcommon.js"></script> +</head> + +<body> + <script> + test_valid_value("scroll-start-target", "none"); + test_valid_value("scroll-start-target", "auto"); + test_valid_value("scroll-start-target", "none auto"); + test_valid_value("scroll-start-target", "auto none", "auto"); + + test_valid_value("scroll-start-target-block", "none"); + test_valid_value("scroll-start-target-block", "auto"); + + test_valid_value("scroll-start-target-inline", "none"); + test_valid_value("scroll-start-target-inline", "auto"); + + test_valid_value("scroll-start-target-x", "none"); + test_valid_value("scroll-start-target-x", "auto"); + + test_valid_value("scroll-start-target-y", "none"); + test_valid_value("scroll-start-target-y", "auto"); + </script> +</body> + +</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-valid.html b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-valid.html new file mode 100644 index 00000000000..c4729795439 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap-2/parsing/scroll-start-valid.html @@ -0,0 +1,81 @@ +<!DOCTYPE html> +<html> + +<head> + <meta charset="utf-8"> + <title> CSS Scroll Snap 2 Test: scroll-start-block with valid values</title> + <link rel="help" href="https://drafts.csswg.org/css-scroll-snap-2/#scroll-start"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/css/support/parsing-testcommon.js"></script> +</head> + +<body> + <script> + test_valid_value("scroll-start", "start"); + test_valid_value("scroll-start", "start start", "start"); + test_valid_value("scroll-start", "50%"); + test_valid_value("scroll-start", "center"); + test_valid_value("scroll-start", "100px 200px"); + test_valid_value("scroll-start", "50% 100px"); + test_valid_value("scroll-start", "start 50%"); + test_valid_value("scroll-start", "center start", "center"); + test_valid_value("scroll-start", "end center"); + test_valid_value("scroll-start", "top end"); + test_valid_value("scroll-start", "bottom top"); + test_valid_value("scroll-start", "left bottom"); + test_valid_value("scroll-start", "right left"); + test_valid_value("scroll-start", "auto right"); + test_valid_value("scroll-start", "calc(1px) auto"); + + test_valid_value("scroll-start-block", "100px"); + test_valid_value("scroll-start-block", "50%"); + test_valid_value("scroll-start-block", "start"); + test_valid_value("scroll-start-block", "center"); + test_valid_value("scroll-start-block", "end"); + test_valid_value("scroll-start-block", "top"); + test_valid_value("scroll-start-block", "bottom"); + test_valid_value("scroll-start-block", "left"); + test_valid_value("scroll-start-block", "right"); + test_valid_value("scroll-start-block", "auto"); + test_valid_value("scroll-start-block", "calc(-1px)"); + + test_valid_value("scroll-start-inline", "100px"); + test_valid_value("scroll-start-inline", "50%"); + test_valid_value("scroll-start-inline", "start"); + test_valid_value("scroll-start-inline", "center"); + test_valid_value("scroll-start-inline", "end"); + test_valid_value("scroll-start-inline", "top"); + test_valid_value("scroll-start-inline", "bottom"); + test_valid_value("scroll-start-inline", "left"); + test_valid_value("scroll-start-inline", "right"); + test_valid_value("scroll-start-inline", "auto"); + test_valid_value("scroll-start-inline", "calc(-1px)"); + + test_valid_value("scroll-start-x", "100px"); + test_valid_value("scroll-start-x", "50%"); + test_valid_value("scroll-start-x", "start"); + test_valid_value("scroll-start-x", "center"); + test_valid_value("scroll-start-x", "end"); + test_valid_value("scroll-start-x", "top"); + test_valid_value("scroll-start-x", "bottom"); + test_valid_value("scroll-start-x", "left"); + test_valid_value("scroll-start-x", "right"); + test_valid_value("scroll-start-x", "auto"); + test_valid_value("scroll-start-x", "calc(-1px)"); + + test_valid_value("scroll-start-y", "100px"); + test_valid_value("scroll-start-y", "50%"); + test_valid_value("scroll-start-y", "start"); + test_valid_value("scroll-start-y", "center"); + test_valid_value("scroll-start-y", "end"); + test_valid_value("scroll-start-y", "top"); + test_valid_value("scroll-start-y", "bottom"); + test_valid_value("scroll-start-y", "left"); + test_valid_value("scroll-start-y", "right"); + test_valid_value("scroll-start-y", "auto"); + test_valid_value("scroll-start-y", "calc(-1px)"); + </script> +</body> + +</html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-margin-visibility-check.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-margin-visibility-check.html index a072c142ad5..b41ccb36fd3 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-margin-visibility-check.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-margin-visibility-check.html @@ -35,7 +35,7 @@ let target = document.getElementById("target"); promise_test(async function() { scroller.scrollTo(0, 0); await new Promise(resolve => { - scroller.addEventListener("scroll", () => step_timeout(resolve, 0)); + scroller.addEventListener("scroll", resolve, { once: true }); document.getElementById("target").focus(); }); assert_true(scroller.scrollTop > 0, "Visibility check should not account for margin"); diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-margin-005.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-margin-005.html index 5e4782fe653..d3b60270e60 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-margin-005.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-margin-005.html @@ -25,7 +25,7 @@ promise_test(async function() { document.scrollingElement.scrollTo(0, 20000); await new Promise(resolve => { - document.addEventListener("scroll", () => step_timeout(resolve, 0)); + document.addEventListener("scroll", resolve, { once: true }); document.getElementById("target").focus(); }); // Should be around 4900 (5000 - 200px of margin). Give some leeway to account for line height / borders / input padding / etc. diff --git a/tests/wpt/web-platform-tests/css/css-tables/rules-groups-ref.html b/tests/wpt/web-platform-tests/css/css-tables/rules-groups-ref.html new file mode 100644 index 00000000000..8da4884f80b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-tables/rules-groups-ref.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>CSS reference: legacy table rules attribute</title> + +<style> +table { margin: 1em 1em 2em 1em; border-collapse: collapse; } + +#a thead, #a tbody { border-block-end-width: 1px; border-block-end-style: solid; } +#b thead, #b tbody { border-block-end: 1px solid blue; } +#c thead, #c tbody { border-block-end-width: 5px; border-block-end-style: solid; } +</style> + +<p>Borders between groups should be present:</p> +<table id=a> + <thead><tr><td>head</td></tr></thead> + <tbody> + <tr><td>body</td><td>one</td></tr> + <tr><td>body</td><td>two</td></tr> + </tbody> + <tfoot><tr><td>foot</td></tr></tfoot> +</table> + +<p>Borders between groups should be blue:</p> +<table id=b> + <thead><tr><td>head</td></tr></thead> + <tbody> + <tr><td>body</td><td>one</td></tr> + <tr><td>body</td><td>two</td></tr> + </tbody> + <tfoot><tr><td>foot</td></tr></tfoot> +</table> + +<p>Borders between groups should be 5px thick:</p> +<table id=c> + <thead><tr><td>head</td></tr></thead> + <tbody> + <tr><td>body</td><td>one</td></tr> + <tr><td>body</td><td>two</td></tr> + </tbody> + <tfoot><tr><td>foot</td></tr></tfoot> +</table> diff --git a/tests/wpt/web-platform-tests/css/css-tables/rules-groups.html b/tests/wpt/web-platform-tests/css/css-tables/rules-groups.html new file mode 100644 index 00000000000..d07aa0b7658 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-tables/rules-groups.html @@ -0,0 +1,52 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>CSS Test: legacy table rules attribute</title> +<link rel="author" title="Jonathan Kew" href="mailto:jfkthame@mozilla.com"> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1832101"> +<link rel="match" href="rules-groups-ref.html"> + +<style> +table { margin: 1em 1em 2em 1em; } + +/* Modify style of the inter-group borders, assuming default UA rules are in effect. */ + +/* With border-block-start suppressed, the block-end border should still appear: */ +#a > * { border-block-start: none; } + +/* Change the color of the border: */ +#b > * { border-block-end-color: blue; } + +/* Change the thickness of the border: */ +#c > * { border-block-end-width: 5px; } +</style> + +<p>Borders between groups should be present:</p> +<table id=a rules=groups> + <thead><tr><td>head</td></tr></thead> + <tbody> + <tr><td>body</td><td>one</td></tr> + <tr><td>body</td><td>two</td></tr> + </tbody> + <tfoot><tr><td>foot</td></tr></tfoot> +</table> + +<p>Borders between groups should be blue:</p> +<table id=b rules=groups> + <thead><tr><td>head</td></tr></thead> + <tbody> + <tr><td>body</td><td>one</td></tr> + <tr><td>body</td><td>two</td></tr> + </tbody> + <tfoot><tr><td>foot</td></tr></tfoot> +</table> + +<p>Borders between groups should be 5px thick:</p> +<table id=c rules=groups> + <thead><tr><td>head</td></tr></thead> + <tbody> + <tr><td>body</td><td>one</td></tr> + <tr><td>body</td><td>two</td></tr> + </tbody> + <tfoot><tr><td>foot</td></tr></tfoot> +</table> diff --git a/tests/wpt/web-platform-tests/css/css-text/parsing/white-space-collapse-invalid copy.html b/tests/wpt/web-platform-tests/css/css-text/parsing/white-space-collapse-invalid.html index 6c18ecec21c..0d2856ba37f 100644 --- a/tests/wpt/web-platform-tests/css/css-text/parsing/white-space-collapse-invalid copy.html +++ b/tests/wpt/web-platform-tests/css/css-text/parsing/white-space-collapse-invalid.html @@ -2,10 +2,10 @@ <html> <head> <meta charset="utf-8"> -<title>CSS Text Module Test: parsing text-wrap with invalid values</title> -<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m"> -<link rel="help" href="https://drafts.csswg.org/css-text-4/#text-wrap"> -<meta name="assert" content="text-wrap supports only the grammar 'wrap | nowrap | balance | stable | pretty'."> +<title>CSS Text Module Test: parsing white-space-collapse with invalid values</title> +<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-4/#white-space-collapsing"> +<meta name="assert" content="white-space-collapse supports only the grammar 'collapse | discard | preserve | preserve-breaks | preserve-spaces | break-spaces'."> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/css/support/parsing-testcommon.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-text/parsing/white-space-collapse-valid.html b/tests/wpt/web-platform-tests/css/css-text/parsing/white-space-collapse-valid.html index 2191167527b..23c0cd39bb6 100644 --- a/tests/wpt/web-platform-tests/css/css-text/parsing/white-space-collapse-valid.html +++ b/tests/wpt/web-platform-tests/css/css-text/parsing/white-space-collapse-valid.html @@ -2,10 +2,10 @@ <html> <head> <meta charset="utf-8"> -<title>CSS Text Module Test: parsing text-wrap with valid values</title> -<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m"> -<link rel="help" href="https://drafts.csswg.org/css-text-4/#text-wrap"> -<meta name="assert" content="text-wrap supports the full grammar 'wrap | nowrap | balance | stable | pretty'."> +<title>CSS Text Module Test: parsing white-space-collapse with valid values</title> +<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-text-4/#white-space-collapsing"> +<meta name="assert" content="white-space-collapse supports the full grammar 'collapse | discard | preserve | preserve-breaks | preserve-spaces | break-spaces'."> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/css/support/parsing-testcommon.js"></script> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/infinite-duration-crash.html b/tests/wpt/web-platform-tests/css/css-transitions/infinite-duration-crash.html new file mode 100644 index 00000000000..dba53d66b7a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transitions/infinite-duration-crash.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<style> + * { + transition: all ease-out, linear 2733ms background, all calc(2s / 0) steps(706573049); + } +</style> +<script> + document.addEventListener("DOMContentLoaded", () => { + const style = document.createElement("style") + document.head.appendChild(style) + const selection = window.getSelection() + style.sheet.insertRule(`* { background-clip: padding-box, padding-box, border-box, content-box; }`, 0) + selection.selectAllChildren(style) + style.sheet.disabled = true + }) +</script> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/support/properties.js b/tests/wpt/web-platform-tests/css/css-transitions/support/properties.js index 4b749db057c..0c0057b39e8 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/support/properties.js +++ b/tests/wpt/web-platform-tests/css/css-transitions/support/properties.js @@ -267,7 +267,6 @@ var unspecified_properties = { 'column-width': ['length'], 'transform': ['transform'], 'transform-origin': ['horizontal'], - 'zoom': ['number'], 'display': ['display'], 'position': ['position'], 'object-view-box': ['object-view-box'] diff --git a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/display.html b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/display.html index 7a90b1c07cd..b650431d843 100644 --- a/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/display.html +++ b/tests/wpt/web-platform-tests/css/css-typed-om/the-stylepropertymap/properties/display.html @@ -37,8 +37,23 @@ runPropertyTests('display', [ { syntax: 'inline-grid' }, ]); +// We can not set 'inline math' or 'math inline' via Typed OM. +// On the other hand, we might get a CSSKeywordValue instance for them instead +// of a CSSStyleValue because they can be represented as just 'math' in +// internal representations. +for (let value of ['inline math', 'math inline']) { + test(t => { + let element = createDivWithStyle(t); + element.style.display = value; + const result = element.attributeStyleMap.get('display'); + assert_not_equals(result, null); + assert_in_array({}.toString.call(result), + ['[object CSSStyleValue]', '[object CSSKeywordValue]']); + }, `'display' does not support setting '${value}'`); +} + runUnsupportedPropertyTests('display', [ - 'block math', 'math block', 'inline math', 'math inline' + 'block math', 'math block' ]); </script> diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/exit-transition-with-anonymous-layout-object-ref.html b/tests/wpt/web-platform-tests/css/css-view-transitions/exit-transition-with-anonymous-layout-object-ref.html new file mode 100644 index 00000000000..10e04ac58a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-view-transitions/exit-transition-with-anonymous-layout-object-ref.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html> +<title>View transitions: exit transition with layout objects that don't have a node (ref)</title> +<link rel="help" href="https://drafts.csswg.org/css-view-transitions-1/"> +<link rel="author" href="mailto:khushalsagar@chromium.org"> + +<style> +body { + width: 100vw; + height: 100vh; + background: pink; +} + +#target { + width: 100px; + height: 100px; + background: blue; +} +</style> +<div id="target"></div> diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/exit-transition-with-anonymous-layout-object.html b/tests/wpt/web-platform-tests/css/css-view-transitions/exit-transition-with-anonymous-layout-object.html new file mode 100644 index 00000000000..ea2d17b2761 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-view-transitions/exit-transition-with-anonymous-layout-object.html @@ -0,0 +1,64 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<title>View transitions: exit transition with layout objects that don't have a node</title> +<link rel="help" href="https://drafts.csswg.org/css-view-transitions-1/"> +<link rel="author" href="mailto:khushalsagar@chromium.org"> +<link rel="match" href="exit-transition-with-anonymous-layout-object-ref.html"> + +<script src="/common/reftest-wait.js"></script> +<style> +body { + width: 100vw; + height: 100vh; +} + +#target { + width: 100px; + height: 100px; + background: blue; + view-transition-name: target; +} + +#hidden { + width: 10px; + height: 10px; + background: grey; + view-transition-name: hidden; +} + +fieldset { + width: 100px; + height: 100px; + background: lightgreen; + overflow: clip; +} + +html::view-transition { background: pink; } +html::view-transition-group(root) { visibility: hidden; } +html::view-transition-group(hidden) { animation-duration: 300s; } +html::view-transition-image-pair(hidden) { animation: unset; opacity: 0; } +html::view-transition-old(target) { + animation: unset; + opacity: 1; +} +</style> +<div id="target"></div> +<fieldset id="anonymous">hi</fieldset> +<div id=hidden class=hidden></div> + +<script> +failIfNot(document.startViewTransition, "Missing document.startViewTransition"); + +async function runTest() { + let t = document.startViewTransition(() => { + target.style.viewTransitionName = "none"; + }); + await t.ready; + anonymous.style.position = "relative"; + requestAnimationFrame(() => requestAnimationFrame(() => + requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)) + )); +} +onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest)); +</script> + diff --git a/tests/wpt/web-platform-tests/css/motion/animation/offset-path-interpolation-006.html b/tests/wpt/web-platform-tests/css/motion/animation/offset-path-interpolation-006.html new file mode 100644 index 00000000000..a19908e4fff --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion/animation/offset-path-interpolation-006.html @@ -0,0 +1,126 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title>offset-distance basic-shape interpolation</title> + <link rel="author" title="Daniil Sakhapov" href="mailto:sakhapov@chromium.org"> + <link rel="help" href="https://drafts.fxtf.org/motion/#valdef-offset-path-basic-shape"> + <meta name="assert" content="offset-path basic shape supports animation."> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/css/support/interpolation-testcommon.js"></script> + </head> + <style> + .parent { + offset-path: ellipse(10% 10%); + } + .target { + offset-path: circle(10px); + } + </style> + <body> + <script> + 'use strict'; + + test_no_interpolation({ + property: 'offset-path', + from: "circle(10px)", + to: "inset(20px)", + }); + + test_no_interpolation({ + property: 'offset-path', + from: "ellipse(at center)", + to: "none", + }); + + // Neutral keyframes use the inline style. + test_interpolation({ + property: 'offset-path', + from: neutralKeyframe, + to: 'circle(20px)', + }, [ + {at: -0.3, expect: 'circle(7px)'}, + {at: 0, expect: 'circle(10px)'}, + {at: 0.3, expect: 'circle(13px)'}, + {at: 0.6, expect: 'circle(16px)'}, + {at: 1, expect: 'circle(20px)'}, + {at: 1.5, expect: 'circle(25px)'}, + ]); + + // No interpolation to an ellipse from the initial value 'none'. + test_no_interpolation({ + property: 'offset-path', + from: 'initial', + to: 'ellipse()', + }); + + // 'inherit' keyframes use the parent style. + test_interpolation({ + property: 'offset-path', + from: 'inherit', + to: 'ellipse(40% 50% at 25% 25%)', + }, [ + {at: -0.3, expect: 'ellipse(1% 0% at 57.5% 57.5%)'}, + {at: 0, expect: 'ellipse(10% 10% at 50% 50%)'}, + {at: 0.3, expect: 'ellipse(19% 22% at 42.5% 42.5%)'}, + {at: 0.6, expect: 'ellipse(28% 34% at 35% 35%)'}, + {at: 1, expect: 'ellipse(40% 50% at 25% 25%)'}, + {at: 1.5, expect: 'ellipse(55% 70% at 12.5% 12.5%)'}, + ]); + + // No interpolation to an inset from the initial value 'none'. + test_no_interpolation({ + property: 'offset-path', + from: 'unset', + to: 'inset(10%)', + }); + + // No interpolation to a rect from the initial value 'none'. + test_no_interpolation({ + property: 'offset-path', + from: 'none', + to: 'rect(10px 10px 10px 10px)', + }); + + // Interpolation between shapes. + test_interpolation({ + property: 'offset-path', + from: 'inset(10px)', + to: 'inset(20px round 50%)' + }, [ + {at: -1, expect: 'inset(0px round 0%)'}, + {at: 0, expect: 'inset(10px round 0%)'}, + {at: 0.125, expect: 'inset(11.25px round 6.25%)'}, + {at: 0.875, expect: 'inset(18.75px round 43.75%)'}, + {at: 1, expect: 'inset(20px round 50%)'}, + {at: 2, expect: 'inset(30px round 100%)'}, + ]); + + test_interpolation({ + property: 'offset-path', + from: 'xywh(5px 5px 150% 150%)', + to: 'xywh(10px 10px 100% 100%)' + }, [ + {at: -1, expect: 'xywh(0px 0px 200% 200%)'}, + {at: 0, expect: 'xywh(5px 5px 150% 150%)'}, + {at: 0.125, expect: 'xywh(5.63px 5.63px 143.75% 143.75% )'}, + {at: 0.875, expect: 'xywh(9.38px 9.38px 106.25% 106.25%)'}, + {at: 1, expect: 'xywh(10px 10px 100% 100%)'}, + {at: 2, expect: 'xywh(15px 15px 50% 50%)'}, + ]); + + // No interpolation between different radius keywords. + test_no_interpolation({ + property: 'offset-path', + from: 'circle(farthest-side)', + to: 'circle(closest-side)' + }); + test_no_interpolation({ + property: 'offset-path', + from: 'ellipse(closest-side farthest-side)', + to: 'ellipse(closest-side closest-side)' + }); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-001-ref.html b/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-001-ref.html new file mode 100644 index 00000000000..679b43fe705 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-001-ref.html @@ -0,0 +1,26 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Motion Path test reference: <coord-box> <border-box></title> +<link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com"> + +<style> +#outer { + top: 100px; + left: 100px; + position: relative; + border-radius: 50%; + border: 5px solid black; + width: 600px; + height: 400px; +} +#box { + background-color: green; + transform: translate(483.441px, 19.1699px) rotate(37.2267deg); + width: 100px; + height: 100px; +} +</style> + +<div id="outer"> + <div id="box"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-001.html b/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-001.html new file mode 100644 index 00000000000..527459c6fdd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-001.html @@ -0,0 +1,30 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Motion Path test: <coord-box> <border-box></title> +<link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com"> +<link rel="match" href="offset-path-coord-box-001-ref.html"> +<link rel="help" href="https://drafts.fxtf.org/motion/#valdef-offset-path-coord-box"> + +<style> +#outer { + top: 100px; + left: 100px; + position: relative; + border-radius: 50%; + border: 5px solid black; + width: 600px; + height: 400px; +} +#box { + background-color: green; + position: relative; + offset-path: border-box; + offset-distance: 15%; + width: 100px; + height: 100px; +} +</style> + +<div id="outer"> + <div id="box"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-002-ref.html b/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-002-ref.html new file mode 100644 index 00000000000..a722ec3bd3e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-002-ref.html @@ -0,0 +1,25 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Motion Path test reference: <coord-box> <padding-box></title> +<link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com"> + +<style> +#outer { + top: 100px; + left: 100px; + position: relative; + border: 5px solid black; + width: 600px; + height: 400px; +} +#box { + background-color: green; + transform: translate(250px, -50px); + width: 100px; + height: 100px; +} +</style> + +<div id="outer"> + <div id="box"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-002.html b/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-002.html new file mode 100644 index 00000000000..0abe4169400 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-002.html @@ -0,0 +1,29 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Motion Path test: <coord-box> <padding-box></title> +<link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com"> +<link rel="match" href="offset-path-coord-box-002-ref.html"> +<link rel="help" href="https://drafts.fxtf.org/motion/#valdef-offset-path-coord-box"> + +<style> +#outer { + top: 100px; + left: 100px; + position: relative; + border: 5px solid black; + width: 600px; + height: 400px; +} +#box { + background-color: green; + position: relative; + offset-path: padding-box; + offset-distance: 15%; + width: 100px; + height: 100px; +} +</style> + +<div id="outer"> + <div id="box"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-003-ref.html b/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-003-ref.html new file mode 100644 index 00000000000..f6e6203f4a0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-003-ref.html @@ -0,0 +1,26 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Motion Path test reference: <coord-box> <content-box></title> +<link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com"> + +<style> +#outer { + top: 100px; + left: 100px; + position: relative; + border: 5px solid black; + padding: 10px; + width: 600px; + height: 400px; +} +#box { + background-color: green; + transform: translate(250px, -50px); + width: 100px; + height: 100px; +} +</style> + +<div id="outer"> + <div id="box"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-003.html b/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-003.html new file mode 100644 index 00000000000..6605d8e9a0d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/motion/offset-path-coord-box-003.html @@ -0,0 +1,30 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Motion Path test: <coord-box> <content-box></title> +<link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com"> +<link rel="match" href="offset-path-coord-box-003-ref.html"> +<link rel="help" href="https://drafts.fxtf.org/motion/#valdef-offset-path-coord-box"> + +<style> +#outer { + top: 100px; + left: 100px; + position: relative; + border: 5px solid black; + padding: 10px; + width: 600px; + height: 400px; +} +#box { + background-color: green; + position: relative; + offset-path: content-box; + offset-distance: 15%; + width: 100px; + height: 100px; +} +</style> + +<div id="outer"> + <div id="box"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-001.html b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-001.html index 13df077df06..4874ba33929 100644 --- a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-001.html +++ b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-001.html @@ -1,6 +1,6 @@ <!doctype html> <meta charset="utf-8"> -<title>CSS Motion Path test reference: <basic-shape> circle() path with explicit arguments</title> +<title>CSS Motion Path test: <basic-shape> circle() path with explicit arguments</title> <meta name=fuzzy content="0-1;0-200"> <link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com"> <link rel="match" href="offset-path-shape-circle-001-ref.html"> diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-002.html b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-002.html index 8264abbbca0..672396186a5 100644 --- a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-002.html +++ b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-002.html @@ -1,6 +1,6 @@ <!doctype html> <meta charset="utf-8"> -<title>CSS Motion Path test reference: <basic-shape> circle() path with no parameters</title> +<title>CSS Motion Path test: <basic-shape> circle() path with no parameters</title> <link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com"> <link rel="match" href="offset-path-shape-circle-002-ref.html"> <link rel="help" href="https://drafts.fxtf.org/motion/#valdef-offset-path-basic-shape"> diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-003.html b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-003.html index eb00dacab30..1911d425a16 100644 --- a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-003.html +++ b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-003.html @@ -1,6 +1,6 @@ <!doctype html> <meta charset="utf-8"> -<title>CSS Motion Path test reference: <basic-shape> circle() path with offset-distance</title> +<title>CSS Motion Path test: <basic-shape> circle() path with offset-distance</title> <meta name=fuzzy content="0-10;0-20"> <link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com"> <link rel="match" href="offset-path-shape-circle-003-ref.html"> diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-004.html b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-004.html index 39e80fa861b..f0a8523dd16 100644 --- a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-004.html +++ b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-circle-004.html @@ -1,6 +1,6 @@ <!doctype html> <meta charset="utf-8"> -<title>CSS Motion Path test reference: <basic-shape> circle() path with offset-distance and offset-anchor</title> +<title>CSS Motion Path test: <basic-shape> circle() path with offset-distance and offset-anchor</title> <link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com"> <link rel="match" href="offset-path-shape-circle-004-ref.html"> <link rel="help" href="https://drafts.fxtf.org/motion/#valdef-offset-path-basic-shape"> diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-001.html b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-001.html index 35482636ba1..b8254458d38 100644 --- a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-001.html +++ b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-001.html @@ -1,6 +1,6 @@ <!doctype html> <meta charset="utf-8"> -<title>CSS Motion Path test reference: <basic-shape> ellipse() path with explicit arguments</title> +<title>CSS Motion Path test: <basic-shape> ellipse() path with explicit arguments</title> <meta name=fuzzy content="0-1;0-200"> <link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com"> <link rel="match" href="offset-path-shape-ellipse-001-ref.html"> diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-002.html b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-002.html index 298e1dd52ed..461838aa889 100644 --- a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-002.html +++ b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-002.html @@ -1,6 +1,6 @@ <!doctype html> <meta charset="utf-8"> -<title>CSS Motion Path test reference: <basic-shape> ellipse() path with no parameters</title> +<title>CSS Motion Path test: <basic-shape> ellipse() path with no parameters</title> <link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com"> <link rel="match" href="offset-path-shape-ellipse-002-ref.html"> <link rel="help" href="https://drafts.fxtf.org/motion/#valdef-offset-path-basic-shape"> diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-003.html b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-003.html index 2b79367b0bc..540c56dba7b 100644 --- a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-003.html +++ b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-003.html @@ -1,6 +1,6 @@ <!doctype html> <meta charset="utf-8"> -<title>CSS Motion Path test reference: <basic-shape> ellipse() path with offset-distance</title> +<title>CSS Motion Path test: <basic-shape> ellipse() path with offset-distance</title> <link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com"> <link rel="match" href="offset-path-shape-ellipse-003-ref.html"> <link rel="help" href="https://drafts.fxtf.org/motion/#valdef-offset-path-basic-shape"> diff --git a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-004.html b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-004.html index 2c95415b11f..0ed4816e3d0 100644 --- a/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-004.html +++ b/tests/wpt/web-platform-tests/css/motion/offset-path-shape-ellipse-004.html @@ -1,6 +1,6 @@ <!doctype html> <meta charset="utf-8"> -<title>CSS Motion Path test reference: <basic-shape> ellipse() path with offset-distance and offset-anchor</title> +<title>CSS Motion Path test: <basic-shape> ellipse() path with offset-distance and offset-anchor</title> <link rel="author" title="Daniil Sakhapov" href="sakhapov@google.com"> <link rel="match" href="offset-path-shape-ellipse-004-ref.html"> <link rel="help" href="https://drafts.fxtf.org/motion/#valdef-offset-path-basic-shape"> diff --git a/tests/wpt/web-platform-tests/css/printing/transform-002-print-ref.html b/tests/wpt/web-platform-tests/css/printing/transform-002-print-ref.html new file mode 100644 index 00000000000..7204e1d6571 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/printing/transform-002-print-ref.html @@ -0,0 +1,4 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<p>There should be a green square on the second page, and no red.</p> +<div style="break-before:page; width:100px; height:100px; background:green;"></div> diff --git a/tests/wpt/web-platform-tests/css/printing/transform-002-print.html b/tests/wpt/web-platform-tests/css/printing/transform-002-print.html new file mode 100644 index 00000000000..3ab37bf5bd8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/printing/transform-002-print.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1371426"> +<link rel="match" href="transform-002-print-ref.html"> +<p>There should be a green square on the second page, and no red.</p> +<div style="break-before:page; width:100px; height:100px; background:red;"> + <div style="position:absolute; width:0; height:0; transform:translateX(49px);"> + <div style="position:absolute; width:51px; height:100px; background:green;"></div> + </div> + <div style="position:absolute; width:50px; height:100px; background:green;"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/printing/transform-003-print-ref.html b/tests/wpt/web-platform-tests/css/printing/transform-003-print-ref.html new file mode 100644 index 00000000000..766c415a1be --- /dev/null +++ b/tests/wpt/web-platform-tests/css/printing/transform-003-print-ref.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<style> + body { margin: 0; } +</style> +<div style="height:100vh; background:yellow;"> + There should be five pages. Each page should have a unique background - but no + red should be seen. +</div> +<div style="height:100vh; background:pink;"></div> +<div style="height:100vh; background:cyan;"></div> +<div style="height:100vh; background:papayawhip;"></div> +<div style="height:100vh; background:olive;"></div> diff --git a/tests/wpt/web-platform-tests/css/printing/transform-003-print.html b/tests/wpt/web-platform-tests/css/printing/transform-003-print.html new file mode 100644 index 00000000000..c8effbb8f35 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/printing/transform-003-print.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1371426"> +<link rel="match" href="transform-003-print-ref.html"> +<style> + body { margin: 0; } +</style> +<div style="position:relative; z-index:1; height:100vh;"> + There should be five pages. Each page should have a unique background - but no + red should be seen. +</div> +<!-- This tests that the transform on the container is applied to all the + absolutely positioned descendants, and also that the transform origin is + correct. --> +<div style="transform:rotate(180deg); height:250vh; background:red;"> + <div style="position:absolute; width:100%; transform:translateY(-100vh); top:-100vh; height:100vh; background:yellow;"></div> + <div style="position:absolute; width:100%; height:100vh; background:pink;"></div> + <div style="position:absolute; width:100%; top:100vh; height:100vh; background:cyan;"></div> + <div style="position:absolute; width:100%; transform:translateY(-50vh); top:200vh; height:100vh; background:papayawhip;"></div> + <div style="position:absolute; width:100%; transform:translateY(-100vh); top:300vh; height:100vh; background:olive;"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/reference/ref-filled-greenish-100px-square.html b/tests/wpt/web-platform-tests/css/reference/ref-filled-greenish-100px-square.html new file mode 100644 index 00000000000..bff74d4c9cf --- /dev/null +++ b/tests/wpt/web-platform-tests/css/reference/ref-filled-greenish-100px-square.html @@ -0,0 +1,6 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<p>Test passes if there is a filled green-ish square and <strong>no red</strong>.</p> +<div style="width:100px; height:100px; background:green;"> + <div style="opacity:0.1; width:100%; height:100%; background:red;"></div> +</div> diff --git a/tests/wpt/web-platform-tests/custom-elements/range-and-constructors.html b/tests/wpt/web-platform-tests/custom-elements/range-and-constructors.html index d17c3b71480..cc514248516 100644 --- a/tests/wpt/web-platform-tests/custom-elements/range-and-constructors.html +++ b/tests/wpt/web-platform-tests/custom-elements/range-and-constructors.html @@ -5,22 +5,22 @@ <meta name="author" title="Edgar Chen" href="mailto:echen@mozilla.com"> <link rel="help" href="https://html.spec.whatwg.org/multipage/scripting.html#concept-upgrade-an-element"> <link rel="help" href="https://dom.spec.whatwg.org/#concept-create-element"> -<line rel="help" href="https://dom.spec.whatwg.org/#concept-range-extract"> -<line rel="help" href="https://dom.spec.whatwg.org/#concept-range-clone"> +<link rel="help" href="https://dom.spec.whatwg.org/#concept-range-extract"> +<link rel="help" href="https://dom.spec.whatwg.org/#concept-range-clone"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> </head> <body> <div id="log"></div> -<c-e data-index="root"> - <c-e data-index="root-0"> - <c-e data-index="root-0-0"> - <c-e data-index="root-0-0-0"></c-e> +<c-e id="root"> + <c-e id="root-0"> + <c-e id="root-0-0"> + <c-e id="root-0-0-0"></c-e> <span id="start"></span> </c-e> </c-e> - <c-e data-index="root-1"></c-e> + <c-e id="root-1"></c-e> <span id="end"></span> </c-e> @@ -30,7 +30,7 @@ var logs = []; class CE extends HTMLElement { constructor() { super(); - logs.push(this.dataset.index); + logs.push(this.id); } } customElements.define('c-e', CE); diff --git a/tests/wpt/web-platform-tests/editing/crashtests/inserthtml-in-li-in-option.html b/tests/wpt/web-platform-tests/editing/crashtests/inserthtml-in-li-in-option.html new file mode 100644 index 00000000000..c8aa9f780f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/crashtests/inserthtml-in-li-in-option.html @@ -0,0 +1,25 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<script> +"use strict"; +document.addEventListener("DOMContentLoaded", () => { + const select = document.querySelector("select"); + select.appendChild(document.querySelector("option")); + select.appendChild(document.createElement("optgroup")); + document.querySelector("p").appendChild(document.querySelector("li[contenteditable]")); + getSelection().collapse(document.querySelector("output"), 0); + document.execCommand("insertHTML", false, select.innerHTML); +}); +</script> +</head> +<body> +<dl> +<select>a</select> +<p></p> +<option> +<li contenteditable> +<output> +</output><li></option></dl></body> +</html> diff --git a/tests/wpt/web-platform-tests/fetch/api/request/multi-globals/construct-in-detached-frame.window.js b/tests/wpt/web-platform-tests/fetch/api/request/multi-globals/construct-in-detached-frame.window.js new file mode 100644 index 00000000000..b0d6ba5b80d --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/api/request/multi-globals/construct-in-detached-frame.window.js @@ -0,0 +1,11 @@ +// This is a regression test for Chromium issue https://crbug.com/1427266. +test(() => { + const iframe = document.createElement('iframe'); + document.body.append(iframe); + const otherRequest = iframe.contentWindow.Request; + iframe.remove(); + const r1 = new otherRequest('resource', { method: 'POST', body: 'string' }); + const r2 = new otherRequest(r1); + assert_true(r1.bodyUsed); + assert_false(r2.bodyUsed); +}, 'creating a request from another request in a detached realm should work'); diff --git a/tests/wpt/web-platform-tests/fetch/api/response/response-static-json.any.js b/tests/wpt/web-platform-tests/fetch/api/response/response-static-json.any.js index 3c8a2b637f7..5ec79e69aa3 100644 --- a/tests/wpt/web-platform-tests/fetch/api/response/response-static-json.any.js +++ b/tests/wpt/web-platform-tests/fetch/api/response/response-static-json.any.js @@ -79,3 +79,18 @@ promise_test(async function () { } ) }, "Check static json() propagates JSON serializer errors"); + +const encodingChecks = [ + ["𝌆", [34, 240, 157, 140, 134, 34]], + ["\uDF06\uD834", [34, 92, 117, 100, 102, 48, 54, 92, 117, 100, 56, 51, 52, 34]], + ["\uDEAD", [34, 92, 117, 100, 101, 97, 100, 34]], +]; + +for (const [input, expected] of encodingChecks) { + promise_test(async function () { + const response = Response.json(input); + const buffer = await response.arrayBuffer(); + const data = new Uint8Array(buffer); + assert_array_equals(data, expected); + }, `Check response returned by static json() with input ${input}`); +} diff --git a/tests/wpt/web-platform-tests/fledge/tentative/fetch-ad-auction-headers-insecure-context.tentative.http.html b/tests/wpt/web-platform-tests/fledge/tentative/fetch-ad-auction-headers-insecure-context.tentative.http.html new file mode 100644 index 00000000000..d3bdb801757 --- /dev/null +++ b/tests/wpt/web-platform-tests/fledge/tentative/fetch-ad-auction-headers-insecure-context.tentative.http.html @@ -0,0 +1,11 @@ +<!doctype html> +<body> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> + <script> + promise_test(async t => { + return promise_rejects_dom(t, 'NotAllowedError', + fetch('./resources/empty.html', {adAuctionHeaders: true})); + }, 'test fetch(<url>, {adAuctionHeaders: true}) in insecure context'); + </script> +</body> diff --git a/tests/wpt/web-platform-tests/fledge/tentative/fetch-ad-auction-headers.tentative.https.html b/tests/wpt/web-platform-tests/fledge/tentative/fetch-ad-auction-headers.tentative.https.html new file mode 100644 index 00000000000..7b2a2c2ba4a --- /dev/null +++ b/tests/wpt/web-platform-tests/fledge/tentative/fetch-ad-auction-headers.tentative.https.html @@ -0,0 +1,12 @@ +<!doctype html> +<body> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> + <script> + promise_test(async t => { + let response = await fetch('./resources/empty.html', {adAuctionHeaders: true}); + // TODO(crbug.com/1442274): Check the request header when the functions + // are fully implemented. + }, 'test fetch(<url>, {adAuctionHeaders: true})'); + </script> +</body> diff --git a/tests/wpt/web-platform-tests/fledge/tentative/resources/empty.html b/tests/wpt/web-platform-tests/fledge/tentative/resources/empty.html new file mode 100644 index 00000000000..0e76edd65b7 --- /dev/null +++ b/tests/wpt/web-platform-tests/fledge/tentative/resources/empty.html @@ -0,0 +1 @@ +<!DOCTYPE html> diff --git a/tests/wpt/web-platform-tests/fs/FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.js b/tests/wpt/web-platform-tests/fs/FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.js index 1b7fcda35bf..dbecc24c1da 100644 --- a/tests/wpt/web-platform-tests/fs/FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.js +++ b/tests/wpt/web-platform-tests/fs/FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.js @@ -1,5 +1,6 @@ importScripts('/resources/testharness.js'); importScripts('resources/sandboxed-fs-test-helpers.js'); +importScripts('resources/test-helpers.js'); 'use strict'; diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-options.tentative.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-options.tentative.html index f3b99e84e69..875431698f7 100644 --- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-options.tentative.html +++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-options.tentative.html @@ -5,6 +5,8 @@ <script src="/resources/testdriver-vendor.js"></script> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="../trusted-click.js"></script> +<body></body> <script> promise_test(async (t) => { await test_driver.set_permission( @@ -12,16 +14,16 @@ "granted" ); + let screenGetterInvoked = false; const options = { get screen() { + screenGetterInvoked = true; return undefined; }, }; - await promise_rejects_js( - t, - TypeError, - document.body.requestFullscreen(options) - ); + await trusted_click(document.body); + await document.body.requestFullscreen(options); + assert_equals(screenGetterInvoked, true); }, "fullscreenOptions.screen getter is invoked on requestFullscreen"); </script> diff --git a/tests/wpt/web-platform-tests/fullscreen/api/fullscreen-reordering.html b/tests/wpt/web-platform-tests/fullscreen/api/fullscreen-reordering.html new file mode 100644 index 00000000000..1a286c32c77 --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/api/fullscreen-reordering.html @@ -0,0 +1,62 @@ +<!DOCTYPE html> +<title>Re-requesting fullscreen doesn't fail but doesn't change order</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="../../html/semantics/popovers/resources/popover-utils.js"></script> + +<div class="elements"> + <div id="A">Element A</div> + <div id="B">Element B</div> +</div> + +<style> + .elements>div { + width:200px; + height:200px; + } + #A { background: blue; } + #B { background: green; } +</style> + +<script> +promise_test(async (t) => { + t.add_cleanup(async () => { + while (document.fullscreenElement) + await document.exitFullscreen(); + }); + document.onfullscreenerror = () => assert_unreached('fullscreenerror should not happen'); + const A = document.getElementById('A'); + const B = document.getElementById('B'); + assert_true(!isTopLayer(A) && !isTopLayer(B)); + await blessTopLayer(document.body); + await A.requestFullscreen(); + assert_equals(document.fullscreenElement,A,'first A request'); + assert_true(isTopLayer(A),'A top layer'); + await blessTopLayer(A); + try { + await B.requestFullscreen(); + } catch (error) { + assert_unreached('The second call to requestFullscreen rejected - it should be possible to put siblings into fullscreen together'); + } + assert_equals(document.fullscreenElement,B,'B request'); + assert_true(isTopLayer(B),'B top layer'); + assert_true(isTopLayer(A),'A still top layer'); + await blessTopLayer(B); + await A.requestFullscreen(); + assert_true(isTopLayer(A),'A is still top layer'); + assert_true(isTopLayer(B),'B is still top layer'); + assert_equals(document.fullscreenElement,A,'A is moved back to the top of the top layer stack'); + assert_equals(document.elementFromPoint(10,10),A,'A should be topmost'); + + await document.exitFullscreen(); + assert_equals(document.fullscreenElement,B,'B goes back to being the fullscreen element'); + assert_true(isTopLayer(B),'B is still top layer'); + assert_false(isTopLayer(A),'A is no longer top layer'); + await document.exitFullscreen(); + assert_equals(document.fullscreenElement,null,'Both closed'); + assert_false(isTopLayer(A),'A is no longer top layer'); + assert_false(isTopLayer(B),'B is no longer top layer'); +}, 'Requesting fullscreen on A, then B, then A'); +</script> diff --git a/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js b/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js index 65f58ee7ca2..3c8f478c541 100644 --- a/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js +++ b/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js @@ -544,24 +544,6 @@ function runGenericSensorTests(sensorName, /*isNull=*/true)); }, `${sensorName}: sensor reading is correct when options.referenceFrame\ is 'screen'.`); - - test(() => { - assert_implements(sensorName in self, `${sensorName} is not supported.`); - const invalidRefFrames = [ - "invalid", - null, - 123, - {}, - "", - true - ]; - invalidRefFrames.map(refFrame => { - assert_throws_js(TypeError, - () => { new sensorType({referenceFrame: refFrame}) }, - `when refFrame is ${refFrame}`); - }); - }, `${sensorName}: throw 'TypeError' if referenceFrame is not one of\ - enumeration values.`); } function runGenericSensorInsecureContext(sensorName) { diff --git a/tests/wpt/web-platform-tests/html-aam/roles.html b/tests/wpt/web-platform-tests/html-aam/roles.html index 5144fe3f0fb..3609c26a23f 100644 --- a/tests/wpt/web-platform-tests/html-aam/roles.html +++ b/tests/wpt/web-platform-tests/html-aam/roles.html @@ -29,7 +29,7 @@ <!-- todo: audio --> <!-- todo: autonomous custom element --> -<b data-testname="el-b" data-expectedrole="strong" class="ex">x</b> +<b data-testname="el-b" data-expectedrole="generic" class="ex">x</b> <!-- base (not mapped) --> <bdi data-testname="el-bdi" data-expectedrole="generic" class="ex">x</bdi> <bdo data-testname="el-bdo" data-expectedrole="generic" class="ex">x</bdo> @@ -98,7 +98,7 @@ <hgroup data-testname="el-hgroup" data-expectedrole="group" class="ex"><h1>x</h1></hgroup> <hr data-testname="el-hr" data-expectedrole="separator" class="ex"> <!-- todo: html --> -<i data-testname="el-i" data-expectedrole="emphasis" class="ex">x</i> +<i data-testname="el-i" data-expectedrole="generic" class="ex">x</i> <!-- todo: iframe --> <img src="#" alt="x" data-testname="el-img" data-expectedrole="image" class="ex"> diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.invalid.spacing.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.invalid.spacing.html index 61ca6d4a915..9bf2440900c 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.invalid.spacing.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.invalid.spacing.html @@ -32,6 +32,10 @@ test_word_spacing('0s'); test_word_spacing('1min'); test_word_spacing('1deg'); test_word_spacing('1pp'); +test_word_spacing('initial'); +test_word_spacing('inherit'); +test_word_spacing('normal'); +test_word_spacing('none'); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.letterSpacing.change.font.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.letterSpacing.change.font.html index 5b42b89e325..3b88ab6ee17 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.letterSpacing.change.font.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.letterSpacing.change.font.html @@ -29,7 +29,7 @@ _assertSame(ctx.letterSpacing, '1em', "ctx.letterSpacing", "'1em'"); // 1em = 10px. Add 10px after each letter in "Hello World", // makes it 110px longer. var width_with_spacing = ctx.measureText('Hello World').width; -_assertSame(width_with_spacing, width_normal + 110, "width_with_spacing", "width_normal + 110"); +assert_approx_equals(width_with_spacing, width_normal + 110, 0.1, "letterSpacing incorrect before font change"); // Changing font to 20px. Without resetting the spacing, 1em letterSpacing // is now 20px, so it's suppose to be 220px longer without any letterSpacing set. @@ -38,7 +38,7 @@ width_with_spacing = ctx.measureText('Hello World').width; // Now calculate the reference spacing for "Hello World" with no spacing. ctx.letterSpacing = '0em'; width_normal = ctx.measureText('Hello World').width; -_assertSame(width_with_spacing, width_normal + 220, "width_with_spacing", "width_normal + 220"); +assert_approx_equals(width_with_spacing, width_normal + 220, 0.1, "letterSpacing incorrect after font change"); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.letterSpacing.measure.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.letterSpacing.measure.html index fadfaaf2015..ba8656ec1a3 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.letterSpacing.measure.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.letterSpacing.measure.html @@ -36,11 +36,11 @@ function test_letter_spacing(value, difference_spacing, epsilon) { // in 'hello world', so the length difference is always letterSpacing * 11. // and the third value is the acceptable differencee for the length change, // note that unit such as 1cm/1mm doesn't map to an exact pixel value. -test_cases = [['3px', 33, 0], - ['5px', 55, 0], - ['-2px', -22, 0], - ['1em', 110, 0], - ['1in', 1056, 0], +test_cases = [['3px', 33, 0.1], + ['5px', 55, 0.1], + ['-2px', -22, 0.1], + ['1em', 110, 0.1], + ['1in', 1056, 0.1], ['-0.1cm', -41.65, 0.2], ['-0.6mm', -24,95, 0.2]] diff --git a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.wordSpacing.measure.html b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.wordSpacing.measure.html index 4cd3c237cd8..4898c23ee78 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.wordSpacing.measure.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.wordSpacing.measure.html @@ -36,11 +36,11 @@ function test_word_spacing(value, difference_spacing, epsilon) { // in 'Hello World, again', so the length difference is always wordSpacing * 2. // and the third value is the acceptable differencee for the length change, // note that unit such as 1cm/1mm doesn't map to an exact pixel value. -test_cases = [['3px', 6, 0], - ['5px', 10, 0], - ['-2px', -4, 0], - ['1em', 20, 0], - ['1in', 192, 0], +test_cases = [['3px', 6, 0.1], + ['5px', 10, 0.1], + ['-2px', -4, 0.1], + ['1em', 20, 0.1], + ['1in', 192, 0.1], ['-0.1cm', -7.57, 0.2], ['-0.6mm', -4.54, 0.2]] diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.invalid.spacing.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.invalid.spacing.html index a117be03656..5030055567a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.invalid.spacing.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.invalid.spacing.html @@ -33,6 +33,10 @@ test_word_spacing('0s'); test_word_spacing('1min'); test_word_spacing('1deg'); test_word_spacing('1pp'); +test_word_spacing('initial'); +test_word_spacing('inherit'); +test_word_spacing('normal'); +test_word_spacing('none'); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.invalid.spacing.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.invalid.spacing.worker.js index 7f6baf28b68..e4b090cc765 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.invalid.spacing.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.invalid.spacing.worker.js @@ -29,6 +29,10 @@ test_word_spacing('0s'); test_word_spacing('1min'); test_word_spacing('1deg'); test_word_spacing('1pp'); +test_word_spacing('initial'); +test_word_spacing('inherit'); +test_word_spacing('normal'); +test_word_spacing('none'); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.absolute.html index b63c81b2557..5482c36b370 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.absolute.html @@ -1,16 +1,16 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> -<title>OffscreenCanvas test: 2d.text.drawing.style.letterSpacing.measure</title> +<title>OffscreenCanvas test: 2d.text.drawing.style.letterSpacing.measure.absolute</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/html/canvas/resources/canvas-tests.js"></script> -<h1>2d.text.drawing.style.letterSpacing.measure</h1> -<p class="desc">Testing letter spacing and word spacing</p> +<h1>2d.text.drawing.style.letterSpacing.measure.absolute</h1> +<p class="desc">Testing letter spacing with absolute length</p> <script> -var t = async_test("Testing letter spacing and word spacing"); +var t = async_test("Testing letter spacing with absolute length"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -37,11 +37,10 @@ function test_letter_spacing(value, difference_spacing, epsilon) { // in 'hello world', so the length difference is always letterSpacing * 11. // and the third value is the acceptable differencee for the length change, // note that unit such as 1cm/1mm doesn't map to an exact pixel value. -test_cases = [['3px', 33, 0], - ['5px', 55, 0], - ['-2px', -22, 0], - ['1em', 110, 0], - ['1in', 1056, 0], +test_cases = [['3px', 33, 0.1], + ['5px', 55, 0.1], + ['-2px', -22, 0.1], + ['1in', 1056, 0.1], ['-0.1cm', -41.65, 0.2], ['-0.6mm', -24,95, 0.2]] diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.absolute.worker.js index b9189cba30c..22cab4cccd9 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.absolute.worker.js @@ -1,12 +1,12 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -// OffscreenCanvas test in a worker:2d.text.drawing.style.letterSpacing.measure -// Description:Testing letter spacing and word spacing +// OffscreenCanvas test in a worker:2d.text.drawing.style.letterSpacing.measure.absolute +// Description:Testing letter spacing with absolute length // Note: importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Testing letter spacing and word spacing"); +var t = async_test("Testing letter spacing with absolute length"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -33,11 +33,10 @@ function test_letter_spacing(value, difference_spacing, epsilon) { // in 'hello world', so the length difference is always letterSpacing * 11. // and the third value is the acceptable differencee for the length change, // note that unit such as 1cm/1mm doesn't map to an exact pixel value. -test_cases = [['3px', 33, 0], - ['5px', 55, 0], - ['-2px', -22, 0], - ['1em', 110, 0], - ['1in', 1056, 0], +test_cases = [['3px', 33, 0.1], + ['5px', 55, 0.1], + ['-2px', -22, 0.1], + ['1in', 1056, 0.1], ['-0.1cm', -41.65, 0.2], ['-0.6mm', -24,95, 0.2]] diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.relative.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.relative.html new file mode 100644 index 00000000000..fa5d2bce754 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.relative.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.text.drawing.style.letterSpacing.measure.relative</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.text.drawing.style.letterSpacing.measure.relative</h1> +<p class="desc">Testing letter spacing with font-relative length</p> + + +<script> +var t = async_test("Testing letter spacing with font-relative length"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + +var canvas = new OffscreenCanvas(100, 50); +var ctx = canvas.getContext('2d'); + +_assertSame(ctx.letterSpacing, '0px', "ctx.letterSpacing", "'0px'"); +_assertSame(ctx.wordSpacing, '0px', "ctx.wordSpacing", "'0px'"); +ctx.font = "10px monospace"; +var width_normal = ctx.measureText('Hello World').width; +var ch_width = width_normal / 11; + +function test_letter_spacing(value, difference_spacing, epsilon) { + ctx.letterSpacing = value; + _assertSame(ctx.letterSpacing, value, "ctx.letterSpacing", "value"); + _assertSame(ctx.wordSpacing, '0px', "ctx.wordSpacing", "'0px'"); + width_with_letter_spacing = ctx.measureText('Hello World').width; + assert_approx_equals(width_with_letter_spacing, width_normal + difference_spacing, epsilon, "letter spacing doesn't work."); +} + +// The first value is the letter Spacing to be set, the second value the +// change in length of string 'Hello World', note that there are 11 letters +// in 'hello world', so the length difference is always letterSpacing * 11. +// and the third value is the acceptable differencee for the length change. +test_cases = [['1em', 110, 0.1], + ['-0.1em', -11, 0.1], + ['1ch', 11 * ch_width, 0.1]] + +for (const test_case of test_cases) { + test_letter_spacing(test_case[0], test_case[1], test_case[2]); +} +t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.relative.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.relative.worker.js new file mode 100644 index 00000000000..59d17ef82cf --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.letterSpacing.measure.relative.worker.js @@ -0,0 +1,47 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.text.drawing.style.letterSpacing.measure.relative +// Description:Testing letter spacing with font-relative length +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("Testing letter spacing with font-relative length"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + +var canvas = new OffscreenCanvas(100, 50); +var ctx = canvas.getContext('2d'); + +_assertSame(ctx.letterSpacing, '0px', "ctx.letterSpacing", "'0px'"); +_assertSame(ctx.wordSpacing, '0px', "ctx.wordSpacing", "'0px'"); +ctx.font = "10px monospace"; +var width_normal = ctx.measureText('Hello World').width; +var ch_width = width_normal / 11; + +function test_letter_spacing(value, difference_spacing, epsilon) { + ctx.letterSpacing = value; + _assertSame(ctx.letterSpacing, value, "ctx.letterSpacing", "value"); + _assertSame(ctx.wordSpacing, '0px', "ctx.wordSpacing", "'0px'"); + width_with_letter_spacing = ctx.measureText('Hello World').width; + assert_approx_equals(width_with_letter_spacing, width_normal + difference_spacing, epsilon, "letter spacing doesn't work."); +} + +// The first value is the letter Spacing to be set, the second value the +// change in length of string 'Hello World', note that there are 11 letters +// in 'hello world', so the length difference is always letterSpacing * 11. +// and the third value is the acceptable differencee for the length change. +test_cases = [['1em', 110, 0.1], + ['-0.1em', -11, 0.1], + ['1ch', 11 * ch_width, 0.1]] + +for (const test_case of test_cases) { + test_letter_spacing(test_case[0], test_case[1], test_case[2]); +} +t.done(); + +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.absolute.html index 9ef479bba2c..07ca896f975 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.absolute.html @@ -1,16 +1,16 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> -<title>OffscreenCanvas test: 2d.text.drawing.style.wordSpacing.measure</title> +<title>OffscreenCanvas test: 2d.text.drawing.style.wordSpacing.measure.absolute</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/html/canvas/resources/canvas-tests.js"></script> -<h1>2d.text.drawing.style.wordSpacing.measure</h1> -<p class="desc">Testing if word spacing is working properly</p> +<h1>2d.text.drawing.style.wordSpacing.measure.absolute</h1> +<p class="desc">Testing if word spacing is working properly with absolute length</p> <script> -var t = async_test("Testing if word spacing is working properly"); +var t = async_test("Testing if word spacing is working properly with absolute length"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -37,11 +37,10 @@ function test_word_spacing(value, difference_spacing, epsilon) { // in 'Hello World, again', so the length difference is always wordSpacing * 2. // and the third value is the acceptable differencee for the length change, // note that unit such as 1cm/1mm doesn't map to an exact pixel value. -test_cases = [['3px', 6, 0], - ['5px', 10, 0], - ['-2px', -4, 0], - ['1em', 20, 0], - ['1in', 192, 0], +test_cases = [['3px', 6, 0.1], + ['5px', 10, 0.1], + ['-2px', -4, 0.1], + ['1in', 192, 0.1], ['-0.1cm', -7.57, 0.2], ['-0.6mm', -4.54, 0.2]] diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.absolute.worker.js index 3e850fcf3df..ebfc05644fc 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.absolute.worker.js @@ -1,12 +1,12 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -// OffscreenCanvas test in a worker:2d.text.drawing.style.wordSpacing.measure -// Description:Testing if word spacing is working properly +// OffscreenCanvas test in a worker:2d.text.drawing.style.wordSpacing.measure.absolute +// Description:Testing if word spacing is working properly with absolute length // Note: importScripts("/resources/testharness.js"); importScripts("/html/canvas/resources/canvas-tests.js"); -var t = async_test("Testing if word spacing is working properly"); +var t = async_test("Testing if word spacing is working properly with absolute length"); var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; @@ -33,11 +33,10 @@ function test_word_spacing(value, difference_spacing, epsilon) { // in 'Hello World, again', so the length difference is always wordSpacing * 2. // and the third value is the acceptable differencee for the length change, // note that unit such as 1cm/1mm doesn't map to an exact pixel value. -test_cases = [['3px', 6, 0], - ['5px', 10, 0], - ['-2px', -4, 0], - ['1em', 20, 0], - ['1in', 192, 0], +test_cases = [['3px', 6, 0.1], + ['5px', 10, 0.1], + ['-2px', -4, 0.1], + ['1in', 192, 0.1], ['-0.1cm', -7.57, 0.2], ['-0.6mm', -4.54, 0.2]] diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.relative.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.relative.html new file mode 100644 index 00000000000..95f87cb03d0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.relative.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<title>OffscreenCanvas test: 2d.text.drawing.style.wordSpacing.measure.relative</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.text.drawing.style.wordSpacing.measure.relative</h1> +<p class="desc">Testing if word spacing is working properly with font-relative length</p> + + +<script> +var t = async_test("Testing if word spacing is working properly with font-relative length"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + +var canvas = new OffscreenCanvas(100, 50); +var ctx = canvas.getContext('2d'); + +_assertSame(ctx.letterSpacing, '0px', "ctx.letterSpacing", "'0px'"); +_assertSame(ctx.wordSpacing, '0px', "ctx.wordSpacing", "'0px'"); +ctx.font = "10px monospace"; +var width_normal = ctx.measureText('Hello World, again').width; +var ch_width = width_normal / 18; + +function test_word_spacing(value, difference_spacing, epsilon) { + ctx.wordSpacing = value; + _assertSame(ctx.letterSpacing, '0px', "ctx.letterSpacing", "'0px'"); + _assertSame(ctx.wordSpacing, value, "ctx.wordSpacing", "value"); + width_with_word_spacing = ctx.measureText('Hello World, again').width; + assert_approx_equals(width_with_word_spacing, width_normal + difference_spacing, epsilon, "word spacing doesn't work."); +} + +// The first value is the word Spacing to be set, the second value the +// change in length of string 'Hello World', note that there are 2 words +// in 'Hello World, again', so the length difference is always wordSpacing * 2. +// and the third value is the acceptable differencee for the length change. +test_cases = [['1em', 20, 0.1], + ['-0.5em', -10, 0.1], + ['1ch', 2 * ch_width, 0.1]] + +for (const test_case of test_cases) { + test_word_spacing(test_case[0], test_case[1], test_case[2]); +} +t.done(); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.relative.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.relative.worker.js new file mode 100644 index 00000000000..2bded51edcb --- /dev/null +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/text/2d.text.drawing.style.wordSpacing.measure.relative.worker.js @@ -0,0 +1,47 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.text.drawing.style.wordSpacing.measure.relative +// Description:Testing if word spacing is working properly with font-relative length +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("Testing if word spacing is working properly with font-relative length"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + +var canvas = new OffscreenCanvas(100, 50); +var ctx = canvas.getContext('2d'); + +_assertSame(ctx.letterSpacing, '0px', "ctx.letterSpacing", "'0px'"); +_assertSame(ctx.wordSpacing, '0px', "ctx.wordSpacing", "'0px'"); +ctx.font = "10px monospace"; +var width_normal = ctx.measureText('Hello World, again').width; +var ch_width = width_normal / 18; + +function test_word_spacing(value, difference_spacing, epsilon) { + ctx.wordSpacing = value; + _assertSame(ctx.letterSpacing, '0px', "ctx.letterSpacing", "'0px'"); + _assertSame(ctx.wordSpacing, value, "ctx.wordSpacing", "value"); + width_with_word_spacing = ctx.measureText('Hello World, again').width; + assert_approx_equals(width_with_word_spacing, width_normal + difference_spacing, epsilon, "word spacing doesn't work."); +} + +// The first value is the word Spacing to be set, the second value the +// change in length of string 'Hello World', note that there are 2 words +// in 'Hello World, again', so the length difference is always wordSpacing * 2. +// and the third value is the acceptable differencee for the length change. +test_cases = [['1em', 20, 0.1], + ['-0.5em', -10, 0.1], + ['1ch', 2 * ch_width, 0.1]] + +for (const test_case of test_cases) { + test_word_spacing(test_case[0], test_case[1], test_case[2]); +} +t.done(); + +}); +done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml index e0de95560cb..3443ad35b3c 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml +++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/drawing-text-to-the-canvas.yaml @@ -718,7 +718,7 @@ @assert ctx.wordSpacing === '0px'; @assert ctx.letterSpacing === '0px'; } - @nonfinite test_word_spacing(< '0s' '1min' '1deg' '1pp'>); + @nonfinite test_word_spacing(< '0s' '1min' '1deg' '1pp' 'initial' 'inherit' 'normal' 'none'>); - name: 2d.text.drawing.style.letterSpacing.measure desc: Testing letter spacing and word spacing @@ -740,11 +740,11 @@ // in 'hello world', so the length difference is always letterSpacing * 11. // and the third value is the acceptable differencee for the length change, // note that unit such as 1cm/1mm doesn't map to an exact pixel value. - test_cases = [['3px', 33, 0], - ['5px', 55, 0], - ['-2px', -22, 0], - ['1em', 110, 0], - ['1in', 1056, 0], + test_cases = [['3px', 33, 0.1], + ['5px', 55, 0.1], + ['-2px', -22, 0.1], + ['1em', 110, 0.1], + ['1in', 1056, 0.1], ['-0.1cm', -41.65, 0.2], ['-0.6mm', -24,95, 0.2]] @@ -772,11 +772,11 @@ // in 'Hello World, again', so the length difference is always wordSpacing * 2. // and the third value is the acceptable differencee for the length change, // note that unit such as 1cm/1mm doesn't map to an exact pixel value. - test_cases = [['3px', 6, 0], - ['5px', 10, 0], - ['-2px', -4, 0], - ['1em', 20, 0], - ['1in', 192, 0], + test_cases = [['3px', 6, 0.1], + ['5px', 10, 0.1], + ['-2px', -4, 0.1], + ['1em', 20, 0.1], + ['1in', 192, 0.1], ['-0.1cm', -7.57, 0.2], ['-0.6mm', -4.54, 0.2]] @@ -797,7 +797,7 @@ // 1em = 10px. Add 10px after each letter in "Hello World", // makes it 110px longer. var width_with_spacing = ctx.measureText('Hello World').width; - @assert width_with_spacing === width_normal + 110; + assert_approx_equals(width_with_spacing, width_normal + 110, 0.1, "letterSpacing incorrect before font change"); // Changing font to 20px. Without resetting the spacing, 1em letterSpacing // is now 20px, so it's suppose to be 220px longer without any letterSpacing set. @@ -806,7 +806,8 @@ // Now calculate the reference spacing for "Hello World" with no spacing. ctx.letterSpacing = '0em'; width_normal = ctx.measureText('Hello World').width; - @assert width_with_spacing === width_normal + 220; + assert_approx_equals(width_with_spacing, width_normal + 220, 0.1, "letterSpacing incorrect after font change"); + - name: 2d.text.drawing.style.wordSpacing.change.font desc: Set word spacing and word spacing to font dependent value and verify it works after font change. diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/text.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/text.yaml index 80c54ca6b66..784a099aca0 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/text.yaml +++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/text.yaml @@ -1183,12 +1183,12 @@ @assert ctx.wordSpacing === '0px'; @assert ctx.letterSpacing === '0px'; } - @nonfinite test_word_spacing(< '0s' '1min' '1deg' '1pp'>); + @nonfinite test_word_spacing(< '0s' '1min' '1deg' '1pp' 'initial' 'inherit' 'normal' 'none'>); t.done(); -- name: 2d.text.drawing.style.letterSpacing.measure - desc: Testing letter spacing and word spacing +- name: 2d.text.drawing.style.letterSpacing.measure.absolute + desc: Testing letter spacing with absolute length code: | @assert ctx.letterSpacing === '0px'; @assert ctx.wordSpacing === '0px'; @@ -1207,11 +1207,10 @@ // in 'hello world', so the length difference is always letterSpacing * 11. // and the third value is the acceptable differencee for the length change, // note that unit such as 1cm/1mm doesn't map to an exact pixel value. - test_cases = [['3px', 33, 0], - ['5px', 55, 0], - ['-2px', -22, 0], - ['1em', 110, 0], - ['1in', 1056, 0], + test_cases = [['3px', 33, 0.1], + ['5px', 55, 0.1], + ['-2px', -22, 0.1], + ['1in', 1056, 0.1], ['-0.1cm', -41.65, 0.2], ['-0.6mm', -24,95, 0.2]] @@ -1220,8 +1219,38 @@ } t.done(); -- name: 2d.text.drawing.style.wordSpacing.measure - desc: Testing if word spacing is working properly +- name: 2d.text.drawing.style.letterSpacing.measure.relative + desc: Testing letter spacing with font-relative length + code: | + @assert ctx.letterSpacing === '0px'; + @assert ctx.wordSpacing === '0px'; + ctx.font = "10px monospace"; + var width_normal = ctx.measureText('Hello World').width; + var ch_width = width_normal / 11; + + function test_letter_spacing(value, difference_spacing, epsilon) { + ctx.letterSpacing = value; + @assert ctx.letterSpacing === value; + @assert ctx.wordSpacing === '0px'; + width_with_letter_spacing = ctx.measureText('Hello World').width; + assert_approx_equals(width_with_letter_spacing, width_normal + difference_spacing, epsilon, "letter spacing doesn't work."); + } + + // The first value is the letter Spacing to be set, the second value the + // change in length of string 'Hello World', note that there are 11 letters + // in 'hello world', so the length difference is always letterSpacing * 11. + // and the third value is the acceptable differencee for the length change. + test_cases = [['1em', 110, 0.1], + ['-0.1em', -11, 0.1], + ['1ch', 11 * ch_width, 0.1]] + + for (const test_case of test_cases) { + test_letter_spacing(test_case[0], test_case[1], test_case[2]); + } + t.done(); + +- name: 2d.text.drawing.style.wordSpacing.measure.absolute + desc: Testing if word spacing is working properly with absolute length code: | @assert ctx.letterSpacing === '0px'; @assert ctx.wordSpacing === '0px'; @@ -1240,11 +1269,10 @@ // in 'Hello World, again', so the length difference is always wordSpacing * 2. // and the third value is the acceptable differencee for the length change, // note that unit such as 1cm/1mm doesn't map to an exact pixel value. - test_cases = [['3px', 6, 0], - ['5px', 10, 0], - ['-2px', -4, 0], - ['1em', 20, 0], - ['1in', 192, 0], + test_cases = [['3px', 6, 0.1], + ['5px', 10, 0.1], + ['-2px', -4, 0.1], + ['1in', 192, 0.1], ['-0.1cm', -7.57, 0.2], ['-0.6mm', -4.54, 0.2]] @@ -1253,6 +1281,36 @@ } t.done(); +- name: 2d.text.drawing.style.wordSpacing.measure.relative + desc: Testing if word spacing is working properly with font-relative length + code: | + @assert ctx.letterSpacing === '0px'; + @assert ctx.wordSpacing === '0px'; + ctx.font = "10px monospace"; + var width_normal = ctx.measureText('Hello World, again').width; + var ch_width = width_normal / 18; + + function test_word_spacing(value, difference_spacing, epsilon) { + ctx.wordSpacing = value; + @assert ctx.letterSpacing === '0px'; + @assert ctx.wordSpacing === value; + width_with_word_spacing = ctx.measureText('Hello World, again').width; + assert_approx_equals(width_with_word_spacing, width_normal + difference_spacing, epsilon, "word spacing doesn't work."); + } + + // The first value is the word Spacing to be set, the second value the + // change in length of string 'Hello World', note that there are 2 words + // in 'Hello World, again', so the length difference is always wordSpacing * 2. + // and the third value is the acceptable differencee for the length change. + test_cases = [['1em', 20, 0.1], + ['-0.5em', -10, 0.1], + ['1ch', 2 * ch_width, 0.1]] + + for (const test_case of test_cases) { + test_word_spacing(test_case[0], test_case[1], test_case[2]); + } + t.done(); + - name: 2d.text.drawing.style.letterSpacing.change.font desc: Set letter spacing and word spacing to font dependent value and verify it works after font change. code: | diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/websocket.https.window.js b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/websocket.https.window.js new file mode 100644 index 00000000000..7d0dd95d84b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/credentialless/websocket.https.window.js @@ -0,0 +1,77 @@ +// META: TIMEOUT=long +// META: script=/common/get-host-info.sub.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js + +promise_test_parallel(async test => { + const same_origin = get_host_info().HTTPS_ORIGIN; + const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN; + const cookie_key = "coep_credentialless_websocket"; + const cookie_same_origin = "same_origin"; + const cookie_cross_origin = "cross_origin"; + + await Promise.all([ + setCookie(same_origin, cookie_key, cookie_same_origin + + cookie_same_site_none), + setCookie(cross_origin, cookie_key, cookie_cross_origin + + cookie_same_site_none), + ]); + + // One window with COEP:none. (control) + const w_control_token = token(); + const w_control_url = same_origin + executor_path + + coep_none + `&uuid=${w_control_token}` + const w_control = window.open(w_control_url); + add_completion_callback(() => w_control.close()); + + // One window with COEP:credentialless. (experiment) + const w_credentialless_token = token(); + const w_credentialless_url = same_origin + executor_path + + coep_credentialless + `&uuid=${w_credentialless_token}`; + const w_credentialless = window.open(w_credentialless_url); + add_completion_callback(() => w_credentialless.close()); + + let WebSocketTest = function( + description, origin, + expected_cookies_control, + expected_cookies_credentialless) + { + promise_test_parallel(async test => { + const token_1 = token(); + const token_2 = token(); + + const origin_for_websocket = origin.replace("https", "wss"); + + send(w_control_token, ` + var ws = new WebSocket("${showRequestHeaders(origin_for_websocket, token_1)}"); + `); + + send(w_credentialless_token, ` + var ws = new WebSocket("${showRequestHeaders(origin_for_websocket, token_2)}"); + `); + + const headers_control = JSON.parse(await receive(token_1)); + const headers_credentialless = JSON.parse(await receive(token_2)); + + assert_equals(parseCookies(headers_control)[cookie_key], + expected_cookies_control, + "coep:none => "); + assert_equals(parseCookies(headers_credentialless)[cookie_key], + expected_cookies_credentialless, + "coep:credentialless => "); + }, `WebSocket ${description}`) + }; + + // Same-origin request always contains Cookies: + WebSocketTest("same-origin", + same_origin, + cookie_same_origin, + cookie_same_origin); + + // Cross-origin request also always contains Cookies: + WebSocketTest("cross-origin", + cross_origin, + cookie_cross_origin, + cookie_cross_origin); +}, "Main"); diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/reporting/resources/reporting-common.js b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/reporting/resources/reporting-common.js index 19f6410cbf8..70bb4897f50 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/reporting/resources/reporting-common.js +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/reporting/resources/reporting-common.js @@ -353,14 +353,31 @@ const receiveReport = async function(uuid, type) { } } -// Build a set of 'Cross-Origin-Opener-Policy' and -// 'Cross-Origin-Opener-Policy-Report-Only' headers. const coopHeaders = function (uuid) { + // Use a custom function instead of convertToWPTHeaderPipe(), to avoid + // encoding double quotes as %22, which messes with the reporting endpoint + // registration. + let getHeader = (uuid, coop_value, is_report_only) => { + const header_name = + is_report_only ? + "Cross-Origin-Opener-Policy-Report-Only": + "Cross-Origin-Opener-Policy"; + return `|header(${header_name},${coop_value}%3Breport-to="${uuid}")`; + } + return { - coopSameOriginHeader: `|header(Cross-Origin-Opener-Policy,same-origin%3Breport-to="${uuid}")`, - coopSameOriginAllowPopupsHeader: `|header(Cross-Origin-Opener-Policy,same-origin-allow-popups%3Breport-to="${uuid}")`, - coopReportOnlySameOriginHeader: `|header(Cross-Origin-Opener-Policy-Report-Only,same-origin%3Breport-to="${uuid}")`, - coopReportOnlySameOriginAllowPopupsHeader: `|header(Cross-Origin-Opener-Policy-Report-Only,same-origin-allow-popups%3Breport-to="${uuid}")` + coopSameOriginHeader: + getHeader(uuid, "same-origin", is_report_only = false), + coopSameOriginAllowPopupsHeader: + getHeader(uuid, "same-origin-allow-popups", is_report_only = false), + coopRestrictPropertiesHeader: + getHeader(uuid, "restrict-properties", is_report_only = false), + coopReportOnlySameOriginHeader: + getHeader(uuid, "same-origin", is_report_only = true), + coopReportOnlySameOriginAllowPopupsHeader: + getHeader(uuid, "same-origin-allow-popups", is_report_only = true), + coopReportOnlyRestrictPropertiesHeader: + getHeader(uuid, "restrict-properties", is_report_only = true), }; } diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/reporting/resources/test-access-property.js b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/reporting/resources/test-access-property.js index fe01e9128c5..a405202431e 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/reporting/resources/test-access-property.js +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/reporting/resources/test-access-property.js @@ -7,7 +7,12 @@ const origin = [ ]; let escapeComma = url => url.replace(/,/g, '\\,'); -let testAccessProperty = (property, op, expectReport = true) => { +let testAccessProperty = ( + property, + op, + expectReport = true, + use_restrict_properties = false, +) => { origin.forEach(([origin_name, origin]) => { promise_test(async t => { const this_window_token = token(); @@ -21,9 +26,12 @@ let testAccessProperty = (property, op, expectReport = true) => { const openee_token = token(); const openee_report_token = token(); const openee_report_to = reportToHeaders(openee_report_token); + const coop_ro_header = + use_restrict_properties + ? openee_report_to.coopReportOnlyRestrictPropertiesHeader + : openee_report_to.coopReportOnlySameOriginHeader; const openee_url = origin + executor_path + openee_report_to.header + - openee_report_to.coopReportOnlySameOriginHeader + coep_header + - `&uuid=${openee_token}`; + coop_ro_header + coep_header + `&uuid=${openee_token}`; t.add_cleanup(() => { send(opener_token, "window.close()") diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/access-reporting-closed.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/access-reporting-closed.https.html new file mode 100644 index 00000000000..1c315b35d7f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/access-reporting-closed.https.html @@ -0,0 +1,19 @@ +<!doctype html> +<title> Check openee.closed access is allowed for COOP: restrict-properties</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/common/get-host-info.sub.js></script> +<script src="/common/utils.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/html/cross-origin-opener-policy/reporting/resources/reporting-common.js"></script> +<script src="/html/cross-origin-opener-policy/reporting/resources/test-access-property.js"></script> +<script> + +testAccessProperty( + "closed", + w => w.closed, + expectReport = false, + use_restrict_properties = true +); + +</script> diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/access-reporting-openee-rp-ro.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/access-reporting-openee-rp-ro.https.html new file mode 100644 index 00000000000..7a96f4f5762 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/access-reporting-openee-rp-ro.https.html @@ -0,0 +1,62 @@ +<!doctype html> +<title> + COOP reports are sent to the openee when the openee used COOP-RO: + restrict-properties and its same-origin opener tries to access it. +</title> +<meta name=timeout content=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/common/get-host-info.sub.js></script> +<script src="/common/utils.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/html/cross-origin-opener-policy/reporting/resources/reporting-common.js"></script> +<script src="/html/cross-origin-opener-policy/reporting/resources/try-access.js"></script> +<script> + +const directory = "/html/cross-origin-opener-policy"; +const same_origin = get_host_info().HTTPS_ORIGIN; + +promise_test(async t => { + const report_token = token(); + const openee_token = token(); + const opener_token = token(); // The current test window. + + const opener_url = location.href; + + const reportTo = reportToHeaders(report_token); + const openee_url = same_origin + executor_path + reportTo.header + + reportTo.coopReportOnlyRestrictPropertiesHeader + + `&uuid=${openee_token}`; + + const openee = window.open(openee_url); + t.add_cleanup(() => send(openee_token, "window.close()")) + + // 1. Make sure the new document to be loaded. + send(openee_token, ` + send("${opener_token}", "Ready"); + `); + let reply = await receive(opener_token); + assert_equals(reply, "Ready"); + + // 2. Try to access the openee. A report is sent, because of COOP-RO: + // restrict-properties. + tryAccess(openee); + + // 3. Check a report is sent to the openee. + let report = + await receiveReport(report_token, "access-to-coop-page-from-opener"); + assert_equals(report.type, "coop"); + assert_equals(report.url, openee_url.replace(/"/g, '%22')); + assert_equals(report.body.disposition, "reporting"); + assert_equals(report.body.effectivePolicy, "restrict-properties"); + assert_equals(report.body.property, "blur"); + assert_source_location_missing(report); + assert_equals(report.body.openerURL, opener_url); + assert_equals(report.body.openeeURL, undefined); + assert_equals(report.body.otherDocumentURL, undefined); + assert_equals(report.body.referrer, opener_url); + assert_equals(report.body.initialPopupURL, undefined); +}, "access-reporting-openee-rp-ro"); + +</script> + diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/access-reporting-opener-rp-ro.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/access-reporting-opener-rp-ro.https.html new file mode 100644 index 00000000000..9e1e85b16a5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/access-reporting-opener-rp-ro.https.html @@ -0,0 +1,71 @@ +<!doctype html> +<title> + COOP reports are sent to the opener when the opener used COOP-RO: + restrict-properties and its same-origin openee tries to access it. +</title> +<meta name=timeout content=long> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/common/get-host-info.sub.js></script> +<script src="/common/utils.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/html/cross-origin-opener-policy/resources/common.js"></script> +<script src="/html/cross-origin-opener-policy/reporting/resources/reporting-common.js"></script> +<script src="/html/cross-origin-opener-policy/reporting/resources/try-access.js"></script> +<script> + +const directory = "/html/cross-origin-opener-policy"; +const same_origin = get_host_info().HTTPS_ORIGIN; + +promise_test(async t => { + // The test window. + const this_window_token = token(); + + // The "opener" window. This has COOP and a reporter. + const opener_report_token= token(); + const opener_token = token(); + const opener_reportTo = reportToHeaders(opener_report_token); + const opener_url = same_origin + executor_path + opener_reportTo.header + + opener_reportTo.coopReportOnlyRestrictPropertiesHeader + + `&uuid=${opener_token}`; + + // The "openee" window. This is same origin with the "opener". + const openee_report_token= token(); + const openee_token = token(); + const openee_url = same_origin + executor_path + `&uuid=${openee_token}`; + + // 1. Create the opener window. + let opener_window_proxy = window.open(opener_url); + t.add_cleanup(() => send(opener_token, "window.close()")); + + // 2. The opener opens its openee. + send(opener_token, ` + openee = window.open("${openee_url}"); + send("${this_window_token}", "ACK 1"); + `); + assert_equals("ACK 1", await receive(this_window_token)); + t.add_cleanup(() => send(openee_token, "window.close()")); + + // 3. The openee tries to access its opener. + send(openee_token, addScriptAndTriggerOnload( + directory + "/reporting/resources/try-access.js", + "tryAccess(opener);") + ); + + // 4. Check a report sent to the opener. + let report = + await receiveReport(opener_report_token, "access-to-coop-page-from-openee"); + assert_equals(report.type, "coop"); + assert_equals(report.url, opener_url.replace(/"/g, '%22')); + assert_equals(report.body.disposition, "reporting"); + assert_equals(report.body.effectivePolicy, "restrict-properties"); + assert_equals(report.body.property, "blur"); + assert_source_location_missing(report); + assert_equals(report.body.openerURL, undefined); + assert_equals(report.body.openeeURL, openee_url); + assert_equals(report.body.otherDocumentURL, undefined); + assert_equals(report.body.referrer, undefined); + assert_equals(report.body.initialPopupURL, openee_url); +}, "access-reporting-opener-rp-ro"); + +</script> diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/access-reporting-post-message.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/access-reporting-post-message.https.html new file mode 100644 index 00000000000..4c8e96f5793 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/access-reporting-post-message.https.html @@ -0,0 +1,26 @@ +<!doctype html> +<title> Check openee.postMessage() access is allowed for COOP: restrict-properties</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/common/get-host-info.sub.js></script> +<script src="/common/utils.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/html/cross-origin-opener-policy/reporting/resources/reporting-common.js"></script> +<script src="/html/cross-origin-opener-policy/reporting/resources/test-access-property.js"></script> +<script> + +testAccessProperty( + "postMessage single arg", + w => w.postMessage(""), + expectReport = false, + use_restrict_properties = true +); + +testAccessProperty( + "postMessage double arg", + w => w.postMessage("", ""), + expectReport = false, + use_restrict_properties = true +); + +</script> diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-from-rp-ro.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-from-rp-ro.https.html new file mode 100644 index 00000000000..60322bffe7a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-from-rp-ro.https.html @@ -0,0 +1,83 @@ +<!doctype html> +<meta name=timeout content=long> +<title>Opening a restrict-properties</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="/common/utils.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/html/cross-origin-opener-policy/resources/common.js"></script> +<script + src="/html/cross-origin-opener-policy/reporting/resources/reporting-common.js?pipe=sub&report_id=4f545c5dbcce012cd30af173b08dcdfb&report_only_id=c265b07fbb3bffa2cd2a5179d686ced2"></script> + +<script> + +let tests = [ + // popup origin, popup COOP, popup COEP, popup COOP report-only, popup COEP report-only, expected reports + + // Open a same-origin popup with COOP unsafe-none, which mismatches with the + // current document (opener) COOP report-only (restrict-properties) values. + [ + SAME_ORIGIN, + "unsafe-none", + "", + "", + "", + [ + { + "endpoint": reportOnlyEndpoint, + "report": { + "body": { + "disposition": "reporting", + "effectivePolicy": "restrict-properties", + "nextResponseURL": /uuid=EXECUTOR_UUID$/, // next document URL + "type": "navigation-from-response" + }, + "url": `${location.href}`, + "type": "coop" + } + } + ] + ], + + // Open a cross-origin popup with COOP unsafe-none, which mismatches with the + // current document (opener) COOP report-only (restrict-properties) values. + [ + CROSS_ORIGIN, + "unsafe-none", + "", + "", + "", + [ + { + "endpoint": reportOnlyEndpoint, + "report": { + "body": { + "disposition": "reporting", + "effectivePolicy": "restrict-properties", + "nextResponseURL": /uuid=EXECUTOR_UUID$/, // next document URL + "type": "navigation-from-response" + }, + "url": `${location.href}`, + "type": "coop" + } + } + ] + ], + + // Open a same-origin popup with COOP restrict-properties, which matches with + // the current document (opener) COOP report-only (restrict-properties) value. + [ + SAME_ORIGIN, + "restrict-properties", + "", + "", + "", + [] + ], +]; + +runNavigationReportingTests(document.title, tests); + +</script> + diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-from-rp-ro.https.html.sub.headers b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-from-rp-ro.https.html.sub.headers new file mode 100644 index 00000000000..424ad3e8de0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-from-rp-ro.https.html.sub.headers @@ -0,0 +1,2 @@ +Cross-Origin-Opener-Policy-Report-Only: restrict-properties; report-to="coop-report-only-endpoint" +Reporting-Endpoints: coop-report-endpoint="https://{{host}}:{{ports[https][0]}}/reporting/resources/report.py?reportID=4f545c5dbcce012cd30af173b08dcdfb", coop-report-only-endpoint="https://{{host}}:{{ports[https][0]}}/reporting/resources/report.py?reportID=c265b07fbb3bffa2cd2a5179d686ced2" diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-from-rp.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-from-rp.https.html new file mode 100644 index 00000000000..5deb115d94e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-from-rp.https.html @@ -0,0 +1,83 @@ +<!doctype html> +<meta name=timeout content=long> +<title>Opening a restrict-properties</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="/common/utils.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/html/cross-origin-opener-policy/resources/common.js"></script> +<script + src="/html/cross-origin-opener-policy/reporting/resources/reporting-common.js?pipe=sub&report_id=c265b07fbb3bffa2cd2a5179d686ced2&report_only_id=b4ea2bc3c537541b4fd408dc8f2b5c39"></script> + +<script> + +let tests = [ + // popup origin, popup COOP, popup COEP, popup COOP report-only, popup COEP report-only, expected reports + + // Open a same-origin popup with COOP unsafe-none, which mismatches + // with the current document (opener) COOP (restrict-properties) values. + [ + SAME_ORIGIN, + "unsafe-none", + "", + "", + "", + [ + { + "endpoint": reportEndpoint, + "report": { + "body": { + "disposition": "enforce", + "effectivePolicy": "restrict-properties", + "nextResponseURL": /uuid=EXECUTOR_UUID$/, // next document URL + "type": "navigation-from-response" + }, + "url": `${location.href}`, + "type": "coop" + } + } + ] + ], + + // Open a cross-origin popup with COOP unsafe-none, which mismatches + // with the current document (opener) COOP (restrict-properties) values. + [ + CROSS_ORIGIN, + "unsafe-none", + "", + "", + "", + [ + { + "endpoint": reportEndpoint, + "report": { + "body": { + "disposition": "enforce", + "effectivePolicy": "restrict-properties", + "nextResponseURL": /uuid=EXECUTOR_UUID$/, // next document URL + "type": "navigation-from-response" + }, + "url": `${location.href}`, + "type": "coop" + } + } + ] + ], + + // Open a same-origin popup with COOP restrict-properties, which matches with + // the current document (opener) COOP (restrict-properties) value. + [ + SAME_ORIGIN, + "restrict-properties", + "", + "", + "", + [] + ], +]; + +runNavigationReportingTests(document.title, tests); + +</script> + diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-from-rp.https.html.sub.headers b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-from-rp.https.html.sub.headers new file mode 100644 index 00000000000..6339ea34c70 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-from-rp.https.html.sub.headers @@ -0,0 +1,2 @@ +Cross-Origin-Opener-Policy: restrict-properties; report-to="coop-report-endpoint" +Reporting-Endpoints: coop-report-endpoint="https://{{host}}:{{ports[https][0]}}/reporting/resources/report.py?reportID=d9fe7e0e1a72f4ff2c4ea6d9dd44b5f1", coop-report-only-endpoint="https://{{host}}:{{ports[https][0]}}/reporting/resources/report.py?reportID=b4ea2bc3c537541b4fd408dc8f2b5c39" diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-to-rp-ro.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-to-rp-ro.https.html new file mode 100644 index 00000000000..cf1385e7663 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-to-rp-ro.https.html @@ -0,0 +1,73 @@ +<!doctype html> +<meta name=timeout content=long> +<title>reporting same origin with report-to</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="/common/utils.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/html/cross-origin-opener-policy/resources/common.js"></script> +<script src="/html/cross-origin-opener-policy/reporting/resources/reporting-common.js"></script> + +<script> + +let tests = [ + // popup origin, popup COOP, popup COEP, popup COOP report-only, popup COEP report-only, expected reports + + // Open a same-origin popup with COOP report-only restrict-properties, which + // mismatches with the current document (opener) COOP (unsafe-none). + [ + SAME_ORIGIN, + "", + "", + `restrict-properties; report-to="${popupReportOnlyEndpoint.name}"`, + "", + [ + { + "endpoint": popupReportOnlyEndpoint, + "report": { + "body": { + "disposition": "reporting", + "effectivePolicy": "restrict-properties", + "previousResponseURL": `${location.href}`, + "referrer": `${location.origin}/`, + "type": "navigation-to-response" + }, + "url": /uuid=EXECUTOR_UUID$/, + "type": "coop" + } + } + ] + ], + + // Open a cross-origin popup with COOP report-only restrict-properties, which + // mismatches with the current document (opener) COOP (unsafe-none). + [ + CROSS_ORIGIN, + "", + "", + `restrict-properties; report-to="${popupReportOnlyEndpoint.name}"`, + "", + [ + { + "endpoint": popupReportOnlyEndpoint, + "report": { + "body": { + "disposition": "reporting", + "effectivePolicy": "restrict-properties", + "previousResponseURL": `${location.href}`, + "referrer": `${location.origin}/`, + "type": "navigation-to-response" + }, + "url": /uuid=EXECUTOR_UUID$/, + "type": "coop" + } + } + ] + ], +]; + +runNavigationReportingTests(document.title, tests); + +</script> + diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-to-rp-ro.https.html.headers b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-to-rp-ro.https.html.headers new file mode 100644 index 00000000000..16903320bb5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-to-rp-ro.https.html.headers @@ -0,0 +1,2 @@ +Cross-Origin-Opener-Policy: unsafe-none +Referrer-Policy: origin diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-to-rp.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-to-rp.https.html new file mode 100644 index 00000000000..9ff374c1c78 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-to-rp.https.html @@ -0,0 +1,73 @@ +<!doctype html> +<meta name=timeout content=long> +<title>reporting same origin with report-to</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="/common/utils.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/html/cross-origin-opener-policy/resources/common.js"></script> +<script src="/html/cross-origin-opener-policy/reporting/resources/reporting-common.js"></script> + +<script> + +let tests = [ + // popup origin, popup COOP, popup COEP, popup COOP report-only, popup COEP report-only, expected reports + + // Open a same-origin popup with COOP report-only restrict-properties, which + // mismatches with the current document (opener) COOP (unsafe-none). + [ + SAME_ORIGIN, + `restrict-properties; report-to="${popupReportEndpoint.name}"`, + "", + "", + "", + [ + { + "endpoint": popupReportEndpoint, + "report": { + "body": { + "disposition": "enforce", + "effectivePolicy": "restrict-properties", + "previousResponseURL": `${location.href}`, + "referrer": `${location.origin}/`, + "type": "navigation-to-response" + }, + "url": /uuid=EXECUTOR_UUID$/, + "type": "coop" + } + } + ] + ], + + // Open a cross-origin popup with COOP report-only restrict-properties, which + // mismatches with the current document (opener) COOP (unsafe-none). + [ + CROSS_ORIGIN, + `restrict-properties; report-to="${popupReportEndpoint.name}"`, + "", + "", + "", + [ + { + "endpoint": popupReportEndpoint, + "report": { + "body": { + "disposition": "enforce", + "effectivePolicy": "restrict-properties", + "previousResponseURL": `${location.href}`, + "referrer": `${location.origin}/`, + "type": "navigation-to-response" + }, + "url": /uuid=EXECUTOR_UUID$/, + "type": "coop" + } + } + ] + ], +]; + +runNavigationReportingTests(document.title, tests); + +</script> + diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-to-rp.https.html.headers b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-to-rp.https.html.headers new file mode 100644 index 00000000000..16903320bb5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/reporting-to-rp.https.html.headers @@ -0,0 +1,2 @@ +Cross-Origin-Opener-Policy: unsafe-none +Referrer-Policy: origin diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/lists/dir-type-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/lists/dir-type-ref.html new file mode 100644 index 00000000000..710b39ceca5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/lists/dir-type-ref.html @@ -0,0 +1,9 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Test reference</title> +<dir> + <li>A +</dir> +<dir> + <li>B +</dir> diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/lists/dir-type.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/lists/dir-type.html new file mode 100644 index 00000000000..d1f0ae3fe3f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/lists/dir-type.html @@ -0,0 +1,13 @@ +<!doctype html> +<meta charset="utf-8"> +<title><dir> doesn't map the type and start attributes to CSS</title> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1831863"> +<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez"> +<link rel="author" href="https://mozilla.com" title="Mozilla"> +<link rel="match" href="dir-type-ref.html"> +<dir type="square"> + <li>A +</dir> +<dir type="decimal" start="5"> + <li>B +</dir> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/image-compositing-change.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/image-compositing-change.html index 592720a82a2..658c2ad39ea 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/image-compositing-change.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/image-compositing-change.html @@ -2,6 +2,7 @@ <html class="reftest-wait"> <title>Composited images correctly re-raster when the image and bounds change</title> <meta charset="utf-8"> +<meta name=fuzzy content="maxDifference=150;totalPixels=296"> <link rel="match" href="image-compositing-change-ref.html"/> <link rel="help" href="https://html.spec.whatwg.org/multipage/#the-img-element"> <style> diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/child-sequential-focus.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/child-sequential-focus.html index 1b4dd302300..bc787202cf5 100644 --- a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/child-sequential-focus.html +++ b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/child-sequential-focus.html @@ -4,9 +4,9 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<dialog autofocus id=autofocusdialog data-description="dialog element with autofocus should get initial focus."> +<dialog autofocus id=autofocusdialog data-description="dialog element with autofocus should get initial focus." class=target> <button>focusable button</button> - <button autofocus class=target>autofocusable button</button> + <button autofocus>autofocusable button</button> </dialog> <dialog id=keyboardfocusdialog data-description="Only keyboard-focusable elements should get dialog initial focus."> @@ -37,21 +37,23 @@ <script> document.querySelectorAll('dialog').forEach(dialog => { test(t => { - const target = dialog.querySelector('.target'); - t.add_cleanup + let target = dialog.querySelector('.target'); + if (dialog.classList.contains('target')) { + target = dialog; + } t.add_cleanup(() => { if (dialog.open) dialog.close(); }); dialog.showModal(); - assert_equals(document.activeElement, - dialog.hasAttribute('autofocus') ? dialog : target, + assert_equals(document.activeElement, target, 'showModal: the target element did not receive initial focus.'); dialog.close(); dialog.show(); - assert_equals(document.activeElement, target, 'show: the target element did not receive initial focus.'); + assert_equals(document.activeElement, target, + 'show: the target element did not receive initial focus.'); dialog.close(); }, dialog.dataset.description); }); diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/focus-after-close.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/focus-after-close.html index d66d45527a7..93baf65cf60 100644 --- a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/focus-after-close.html +++ b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/focus-after-close.html @@ -167,7 +167,7 @@ async function test_move_focus_dont_scroll_viewport(showModal) { document.body.appendChild(outViewPortButton); await new Promise(resolve => { - document.addEventListener("scroll", () => step_timeout(resolve, 0)); + document.addEventListener("scroll", resolve, { once: true }); outViewPortButton.focus(); }); diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-anchor-transition.tentative.html b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-anchor-transition.tentative.html new file mode 100644 index 00000000000..ae2a3a8e415 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-anchor-transition.tentative.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Tests transitioning display property of anchored popover</title> +<link rel="help" href="https://html.spec.whatwg.org/multipage/popover.html"> +<link rel="help" href="https://github.com/whatwg/html/pull/9144"> +<link rel="author" href="mailto:xiaochengh@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<style> +body { + margin: 0; +} + +#target { + transition: display 2s; +} +</style> + +<div popover anchor id="target"> + Popover +</div> + +<script> +test(() => { + target.showPopover(); + const xBefore = target.offsetLeft; + const yBefore = target.offsetTop; + + target.hidePopover(); + assert_equals(target.offsetLeft, xBefore, 'Should not shift in x axis'); + assert_equals(target.offsetTop, yBefore, 'Should not shift in y axis') +}, 'Transitioning display property of an anchored popover should not cause a position shift'); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-dialog-initial-focus.html b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-dialog-initial-focus.html deleted file mode 100644 index 47b2252bf5f..00000000000 --- a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-dialog-initial-focus.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html> -<link rel=author href="mailto:jarhar@chromium.org"> -<link rel=help href="http://crbug.com/1430405"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> - -<dialog id=dialog popover=auto> - <button id=button>button</button> -</dialog> - -<dialog id=dialog2 popover=auto autofocus> - <button>button</button> -</dialog> - -<script> -test(() => { - dialog.showPopover(); - assert_equals(document.activeElement, button); -}, 'Opening dialogs as popovers should use dialog initial focus algorithm.'); - -test(() => { - dialog2.showPopover(); - assert_equals(document.activeElement, dialog2); -}, 'Opening dialogs as popovers which have autofocus should focus the dialog.'); -</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-focus-child-dialog.html b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-focus-child-dialog.html deleted file mode 100644 index 051eef14a7c..00000000000 --- a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-focus-child-dialog.html +++ /dev/null @@ -1,45 +0,0 @@ -<!DOCTYPE html> -<link rel=author href="mailto:jarhar@chromium.org"> -<link rel=help href="https://chromium-review.googlesource.com/c/chromium/src/+/4021969"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> - -<div id=popover1 popover> - <dialog id=childdialog autofocus> - <button autofocus>hello world</button> - </dialog> -</div> - -<div id=popover2 popover=manual> - <div id=childpopover popover=manual autofocus> - <button autofocus>hello world</button> - </div> -</div> - -<script> -test(t => { - t.add_cleanup(() => childdialog.close()); - t.add_cleanup(() => popover1.hidePopover()); - - childdialog.showModal(); - document.activeElement.blur(); - popover1.showPopover(); - - assert_true(popover1.matches(':popover-open'), 'The popover should be open.'); - assert_true(childdialog.hasAttribute('open'), 'The dialog should be open.'); - assert_equals(document.activeElement, document.body, 'Nothing should have gotten focused.'); -}, 'Popovers should not initially focus child dialog elements.'); - -test(t => { - t.add_cleanup(() => childpopover.hidePopover()); - t.add_cleanup(() => popover2.hidePopover()); - - childpopover.showPopover(); - document.activeElement.blur(); - popover2.showPopover(); - - assert_true(popover2.matches(':popover-open'), 'The parent popover should be open.'); - assert_true(childpopover.matches(':popover-open'), 'The child popover should be open.'); - assert_equals(document.activeElement, document.body, 'Nothing should have gotten focused.'); -}, 'Popovers should not initially focus child popover elements.'); -</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-focus.html b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-focus.html index df7c046e003..98bb065de7b 100644 --- a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-focus.html +++ b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-focus.html @@ -49,6 +49,14 @@ <button autofocus tabindex="0">second autofocus button</button> </div> +<dialog popover=auto data-test='Opening dialogs as popovers should use dialog initial focus algorithm.'> + <button class=should-be-focused>button</button> +</dialog> + +<dialog popover=auto autofocus class=should-be-focused data-test='Opening dialogs as popovers which have autofocus should focus the dialog.'> + <button>button</button> +</dialog> + <style> [popover] { border: 2px solid black; @@ -178,7 +186,7 @@ assert_true(popover.matches(':popover-open')); assert_equals(document.activeElement, expectedFocusedElement, `${testName} activated by button.click()`); popover.focus(); - assert_equals(document.activeElement, popover.hasAttribute('tabindex') ? popover : expectedFocusedElement, `${testName} directly focus with popover.focus()`); + assert_equals(document.activeElement, popover.hasAttribute('tabindex') || popover.tagName === 'DIALOG' ? popover : expectedFocusedElement, `${testName} directly focus with popover.focus()`); button.click(); // Button is set to toggle the popover assert_false(popover.matches(':popover-open')); assert_equals(document.activeElement, priorFocus, 'prior element should get focus on button-toggled hide'); diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-hide-crash.html b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-hide-crash.html deleted file mode 100644 index 3e0c694976c..00000000000 --- a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-hide-crash.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html class='reftest-wait'> -<meta charset='utf-8' /> -<title>Popover hide crash test</title> -<link rel='author' href="mailto:cathiechen@iglaia.com"> -<link rel=help href="https://github.com/whatwg/html/issues/9197"> - -<p>This test passes if it does not crash.</p> -<div id='popover1' popover='auto'> - <div id='popover2' popover='auto'></div> - <div id='popover3' popover='auto'></div> -</div> - -<script> -var showedPopover2 = false; -popover1.showPopover(); -popover3.showPopover(); -popover3.addEventListener('beforetoggle', (e) => { - if (e.newState != 'open' && !showedPopover2) { - showedPopover2 = true; - popover2.showPopover(); - } -}); -popover1.hidePopover(); -</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-light-dismiss.html b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-light-dismiss.html index 4411d0b7e38..d7d1edd3a4b 100644 --- a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-light-dismiss.html +++ b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-light-dismiss.html @@ -9,6 +9,7 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-actions.js"></script> <script src="/resources/testdriver-vendor.js"></script> +<script src="/resources/declarative-shadow-dom-polyfill.js"></script> <script src="resources/popover-utils.js"></script> <button id=b1t popovertarget='p1'>Popover 1</button> @@ -340,6 +341,7 @@ </template> </my-element> <script> + polyfill_declarative_shadow_dom(document.querySelector('#myElement')); const button7 = document.querySelector('#myElement').shadowRoot.querySelector('#b7'); const popover7 = document.querySelector('#myElement').shadowRoot.querySelector('#p7'); const inside7 = document.querySelector('#myElement').shadowRoot.querySelector('#inside7'); diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-open-overflow-display.html b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-open-overflow-display.tentative.html index 3d4d8330638..3d4d8330638 100644 --- a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-open-overflow-display.html +++ b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-open-overflow-display.tentative.html diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/resources/popover-utils.js b/tests/wpt/web-platform-tests/html/semantics/popovers/resources/popover-utils.js index 39de6aa99b1..aa69b7d41ae 100644 --- a/tests/wpt/web-platform-tests/html/semantics/popovers/resources/popover-utils.js +++ b/tests/wpt/web-platform-tests/html/semantics/popovers/resources/popover-utils.js @@ -47,6 +47,22 @@ async function sendEnter() { function isElementVisible(el) { return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length); } +function isTopLayer(el) { + // A bit of a hack. Just test a few properties of the ::backdrop pseudo + // element that change when in the top layer. + const properties = ['right','background']; + const testEl = document.createElement('div'); + document.body.appendChild(testEl); + const computedStyle = getComputedStyle(testEl, '::backdrop'); + const nonTopLayerValues = properties.map(p => computedStyle[p]); + testEl.remove(); + for(let i=0;i<properties.length;++i) { + if (getComputedStyle(el,'::backdrop')[properties[i]] !== nonTopLayerValues[i]) { + return true; + } + } + return false; +} async function finishAnimations(popover) { popover.getAnimations({subtree: true}).forEach(animation => animation.finish()); await waitForRender(); diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/wheelScroll.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/wheelScroll.html.ini index cfa28e9b46c..5632dcf1129 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/wheelScroll.html.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/wheelScroll.html.ini @@ -1,3 +1,3 @@ [wheelScroll.html] expected: - if product == "epiphany" or product == "safari": ERROR + if product == "epiphany": ERROR diff --git a/tests/wpt/web-platform-tests/largest-contentful-paint/image-src-change.html b/tests/wpt/web-platform-tests/largest-contentful-paint/image-src-change.html index e0701a2169b..33213a570ed 100644 --- a/tests/wpt/web-platform-tests/largest-contentful-paint/image-src-change.html +++ b/tests/wpt/web-platform-tests/largest-contentful-paint/image-src-change.html @@ -1,37 +1,75 @@ <!DOCTYPE HTML> <meta charset=utf-8> <title>Largest Contentful Paint: src change triggers new entry.</title> + <body> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources/largest-contentful-paint-helpers.js"></script> -<img src='/images/black-rectangle.png' id='image_id'/> -<script> - setup({"hide_test_state": true}); - async_test(function (t) { - assert_implements(window.LargestContentfulPaint, "LargestContentfulPaint is not implemented"); - let beforeLoad = performance.now(); - let firstCallback = true; - const observer = new PerformanceObserver( - t.step_func(function(entryList) { - assert_equals(entryList.getEntries().length, 1); - const entry = entryList.getEntries()[0]; - const url = window.location.origin + (firstCallback ? '/images/black-rectangle.png' : '/images/blue.png'); - // black-rectangle.png is 100 x 50. blue.png is 133 by 106. - const size = firstCallback ? 100 * 50 : 133 * 106; - checkImage(entry, url, 'image_id', size, beforeLoad); - if (firstCallback) { - // Set the src to trigger another entry. - const img = document.getElementById('image_id'); - img.src = '/images/blue.png'; - beforeLoad = performance.now(); - firstCallback =false; - } else { - t.done(); - } - }) - ); - observer.observe({type: 'largest-contentful-paint', buffered: true}); - }, 'Largest Contentful Paint: changing src causes a new entry to be dispatched.'); -</script> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/largest-contentful-paint-helpers.js"></script> + <img src='' id='image_id' /> + <script> + setup({ "hide_test_state": true }); + + let first_image_src = '/images/black-rectangle.png'; + let second_image_src = '/images/blue.png'; + let image_id = 'image_id'; + + // Add listener for load event that is fired when image is loaded. + const image_load_promise = image_element => { + return new Promise(resolve => { + image_element.addEventListener('load', resolve); + }); + } + + // Create a promise that resolves when an LCP is observed. + const lcp_observation_promise = image_src => { + return new Promise(resolve => { + new PerformanceObserver((entryList) => { + let lcpEntry = entryList.getEntries().find(e => e.url.includes(image_src)); + + if (lcpEntry) { + resolve(lcpEntry); + } + + }).observe({ type: 'largest-contentful-paint' }); + }); + } + + const loadImageAndGetLCPEntry = async image_src => { + let LCPObserverPromise = lcp_observation_promise(image_src); + + let image_element = document.getElementById(image_id); + + let promise = image_load_promise(image_element); + + image_element.src = image_src; + + await promise; + + return await LCPObserverPromise; + } + + promise_test(async t => { + + assert_implements(window.LargestContentfulPaint, "LargestContentfulPaint is not implemented"); + + + // Load first image. + let beforeLoad = performance.now(); + + let first_LCP = await loadImageAndGetLCPEntry(first_image_src); + + // Verify first LCP entry correctness. The black-rectangle.png is 100 x 50. + checkImage(first_LCP, window.location.origin + first_image_src, image_id, 100 * 50, beforeLoad); + + // Load second image. + beforeLoad = performance.now(); + + let second_LCP = await loadImageAndGetLCPEntry(second_image_src); + + // Verify second LCP entry correctness. The blue.png is 133 by 106. + checkImage(second_LCP, window.location.origin + second_image_src, image_id, 133 * 106, beforeLoad); + + }, 'Largest Contentful Paint: changing src causes a new entry to be dispatched.'); + </script> </body> diff --git a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-source-location-bound.html b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-source-location-bound.html deleted file mode 100644 index 8e8019104af..00000000000 --- a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-source-location-bound.html +++ /dev/null @@ -1,24 +0,0 @@ -<!DOCTYPE HTML> -<meta charset=utf-8> -<title>Long Animation Frame Timing: source location extraction</title> -<meta name="timeout" content="long"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources/utils.js"></script> - -<body> -<h1>Long Animation Frame: source location extraction</h1> -<div id="log"></div> -<script> - -promise_test(async t => { - const [entry, script] = await expect_long_frame_with_script(() => { - const object = {}; - requestAnimationFrame((function my_bound_function() { - busy_wait(); - }).bind(object)); - }, script => script.name === "FrameRequestCallback", t); - assert_true(script.sourceLocation.startsWith("my_bound_function")); -}, "Source location should be extracted from bound functions"); -</script> -</body> diff --git a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-source-location.html b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-source-location.html new file mode 100644 index 00000000000..ffda0002071 --- /dev/null +++ b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-source-location.html @@ -0,0 +1,43 @@ +<!DOCTYPE HTML> +<meta charset=utf-8> +<title>Long Animation Frame Timing: source location extraction</title> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/utils.js"></script> + +<body> +<h1>Long Animation Frame: source location extraction</h1> +<div id="log"></div> +<script> + +promise_test(async t => { + const [entry, script] = await expect_long_frame_with_script(() => { + requestAnimationFrame(function non_bound_function() { + busy_wait(); + }); + }, script => script.name === "FrameRequestCallback", t); + assert_true(script.sourceLocation?.startsWith("non_bound_function")); +}, "Source location should be extracted from non-bound functions"); + +promise_test(async t => { + const [entry, script] = await expect_long_frame_with_script(() => { + const object = {}; + requestAnimationFrame((function my_bound_function() { + busy_wait(); + }).bind(object)); + }, script => script.name === "FrameRequestCallback", t); + assert_true(script.sourceLocation?.startsWith("my_bound_function")); +}, "Source location should be extracted from bound functions"); + +promise_test(async t => { + const [entry, script] = await expect_long_frame_with_script(() => { + t.step_timeout(function my_timeout() { + busy_wait(); + }); + }, script => script.name === "TimerHandler:setTimeout" && script.sourceLocation, t ); + assert_true(script.sourceLocation.includes("testharness.js")); +}, "Source location should be extracted for setTimeout"); + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/resource-timing/interim-response-times.h2.html b/tests/wpt/web-platform-tests/resource-timing/interim-response-times.h2.html index 850ee7cb5f5..4b1ca93ff7b 100644 --- a/tests/wpt/web-platform-tests/resource-timing/interim-response-times.h2.html +++ b/tests/wpt/web-platform-tests/resource-timing/interim-response-times.h2.html @@ -2,6 +2,7 @@ <html> <head> <meta charset="utf-8" /> +<meta name="timeout" content="long"> <title>Resource Timing: PerformanceResourceTiming interim resource times</title> <link rel="author" title="Google" href="http://www.google.com/" /> <script src="/common/utils.js"></script> @@ -10,55 +11,64 @@ <script src="/resources/testharnessreport.js"></script> <script> const {REMOTE_HOST} = get_host_info(); - function interim_response_time_test({origin, tao, with103, expected}) { + function interim_response_time_test({origin, with100, with103}) { promise_test(async t => { - const delay = 100; + const delay = 500; const url = new URL('/resource-timing/resources/header-delay.h2.py', - origin == "same-origin" ? + origin == "same-origin" ? location.href : `${location.protocol}//${REMOTE_HOST}:${location.port}`); url.searchParams.set("delay", delay); - if (tao) + if (origin === "cross-origin-with-TAO") url.searchParams.set("tao", "*"); + if (with100) + url.searchParams.set("with100", "true"); if (with103) url.searchParams.set("with103", "true"); const response = await fetch(url.toString(), {mode: "cors"}); assert_equals(response.status, 200) await response.text(); const [entry] = performance.getEntriesByName(url.toString()); - if (expected) { - assert_greater_than(entry.firstInterimResponseStart, - entry.requestStart + delay * 2, - "firstInterimResponseStart"); - assert_greater_than(entry.responseStart, - entry.firstInterimResponseStart + delay, - "responseStart"); - } else { + if (origin === "cross-origin") { assert_equals(entry.firstInterimResponseStart, 0); + return; + } + let total_delay = entry.requestStart; + if (with100) { + total_delay += delay; + assert_greater_than(entry.firstInterimResponseStart, + total_delay, + "firstInterimResponseStart > 100 response"); } - assert_equals(entry.toJSON().firstInterimResponseStart, - entry.firstInterimResponseStart); - }, `Fetch from ${origin} ${with103 ? "with" : "without"} early hints, ${ - tao ? "with" : "without"} Timing-Allow-Origin should ${ - expected ? "expose" : "not expose"} interim response times`); - } - - interim_response_time_test( - {origin: "same-origin", tao: false, with103: true, expected: true}); + if (with103) { + total_delay += delay; + if (with100) { + assert_less_than_equal(entry.firstInterimResponseStart, + total_delay, "firstInterimResponseStart > 100 response"); + } else { + assert_greater_than(entry.firstInterimResponseStart, + delay, "firstInterimResponseStart > 100 response"); + } + } - // TAO should protect firstInterimResponseStart - interim_response_time_test( - {origin: "cross-origin", tao: true, with103: true, expected: true}); - interim_response_time_test( - {origin: "cross-origin", tao: false, with103: true, expected: false}); + total_delay += delay; + if (!with100 && !with103) + assert_equals(entry.firstInterimResponseStart, 0); - // Without early hints, firstInterimResponseStart should be 0 regalrdss of protections. - interim_response_time_test( - {origin: "same-origin", tao: false, with103: false, expected: false}); - interim_response_time_test( - {origin: "cross-origin", tao: true, with103: false, expected: false}); + assert_greater_than(entry.responseStart, total_delay, + "responseStart"); + }, `Fetch from ${origin} ${with103 ? "with" : "without"} early hints, ${ + with100 ? "with" : "without"} 100 response`); + } + for (const with103 of [true, false]) { + for (const with100 of [true, false]) { + for (origin of ['same-origin', 'cross-origin', 'cross-origin-with-TAO']) { + interim_response_time_test({with100, with103, origin}); + } + } + } </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/resource-timing/interim-response-times.html b/tests/wpt/web-platform-tests/resource-timing/interim-response-times.html index b922590d5d3..a4d03f599ee 100644 --- a/tests/wpt/web-platform-tests/resource-timing/interim-response-times.html +++ b/tests/wpt/web-platform-tests/resource-timing/interim-response-times.html @@ -2,6 +2,7 @@ <html> <head> <meta charset="utf-8" /> +<meta name="timeout" content="long"> <title>Resource Timing: PerformanceResourceTiming interim resource times</title> <link rel="author" title="Google" href="http://www.google.com/" /> <script src="/common/utils.js"></script> @@ -10,53 +11,62 @@ <script src="/resources/testharnessreport.js"></script> <script> const {REMOTE_ORIGIN} = get_host_info(); - function interim_response_time_test({origin, tao, with103, expected}) { + function interim_response_time_test({origin, with100, with103}) { promise_test(async t => { - const delay = 100; + const delay = 500; const url = new URL('/resource-timing/resources/header-delay.py', origin == "same-origin" ? location.href : REMOTE_ORIGIN); url.searchParams.set("delay", delay); - if (tao) + if (origin === "cross-origin-with-TAO") url.searchParams.set("tao", "*"); + if (with100) + url.searchParams.set("with100", "true"); if (with103) url.searchParams.set("with103", "true"); const response = await fetch(url.toString(), {mode: "cors"}); assert_equals(response.status, 200) await response.text(); const [entry] = performance.getEntriesByName(url.toString()); - if (expected) { - assert_greater_than(entry.firstInterimResponseStart, - entry.requestStart + delay * 2, - "firstInterimResponseStart"); - assert_greater_than(entry.responseStart, - entry.firstInterimResponseStart + delay, - "responseStart"); - } else { + if (origin === "cross-origin") { assert_equals(entry.firstInterimResponseStart, 0); + return; + } + let total_delay = entry.requestStart; + if (with100) { + total_delay += delay; + assert_greater_than(entry.firstInterimResponseStart, + total_delay, + "firstInterimResponseStart > 100 response"); } - assert_equals(entry.toJSON().firstInterimResponseStart, - entry.firstInterimResponseStart); - }, `Fetch from ${origin} ${with103 ? "with" : "without"} early hints, ${ - tao ? "with" : "without"} Timing-Allow-Origin should ${ - expected ? "expose" : "not expose"} interim response times`); - } - - interim_response_time_test( - {origin: "same-origin", tao: false, with103: true, expected: true}); + if (with103) { + total_delay += delay; + if (with100) { + assert_less_than_equal(entry.firstInterimResponseStart, + total_delay, "firstInterimResponseStart > 100 response"); + } else { + assert_greater_than(entry.firstInterimResponseStart, + delay, "firstInterimResponseStart > 100 response"); + } + } - // TAO should protect firstInterimResponseStart - interim_response_time_test( - {origin: "cross-origin", tao: true, with103: true, expected: true}); - interim_response_time_test( - {origin: "cross-origin", tao: false, with103: true, expected: false}); + total_delay += delay; + if (!with100 && !with103) + assert_equals(entry.firstInterimResponseStart, 0); - // Without early hints, firstInterimResponseStart should be 0 regalrdss of protections. - interim_response_time_test( - {origin: "same-origin", tao: false, with103: false, expected: false}); - interim_response_time_test( - {origin: "cross-origin", tao: true, with103: false, expected: false}); + assert_greater_than(entry.responseStart, total_delay, + "responseStart"); + }, `Fetch from ${origin} ${with103 ? "with" : "without"} early hints, ${ + with100 ? "with" : "without"} 100 response`); + } + for (const with103 of [true, false]) { + for (const with100 of [true, false]) { + for (origin of ['same-origin', 'cross-origin', 'cross-origin-with-TAO']) { + interim_response_time_test({with100, with103, origin}); + } + } + } </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/header-delay.h2.py b/tests/wpt/web-platform-tests/resource-timing/resources/header-delay.h2.py index be29e52b0e8..27b6fd5bfbb 100644 --- a/tests/wpt/web-platform-tests/resource-timing/resources/header-delay.h2.py +++ b/tests/wpt/web-platform-tests/resource-timing/resources/header-delay.h2.py @@ -2,14 +2,16 @@ from time import sleep def handle_headers(frame, request, response): delay = int(request.GET.first(b"delay")) / 1000 - sleep(delay) - response.writer.write_raw_header_frame(headers=[(b":status", b"100")], end_headers=True) - sleep(delay) - if b"with103" in request.GET: + if b"with100" in request.GET: + sleep(delay) response.writer.write_raw_header_frame(headers=[(b":status", b"103")], end_headers=True) + + if b"with103" in request.GET: sleep(delay) + response.writer.write_raw_header_frame(headers=[(b":status", b"103")], end_headers=True) + sleep(delay) response.status = 200 if b"tao" in request.GET: diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/header-delay.py b/tests/wpt/web-platform-tests/resource-timing/resources/header-delay.py index a47a63e9814..631f7855f86 100644 --- a/tests/wpt/web-platform-tests/resource-timing/resources/header-delay.py +++ b/tests/wpt/web-platform-tests/resource-timing/resources/header-delay.py @@ -5,16 +5,18 @@ def main(request, response): # TODO: make this exported from ResponseWriter handler = response.writer._handler - sleep(delay) - handler.send_response(100) - handler.end_headers() - sleep(delay) + if b"with100" in request.GET: + sleep(delay) + handler.send_response(100) + handler.end_headers() if b"with103" in request.GET: + sleep(delay) handler.send_response(103) handler.send_header("Link", "<resources/empty.js>;rel=preload;as=script") handler.end_headers() - sleep(delay) + + sleep(delay) handler.send_response(200) diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/merge-timeline-offset-keyframes.html b/tests/wpt/web-platform-tests/scroll-animations/css/merge-timeline-offset-keyframes.html index 3a766de0c85..c6d384fce54 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/css/merge-timeline-offset-keyframes.html +++ b/tests/wpt/web-platform-tests/scroll-animations/css/merge-timeline-offset-keyframes.html @@ -62,6 +62,7 @@ promise_test(async t => { target.classList.add('anim-1'); const anim = target.getAnimations()[0]; + await anim.ready; t.add_cleanup(() => { target.classList.remove('anim-1'); }); @@ -92,6 +93,8 @@ promise_test(async t => { target.classList.add('anim-2'); const anim = target.getAnimations()[0]; + await anim.ready; + t.add_cleanup(() => { target.classList.remove('anim-2'); }); diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/printing/scroll-timeline-default-print-ref.html b/tests/wpt/web-platform-tests/scroll-animations/css/printing/scroll-timeline-default-print-ref.html new file mode 100644 index 00000000000..6610f7a5a7e --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-animations/css/printing/scroll-timeline-default-print-ref.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<title>Reference for default scroll() timeline</title> +<style> + html { + min-height: 100%; + padding-bottom: 100px; + } + + #box { + width: 100px; + height: 100px; + background-color: green; + } + + * { + margin-top: 0px; + margin-bottom: 0px; + } +</style> + +<div id="box"></div> diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/printing/scroll-timeline-default-print.tentative.html b/tests/wpt/web-platform-tests/scroll-animations/css/printing/scroll-timeline-default-print.tentative.html index 975a59812e9..3f25cc93dba 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/css/printing/scroll-timeline-default-print.tentative.html +++ b/tests/wpt/web-platform-tests/scroll-animations/css/printing/scroll-timeline-default-print.tentative.html @@ -4,7 +4,7 @@ <link rel="help" href="https://drafts.csswg.org/scroll-animations-1/#scroll-notation"> <link rel="help" href="https://drafts.csswg.org/css-animations-2/#animation-timeline"> <meta name="assert" content="CSS animation correctly updates values when using the default scroll() timeline"> -<link rel="match" href="../scroll-timeline-default-ref.html"> +<link rel="match" href="scroll-timeline-default-print-ref.html"> <style> @keyframes update { @@ -25,12 +25,6 @@ animation-timeline: scroll(); } - #covered { - width: 100px; - height: 100px; - background-color: red; - } - * { margin-top: 0px; margin-bottom: 0px; @@ -38,7 +32,6 @@ </style> <div id="box"></div> -<div id="covered"></div> <script src="/web-animations/testcommon.js"></script> <script> document.documentElement.addEventListener('TestRendered', async () => { @@ -51,6 +44,10 @@ await waitForCompositorReady(); // Move the scroller to the halfway point. + // When printing, a timeline associated with the document's scrolling + // element will become inactive. The root scroller is considered to be + // fully in view with a scroll range of zero. + // https://github.com/w3c/csswg-drafts/issues/8226 const maxScroll = scroller.scrollHeight - scroller.clientHeight; scroller.scrollTop = 0.5 * maxScroll; diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-multi-pass.tentative.html b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-multi-pass.tentative.html index 91668ada5be..651ba212ded 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-multi-pass.tentative.html +++ b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-multi-pass.tentative.html @@ -18,6 +18,7 @@ main { height: 0px; overflow: hidden; + scroll-timeline: timeline1 defer, timeline2 defer; } .scroller { height: 100px; @@ -49,7 +50,7 @@ function insertScroller(timeline_name) { let scroller = document.createElement('div'); scroller.classList.add('scroller'); - scroller.style.scrollTimeline = timeline_name; + scroller.style.scrollTimeline = `${timeline_name} ancestor`; scroller.append(document.createElement('div')); main.insertBefore(scroller, element1); } diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-shorthand.tentative.html b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-shorthand.tentative.html index dd1e6e12a98..68e1cc955f5 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-shorthand.tentative.html +++ b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-shorthand.tentative.html @@ -23,6 +23,8 @@ test_valid_value('scroll-timeline', 'horizontal block', 'horizontal'); test_valid_value('scroll-timeline', 'a, b, c'); test_valid_value('scroll-timeline', 'a inline, b block, c vertical', 'a inline, b, c vertical'); test_valid_value('scroll-timeline', 'auto'); +test_valid_value('scroll-timeline', 'abc defer vertical', 'abc vertical defer'); +test_valid_value('scroll-timeline', 'abc vertical defer'); test_invalid_value('scroll-timeline', ''); test_invalid_value('scroll-timeline', 'abc abc'); @@ -44,6 +46,8 @@ test_computed_value('scroll-timeline', 'vertical block', 'vertical'); test_computed_value('scroll-timeline', 'horizontal block', 'horizontal'); test_computed_value('scroll-timeline', 'a, b, c'); test_computed_value('scroll-timeline', 'a inline, b block, c vertical', 'a inline, b, c vertical'); +test_computed_value('scroll-timeline', 'abc defer vertical', 'abc vertical defer'); +test_computed_value('scroll-timeline', 'abc vertical defer'); test_shorthand_value('scroll-timeline', 'abc vertical local', { diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/timeline-offset-keyframes-hidden-subject.html b/tests/wpt/web-platform-tests/scroll-animations/css/timeline-offset-keyframes-hidden-subject.html index 389c8baca3a..93ef7ffa1eb 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/css/timeline-offset-keyframes-hidden-subject.html +++ b/tests/wpt/web-platform-tests/scroll-animations/css/timeline-offset-keyframes-hidden-subject.html @@ -22,7 +22,9 @@ margin-right: 0px; } } + #scroller { + scroll-timeline-attachment: defer t1; border: 10px solid lightgray; overflow-y: scroll; overflow-x: hidden; @@ -30,6 +32,7 @@ height: 200px; } #block { + scroll-timeline-attachment: ancestor; margin-top: 800px; margin-left: 10px; margin-right: 10px; @@ -64,7 +67,7 @@ await waitForNextFrame(); const anims = document.getAnimations(); assert_equals(anims.length, 1, - "Should have one animation attatched to the view-timeline"); + "Should have one animation attached to the view-timeline"); const anim = anims[0]; await anim.ready; await waitForNextFrame(); @@ -88,7 +91,7 @@ 'Initial keyframes with active view-timeline'); block.style.display = 'none'; - // View-timeline becomes invalid. Keyframes with timeline offsets must be + // View-timeline becomes inactive. Keyframes with timeline offsets must be // ignored. frames = anim.effect.getKeyframes(); let expected_unresolved_offsets = [ @@ -109,6 +112,9 @@ 'Keyframes with invalid view timeline'); block.style.display = 'block'; + // Timeline remains inactive until next frame. + await waitForNextFrame(); + // Ensure that keyframes with timeline-offsets are restored. frames = anim.effect.getKeyframes(); diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/timeline-range-name-offset-in-keyframes.tentative.html b/tests/wpt/web-platform-tests/scroll-animations/css/timeline-range-name-offset-in-keyframes.tentative.html index 7bae49c2e97..54467bc83b1 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/css/timeline-range-name-offset-in-keyframes.tentative.html +++ b/tests/wpt/web-platform-tests/scroll-animations/css/timeline-range-name-offset-in-keyframes.tentative.html @@ -87,9 +87,12 @@ container.scrollTop = 400; await waitForNextFrame(); assert_equals(getComputedStyle(subject).opacity, '1', - 'Effect at entry 100% (post resize)'); + 'Effect at entry 100%'); + // Reducing the viewport by 100px, shifts the keyframe offsets. + // The entry range shifts from [200px, 400px] to [300px, 500px]. container.style.height = '300px'; + await waitForNextFrame(); assert_equals(getComputedStyle(subject).opacity, '0.5', 'Effect at entry 50% (post resize)'); diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-shorthand.tentative.html b/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-shorthand.tentative.html index 0ab0f21ff6c..f19b9e6ac21 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-shorthand.tentative.html +++ b/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-shorthand.tentative.html @@ -22,6 +22,8 @@ test_valid_value('view-timeline', 'horizontal block', 'horizontal'); test_valid_value('view-timeline', 'a, b, c'); test_valid_value('view-timeline', 'a inline, b block, c vertical', 'a inline, b, c vertical'); test_valid_value('view-timeline', 'auto'); +test_valid_value('view-timeline', 'abc defer vertical', 'abc vertical defer'); +test_valid_value('view-timeline', 'abc vertical defer'); test_invalid_value('view-timeline', 'abc abc'); test_invalid_value('view-timeline', 'block none'); @@ -39,6 +41,8 @@ test_computed_value('view-timeline', 'vertical block', 'vertical'); test_computed_value('view-timeline', 'horizontal block', 'horizontal'); test_computed_value('view-timeline', 'a, b, c'); test_computed_value('view-timeline', 'a inline, b block, c vertical', 'a inline, b, c vertical'); +test_computed_value('view-timeline', 'abc defer vertical', 'abc vertical defer'); +test_computed_value('view-timeline', 'abc vertical defer'); test_shorthand_value('view-timeline', 'abc vertical', { diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-subject-bounds-update.html b/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-subject-bounds-update.html new file mode 100644 index 00000000000..7001eceeaf8 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-subject-bounds-update.html @@ -0,0 +1,71 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<head> +<meta charset="utf-8"> +<meta name="viewport" content="width=device-width, initial-scale=1"> +<title>Update subject bounds refTest</title> +<link rel="help" src="https://github.com/w3c/csswg-drafts/issues/8694"> +<link rel="match" + href="./animation-update-ref.html?translate=100px&scroll=800"> +<script src="/web-animations/testcommon.js"></script> +</head> +<style type="text/css"> + @keyframes anim { + from { transform: translateX(100px) } + to { transform: translateX(0px) } + } + #scroller { + border: 1px solid black; + overflow: hidden; + width: 300px; + height: 200px; + } + #target { + margin-bottom: 800px; + margin-top: 700px; + margin-left: 10px; + margin-right: 10px; + width: 100px; + height: 200px; + z-index: -1; + background-color: green; + animation: anim auto both linear; + animation-timeline: timeline; + view-timeline: timeline; + animation-range: exit; + } + #target.bounds-update { + height: 100px; + /* Keep the scroll range the same. */ + margin-top: 800px; + } +</style> +<body> + <div id="scroller"> + <div id="target"></div> + </div> +</body> +<script type="text/javascript"> + document.documentElement.addEventListener('TestRendered', async () => { + runTest(); + }, { once: true }); + + async function runTest() { + await waitForCompositorReady(); + + const anim = target.getAnimations()[0]; + + // Scroll to exit 50%. + scroller.scrollTop = 800; + await waitForNextFrame(); + + // After the update to the animation range, the positioning is exit 0% + target.classList.add('bounds-update'); + await waitForNextFrame(); + + // Make sure change to animation range was properly picked up. + document.documentElement.classList.remove("reftest-wait"); + } +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/scroll-animations/scroll-timelines/scroll-timeline-invalidation.html b/tests/wpt/web-platform-tests/scroll-animations/scroll-timelines/scroll-timeline-invalidation.html index f35d878c69a..0b9e10c9846 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/scroll-timelines/scroll-timeline-invalidation.html +++ b/tests/wpt/web-platform-tests/scroll-animations/scroll-timelines/scroll-timeline-invalidation.html @@ -100,6 +100,8 @@ promise_test(async t => { 'size changes.'); promise_test(async t => { + await waitForNextFrame(); + const timeline = createScrollTimeline(t); const scroller = timeline.source; const maxScroll = scroller.scrollHeight - scroller.clientHeight; @@ -117,12 +119,35 @@ promise_test(async t => { // Wait for new animation frame which allows the timeline to compute new // current time. await waitForNextFrame(); - assert_times_equal(timeline.currentTime.value, 20, + + // Let s = scroll position + // p = fractional progress + // v = viewport height + // c = scroll height + // c[i] = c[i-1] * (1 + p[i-1]) + // p[i] = s / (c[i-1] - v) + + // c[0] = 1000 + // p[0] = 0.2 ==> s = 180 + // c[1] = 1000 * 1.2 = 1200 + assert_percents_equal(timeline.currentTime, 20, 'Timeline current time is updated after animation frame.'); + assert_equals(scroller.scrollHeight, 1200); await waitForNextFrame(); - assert_times_equal(timeline.currentTime.value, 16.3636, + + // Applying the animation effect alters the height of the scroll content and + // makes the scroll timeline stale. + // https://github.com/w3c/csswg-drafts/issues/8694 + + // p[1] = 180 / (1200 - 100) = 0.16363636363 + // c[2] = 1000 * 1.16363636363 = 1163.6363 => 1164 + // p[2] = 180 / (1164 - 100) = 0.1692 + // c[3] = 1169 + + assert_percents_equal(timeline.currentTime, 16.92, 'Timeline current time is updated after two animation frames and ' + 'reflects single layout run.'); + assert_approx_equals(scroller.scrollHeight, 1169, 1); }, 'If scroll animation resizes its scroll timeline scroller, ' + - 'layout runs only once to reflect the initial update.'); + 'layout reruns once per frame.'); </script> diff --git a/tests/wpt/web-platform-tests/selection/caret/collapse-pre-linestart-1.html b/tests/wpt/web-platform-tests/selection/caret/collapse-pre-linestart-1.html index 6863456f06e..e8bd262868c 100644 --- a/tests/wpt/web-platform-tests/selection/caret/collapse-pre-linestart-1.html +++ b/tests/wpt/web-platform-tests/selection/caret/collapse-pre-linestart-1.html @@ -8,5 +8,6 @@ <pre id=target contenteditable>ABC <br></pre> <script> + target.focus(); getSelection().collapse(target.childNodes[0], 4); </script> diff --git a/tests/wpt/web-platform-tests/selection/caret/collapse-pre-linestart-2.html b/tests/wpt/web-platform-tests/selection/caret/collapse-pre-linestart-2.html index ac119cbb316..0feee464c98 100644 --- a/tests/wpt/web-platform-tests/selection/caret/collapse-pre-linestart-2.html +++ b/tests/wpt/web-platform-tests/selection/caret/collapse-pre-linestart-2.html @@ -9,5 +9,6 @@ </pre> <script> + target.focus(); getSelection().collapse(target.childNodes[0], 4); </script> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/detached-context.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/detached-context.https.html index 747a953f620..ce8e4cc8400 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/detached-context.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/detached-context.https.html @@ -119,23 +119,6 @@ test(t => { } assert_not_equals(get_navigator().serviceWorker, null); iframe.remove(); - assert_throws_js(TypeError, () => get_navigator()); - }, 'accessing navigator on a removed frame'); - -// It seems weird that about:blank and blank.html (the test above) have -// different behavior. These expectations are based on Chromium behavior, which -// might not be right. -test(t => { - const iframe = document.createElement('iframe'); - iframe.src = 'about:blank'; - document.body.appendChild(iframe); - const f = iframe.contentWindow.Function; - function get_navigator() { - return f('return navigator')(); - } assert_not_equals(get_navigator().serviceWorker, null); - iframe.remove(); - assert_equals(get_navigator().serviceWorker, null); - }, 'accessing navigator.serviceWorker on a removed about:blank frame'); - + }, 'accessing navigator on a removed frame'); </script> diff --git a/tests/wpt/web-platform-tests/speculation-rules/prefetch/different-initiators-2.https.html b/tests/wpt/web-platform-tests/speculation-rules/prefetch/different-initiators-2.https.html index 69e84333aa4..1242ebbfb40 100644 --- a/tests/wpt/web-platform-tests/speculation-rules/prefetch/different-initiators-2.https.html +++ b/tests/wpt/web-platform-tests/speculation-rules/prefetch/different-initiators-2.https.html @@ -1,4 +1,5 @@ <!DOCTYPE html> +<meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/common/utils.js"></script> diff --git a/tests/wpt/web-platform-tests/speculation-rules/prefetch/different-initiators.sub.https.html b/tests/wpt/web-platform-tests/speculation-rules/prefetch/different-initiators.sub.https.html index 74e79323d94..c35ccde8bb0 100644 --- a/tests/wpt/web-platform-tests/speculation-rules/prefetch/different-initiators.sub.https.html +++ b/tests/wpt/web-platform-tests/speculation-rules/prefetch/different-initiators.sub.https.html @@ -1,4 +1,5 @@ <!DOCTYPE html> +<meta name="timeout" content="long"> <meta name="variant" content="?cross-site-1"> <meta name="variant" content="?cross-site-2"> <meta name="variant" content="?same-site"> diff --git a/tests/wpt/web-platform-tests/speculation-rules/prefetch/initiators-a-element.sub.https.html b/tests/wpt/web-platform-tests/speculation-rules/prefetch/initiators-a-element.sub.https.html new file mode 100644 index 00000000000..bac5eb7cb79 --- /dev/null +++ b/tests/wpt/web-platform-tests/speculation-rules/prefetch/initiators-a-element.sub.https.html @@ -0,0 +1,79 @@ +<!DOCTYPE html> +<meta name="variant" content="?cross-site"> +<meta name="variant" content="?same-site"> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/common/utils.js"></script> +<script src="resources/utils.sub.js"></script> +<script> + // In https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate, + // `sourceDocument` (instead of `navigable`'s active document) should be + // used as the referring document for prefetch. + promise_test(async t => { + assert_implements(HTMLScriptElement.supports('speculationrules'), "Speculation Rules not supported"); + + const win = await spawnWindow(t, { protocol: 'https' }); + + const hostname = + location.search === '?cross-site' ? '{{hosts[alt][www]}}' : undefined; + const nextUrl = win.getExecutorURL({ protocol: 'https', hostname, page: 2 }); + + await win.forceSinglePrefetch(nextUrl); + + // sourceDocument == `win`'s Document == active document of window being + // navigated. + await win.execute_script((url) => { + window.executor.suspend(() => { + const a = document.createElement('a'); + a.setAttribute('href', url); + document.body.appendChild(a); + a.click(); + }); + }, [nextUrl]); + + assert_equals( + await win.execute_script(() => location.href), + nextUrl.toString(), + "expected navigation to reach destination URL"); + + assert_prefetched(await win.getRequestHeaders()); + }, `<a>`); + + promise_test(async t => { + assert_implements(HTMLScriptElement.supports('speculationrules'), "Speculation Rules not supported"); + + const win = await spawnWindow(t, { protocol: 'https' }); + + const hostname = + location.search === '?cross-site' ? '{{hosts[alt][www]}}' : undefined; + const nextUrl = win.getExecutorURL({ protocol: 'https', hostname, page: 2 }); + + await win.forceSinglePrefetch(nextUrl); + + // sourceDocument == `win`'s Document != active document of window being + // navigated, since the window being navigated is a new window. + await win.execute_script((url) => { + window.executor.suspend(() => { + const a = document.createElement('a'); + a.setAttribute('href', url); + a.setAttribute('target', '_blank'); + document.body.appendChild(a); + a.click(); + }); + }, [nextUrl]); + + // Below, the scripts given to `win.execute_script()` are executed on the + // `nextUrl` page in the new window, because `window.executor.suspend()` + // above made `win`'s original page stop processing `execute_script()`, + // while the new page of `nextUrl` in the new window starts processing + // `execute_script()` for the same ID. + assert_equals( + await win.execute_script(() => location.href), + nextUrl.toString(), + "expected navigation to reach destination URL"); + + assert_prefetched(await win.getRequestHeaders()); + }, `<a target="blank">`); +</script> diff --git a/tests/wpt/web-platform-tests/speculation-rules/prefetch/initiators-iframe-location-href.sub.https.html b/tests/wpt/web-platform-tests/speculation-rules/prefetch/initiators-iframe-location-href.sub.https.html new file mode 100644 index 00000000000..9d6702d4b75 --- /dev/null +++ b/tests/wpt/web-platform-tests/speculation-rules/prefetch/initiators-iframe-location-href.sub.https.html @@ -0,0 +1,48 @@ +<!DOCTYPE html> +<meta name="variant" content="?cross-site"> +<meta name="variant" content="?same-site"> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/common/utils.js"></script> +<script src="resources/utils.sub.js"></script> +<script> + // In https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate, + // `sourceDocument` (instead of `navigable`'s active document) should be + // used as the referring document for prefetch. + promise_test(async t => { + assert_implements(HTMLScriptElement.supports('speculationrules'), "Speculation Rules not supported"); + + const win = await spawnWindow(t, { protocol: 'https' }); + + const hostname = + location.search === '?cross-site' ? '{{hosts[alt][www]}}' : undefined; + const nextUrl = win.getExecutorURL({ protocol: 'https', hostname, page: 2 }); + + await win.forceSinglePrefetch(nextUrl); + + // In https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate, + // `sourceDocument` is the incumbent Document and thus `win`'s Document. + // `navigable`'s active document is `iframe`'s Document. + await win.execute_script((url) => { + window.executor.suspend(() => { + const iframe = document.createElement('iframe'); + document.body.appendChild(iframe); + iframe.contentWindow.location.href = url; + }); + }, [nextUrl]); + + // Below, the scripts given to `win.execute_script()` are executed on the + // `nextUrl` page in the iframe, because `window.executor.suspend()` above + // made `win`'s original page stop processing `execute_script()`, + // while the new page of `nextUrl` in the iframe starts processing + // `execute_script()` for the same ID. + assert_equals( + await win.execute_script(() => location.href), + nextUrl.toString(), + "expected navigation to reach destination URL"); + + assert_prefetched(await win.getRequestHeaders()); + }, `location.href across iframe`); +</script> diff --git a/tests/wpt/web-platform-tests/speculation-rules/prefetch/initiators-window-open.sub.https.html b/tests/wpt/web-platform-tests/speculation-rules/prefetch/initiators-window-open.sub.https.html new file mode 100644 index 00000000000..f786df077db --- /dev/null +++ b/tests/wpt/web-platform-tests/speculation-rules/prefetch/initiators-window-open.sub.https.html @@ -0,0 +1,68 @@ +<!DOCTYPE html> +<meta name="variant" content="?cross-site"> +<meta name="variant" content="?same-site"> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/common/utils.js"></script> +<script src="resources/utils.sub.js"></script> +<script> + // In https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate, + // `sourceDocument` (instead of `navigable`'s active document) should be + // used as the referring document for prefetch. + promise_test(async t => { + assert_implements(HTMLScriptElement.supports('speculationrules'), "Speculation Rules not supported"); + + const win = await spawnWindow(t, { protocol: 'https' }); + + const hostname = + location.search === '?cross-site' ? '{{hosts[alt][www]}}' : undefined; + const nextUrl = win.getExecutorURL({ protocol: 'https', hostname, page: 2 }); + + await win.forceSinglePrefetch(nextUrl); + + await win.execute_script((url) => { + window.executor.suspend(() => { + window.open(url, "_blank"); + }); + }, [nextUrl]); + + // Below, the scripts given to `win.execute_script()` are executed on the + // `nextUrl` page in the new window, because `window.executor.suspend()` + // above made `win`'s original page stop processing `execute_script()`, + // while the new page of `nextUrl` in the new window starts processing + // `execute_script()` for the same ID. Same for below. + assert_equals( + await win.execute_script(() => location.href), + nextUrl.toString(), + "expected navigation to reach destination URL"); + + assert_prefetched(await win.getRequestHeaders()); + }, `window.open()`); + + promise_test(async t => { + assert_implements(HTMLScriptElement.supports('speculationrules'), "Speculation Rules not supported"); + + const win = await spawnWindow(t, { protocol: 'https' }); + + const hostname = + location.search === '?cross-site' ? '{{hosts[alt][www]}}' : undefined; + const nextUrl = win.getExecutorURL({ protocol: 'https', hostname, page: 2 }); + + await win.forceSinglePrefetch(nextUrl); + + await win.execute_script((url) => { + window.executor.suspend(() => { + window.open(url, "_blank", "noopener"); + }); + }, [nextUrl]); + + assert_equals( + await win.execute_script(() => location.href), + nextUrl.toString(), + "expected navigation to reach destination URL"); + + assert_prefetched(await win.getRequestHeaders()); + }, `window.open(noopener)`); +</script> diff --git a/tests/wpt/web-platform-tests/speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html b/tests/wpt/web-platform-tests/speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html new file mode 100644 index 00000000000..d62788cabac --- /dev/null +++ b/tests/wpt/web-platform-tests/speculation-rules/prefetch/no-vary-search/prefetch-single-with-hint.https.html @@ -0,0 +1,337 @@ +<!DOCTYPE html> +<title>Use for navigation the requested prefetched response annotated with No-Vary-Search hint, if +No-Vary-Search headers also match during navigation</title> +<meta charset="utf-8"> + +<meta name="variant" content="?1-1"> +<meta name="variant" content="?2-2"> +<meta name="variant" content="?3-3"> +<meta name="variant" content="?4-4"> +<meta name="variant" content="?5-5"> +<meta name="variant" content="?6-6"> +<meta name="variant" content="?7-7"> +<meta name="variant" content="?8-8"> +<meta name="variant" content="?9-9"> +<meta name="variant" content="?10-10"> +<meta name="variant" content="?11-11"> +<meta name="variant" content="?12-12"> +<meta name="variant" content="?13-13"> +<meta name="variant" content="?14-14"> +<meta name="variant" content="?15-15"> +<meta name="variant" content="?16-16"> +<meta name="variant" content="?17-17"> +<meta name="variant" content="?18-18"> +<meta name="variant" content="?19-19"> +<meta name="variant" content="?20-20"> +<meta name="variant" content="?21-21"> +<meta name="variant" content="?22-22"> +<meta name="variant" content="?23-23"> +<meta name="variant" content="?24-24"> +<meta name="variant" content="?25-last"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/common/utils.js"></script> +<script src="../resources/utils.sub.js"></script> +<script src="/common/subset-tests.js"></script> + +<script> + function addNoVarySearchHeaderUsingQueryParam(url, value){ + // Use nvs_header query parameter to ask the wpt server + // to populate No-Vary-Search response header. + if(value){ + url.searchParams.append("nvs_header", value); + } + } + + /* + remoteAgent: the RemoteContext instance used to communicate between the + test and the window where prefetch/navigation is happening + noVarySearchHeaderValue: the value of No-Vary-Search header to be populated + for the prefetched response + noVarySearchHintValue: the value of No-Vary-Search hint passed in + as expects_no_vary_search hint in prefetch speculation rules. + prefetchQuery: query params to be added to prefetchExecutor url and prefetched + navigateQuery: query params to be added to prefetchExecutor url and navigated to + */ + async function prefetchAndNavigate(remoteAgent, noVarySearchHeaderValue, noVarySearchHintValue, prefetchQuery, navigateQuery){ + /* + Flow: + * prefetch prefetch_nvs_hint.py?uuid=...&nvs_header=...&otherqueryparams + * the prefetch request above includes no_vary_search_hint in the speculation + rules + * the server blocks progress on this prefetch request on the server side so + from the browser perspective the server is "thinking" + * the test starts navigation to + prefetch_nvs_hint.py?uuid=...&nvs_header=...&otherdifferentqueryparams. + This navigation matches by No-Vary-Search hint the above in + progress prefetch. + * the test fetches prefetch_nvs_hint.py?uuid=...&unblock="unblock" + which unblocks the in progress prefetch so that the in-progress + navigation can continue + */ + const prefetch_nvs_hint_server_page = "prefetch_nvs_hint.py"; + const prefetchUrl = remoteAgent.getExecutorURL({executor:prefetch_nvs_hint_server_page}); + const navigateToUrl = new URL(prefetchUrl); + // Add query params to the url to be prefetched. + const additionalPrefetchedUrlSearchParams = new URLSearchParams(prefetchQuery); + addNoVarySearchHeaderUsingQueryParam(prefetchUrl, noVarySearchHeaderValue); + additionalPrefetchedUrlSearchParams.forEach((value, key) => { + prefetchUrl.searchParams.append(key, value); + }); + + await remoteAgent.forceSinglePrefetch(prefetchUrl, + {expects_no_vary_search:noVarySearchHintValue}); + + // Add new query params to navigateToUrl to match No-Vary-Search test case. + const additionalNavigateToUrlSearchParams = new URLSearchParams(navigateQuery); + addNoVarySearchHeaderUsingQueryParam(navigateToUrl, noVarySearchHeaderValue); + additionalNavigateToUrlSearchParams.forEach((value, key) => { + navigateToUrl.searchParams.append(key, value); + }); + // Url used by fetch in order to unblock the prefetched url + const nvshint_unblock_url = remoteAgent.getExecutorURL( + {executor:prefetch_nvs_hint_server_page, unblock:"unblock"}); + await remoteAgent.execute_script((unblock_url) => { + onbeforeunload = (event) => { + fetch(unblock_url); + }; + }, [nvshint_unblock_url]); + + // Try navigating to a non-exact prefetched URL that matches by + // No-Vary-Search hint + // Wait for the navigation to finish + await remoteAgent.navigate(navigateToUrl); + } + + function prefetch_no_vary_search_test(description, noVarySearch, noVarySearchHint, prefetchQuery, navigateQuery, shouldUsePrefetch){ + promise_test(async t => { + assert_implements(HTMLScriptElement.supports('speculationrules'), "Speculation Rules not supported"); + const agent = await spawnWindow(t, {}); + await prefetchAndNavigate(agent, + noVarySearch, + noVarySearchHint, + prefetchQuery, + navigateQuery); + + if(shouldUsePrefetch){ + assert_prefetched(await agent.getRequestHeaders(), + "Navigation didn't use the prefetched response!"); + } + else{ + assert_not_prefetched(await agent.getRequestHeaders(), + "Navigation used the prefetched response!"); + } + }, description); + } + + // Test inputs: + // - description: a description of the test. + // - noVarySearch: No-Vary-Search header value for the response. + // - noVarySearchHint: No-Vary-Search hint to include in prefetch + // speculation rules + // - prefetchQuery: added to query part of prefetch-executor when prefetching + // - navigateQuery: added to query part of prefetch-executor when navigating + // - shouldUsePrefetch: if the test case expects the prefetched entry to be + // used or not. + [{description:"Use in-flight prefetch as query parameter b has the same value.", + noVarySearch: 'params=("a")', + noVarySearchHint: 'params=("a")', + prefetchQuery: "a=2&b=3", + navigateQuery: "b=3", + shouldUsePrefetch: true}, + + {description:"Don't use in-flight prefetch as there is no No-Vary-Search hint.", + noVarySearch: 'params=("a")', + noVarySearchHint: '', + prefetchQuery: "a=2&b=3", + navigateQuery: "b=3", + shouldUsePrefetch: false}, + + {description:"Don't use in-flight prefetch as the prefetched URL has the extra \"a\" query parameter.", + noVarySearch: 'params=("b")', + noVarySearchHint: 'params=("b")', + prefetchQuery: "a=2&b=3", + navigateQuery: "b=2", + shouldUsePrefetch: false}, + + {description:"Use in-flight prefetch as the URLs do not vary by a and b.", + noVarySearch: 'params=("a" "b")', + noVarySearchHint: 'params=("a" "b")', + prefetchQuery: "a=2&b=3", + navigateQuery: "b=2", + shouldUsePrefetch: true}, + + {description:"Do not use in-flight prefetch as the navigation URL has" + + " a different value for the \"b\" query parameter.", + noVarySearch: 'params=("a" "b")', + noVarySearchHint: 'params=("a")', + prefetchQuery: "a=2&b=3", + navigateQuery: "b=2", + shouldUsePrefetch: false}, + + {description:"Use in-flight prefetch as the URLs have the same values for all keys, only differing by order.", + noVarySearch: "key-order", + noVarySearchHint: "key-order", + prefetchQuery: "b=5&a=3&a=4&d=6&c=5&b=3", + navigateQuery: "d=6&a=3&b=5&b=3&c=5&a=4", + shouldUsePrefetch: true}, + + {description:"Use in-flight prefetch as the URLs have the same values for all keys, only differing by order and using ?1 for specifying a true value.", + noVarySearch: "key-order=?1", + noVarySearchHint: "key-order=?1", + prefetchQuery: "b=5&a=3&a=4&d=6&c=5&b=3", + navigateQuery: "d=6&a=3&b=5&b=3&c=5&a=4", + shouldUsePrefetch: true}, + + {description:"Don't use in-flight prefetch as key-order is set to false and the URLs are not identical.", + noVarySearch: "key-order=?0", + noVarySearchHint: "key-order=?1", + prefetchQuery: "b=5&a=3&a=4&d=6&c=5&b=3", + navigateQuery: "d=6&a=3&b=5&b=3&c=5&a=4", + shouldUsePrefetch: false}, + + {description:"Use in-flight prefetch as all query parameters except c can be ignored.", + noVarySearch: 'params, except=("c")', + noVarySearchHint: 'params, except=("c")', + prefetchQuery: "b=5&a=3&d=6&c=3", + navigateQuery: "a=1&b=2&c=3", + shouldUsePrefetch: true}, + + {description:"Use in-flight prefetch as all query parameters except c can be ignored." + + " Only the last except matters.", + noVarySearch: 'params, except=("b"), except=("c")', + noVarySearchHint: 'params, except=("b"), except=("c")', + prefetchQuery: "b=5&a=3&d=6&c=3", + navigateQuery: "a=1&b=2&c=3", + shouldUsePrefetch: true}, + + {description:"Don't use in-flight prefetch as even though all query parameters" + + " except c can be ignored, c has different value.", + noVarySearch: 'params, except=("c")', + noVarySearchHint: "params", + prefetchQuery: "b=5&a=3&d=6&c=3", + navigateQuery: "a=1&b=2&c=5", + shouldUsePrefetch: false}, + + {description:"Use in-flight prefetch as even though all query parameters" + + " except c and d can be ignored, c value matches and d value matches.", + noVarySearch: 'params, except=("c" "d")', + noVarySearchHint: 'params, except=("c" "d")', + prefetchQuery: "b=5&a=3&d=6&c=5", + navigateQuery: "d=6&a=1&b=2&c=5", + shouldUsePrefetch: true}, + + {description:"Use in-flight prefetch as even though all query parameters except" + + " c and d can be ignored, c value matches and d value matches." + + " Some query parameters to be ignored appear multiple times in the query.", + noVarySearch: 'params, except=("c" "d")', + noVarySearchHint: 'params', + prefetchQuery: "b=5&a=3&a=4&d=6&c=5", + navigateQuery: "d=6&a=1&a=2&b=2&b=3&c=5", + shouldUsePrefetch: true}, + + {description:"Use in-flight prefetch as all query parameters except c can be ignored." + + " Allow extension via parameters.", + noVarySearch: 'params, except=("c";unknown)', + noVarySearchHint: 'params, except=("c";unknown)', + prefetchQuery: "b=5&a=3&d=6&c=3", + navigateQuery: "a=1&b=2&c=3", + shouldUsePrefetch: true}, + + {description:"Use in-flight prefetch as query parameter c can be ignored." + + " Allow extension via parameters.", + noVarySearch: 'params=("c";unknown)', + noVarySearchHint: 'params=("c";unknown)', + prefetchQuery: "a=2&b=2&c=5", + navigateQuery: "a=2&c=3&b=2", + shouldUsePrefetch: true}, + + {description:"Use in-flight prefetch as the URLs have the values in different order for a." + + " Allow extension via parameters.", + noVarySearch: "key-order;unknown", + noVarySearchHint: "key-order;unknown", + prefetchQuery: "b=5&a=3&a=4&d=6&c=5&b=3", + navigateQuery: "d=6&a=3&b=5&b=3&c=5&a=4", + shouldUsePrefetch: true}, + + {description:"Use in-flight prefetch as the URLs do not vary on any query parameters." + + " Allow extension via parameters.", + noVarySearch: "params;unknown", + noVarySearchHint: "params;unknown", + prefetchQuery: "", + navigateQuery: "b=4&c=5", + shouldUsePrefetch: true}, + + {description:"Use in-flight prefetch as all query parameters except c can be ignored." + + " Allow extension via parameters.", + noVarySearch: 'params;unknown, except=("c");unknown', + noVarySearchHint: 'params;unknown, except=("c");unknown', + prefetchQuery: "b=5&a=3&d=6&c=3", + navigateQuery: "a=1&b=2&c=3", + shouldUsePrefetch: true}, + + {description:"Don't use the in-flight prefetched URL. Empty No-Vary-Search means default URL variance." + + " The prefetched and the navigated URLs have to be the same.", + noVarySearch: "", + noVarySearchHint: "params", + prefetchQuery: "b=5&a=3&d=6&c=3", + navigateQuery: "a=1&b=2&c=3", + shouldUsePrefetch: false}, + + {description:"Use the in-flight prefetch. Empty No-Vary-Search means default URL variance." + + " The prefetched and the navigated URLs have to be the same.", + noVarySearch: "", + noVarySearchHint: "", + prefetchQuery: "b=5&a=3&d=6&c=3", + navigateQuery: "b=5&a=3&d=6&c=3", + shouldUsePrefetch: true}, + + {description:"Use the in-flight prefetch. Empty No-Vary-Search means default URL variance." + + " The prefetched and the navigated URLs have to be the same.", + noVarySearch: "", + noVarySearchHint: "", + prefetchQuery: "", + navigateQuery: "", + shouldUsePrefetch: true}, + + {description:"Use the in-flight prefetch. Non-ASCII key - 2 UTF-8 code units." + + " Don't vary the response on the non-ASCII key.", + noVarySearch: 'params=("%C2%A2")', + noVarySearchHint: 'params=("%C2%A2")', + prefetchQuery: "¢=3", + navigateQuery: "¢=4", + shouldUsePrefetch: true}, + + {description:"Use the in-flight prefetch. Non-ASCII key - 2 UTF-8 code units." + + " Don't vary the response on the non-ASCII key.", + noVarySearch: 'params=("%C2%A2")', + noVarySearchHint: 'params=("%C2%A2")', + prefetchQuery: "a=2&¢=3", + navigateQuery: "¢=4&a=2", + shouldUsePrefetch: true}, + + {description:"Don't use the in-flight prefetch. Non-ASCII key - 2 UTF-8 code units." + + " Vary the response on the non-ASCII key.", + noVarySearch: 'params, except=("%C2%A2")', + noVarySearchHint: 'params', + prefetchQuery: "¢=3", + navigateQuery: "¢=4", + shouldUsePrefetch: false}, + + {description:"Use the in-flight prefetch. Non-ASCII key - 2 UTF-8 code units." + + " Vary the response on the non-ASCII key.", + noVarySearch: 'params, except=("%C2%A2")', + noVarySearchHint: 'params, except=("%C2%A2")', + prefetchQuery: "¢=3&a=4", + navigateQuery: "a=5&¢=3", + shouldUsePrefetch: true}, + + ].forEach(({description, noVarySearch, noVarySearchHint, prefetchQuery, navigateQuery, shouldUsePrefetch}) => { + subsetTest(prefetch_no_vary_search_test, + description, noVarySearch, noVarySearchHint, prefetchQuery, navigateQuery, + shouldUsePrefetch); + }); + +</script> diff --git a/tests/wpt/web-platform-tests/speculation-rules/prefetch/prefetch-traverse-reload.sub.html b/tests/wpt/web-platform-tests/speculation-rules/prefetch/prefetch-traverse-reload.sub.html index 3f1312ed122..ec6a7cd9261 100644 --- a/tests/wpt/web-platform-tests/speculation-rules/prefetch/prefetch-traverse-reload.sub.html +++ b/tests/wpt/web-platform-tests/speculation-rules/prefetch/prefetch-traverse-reload.sub.html @@ -33,6 +33,36 @@ promise_test(async t => { let agent = await spawnWindow(t, { protocol: 'https', pipe: 'header(Cache-Control, no-store)' }); let previousUrl = await agent.execute_script(() => location.href); + await agent.execute_script(async () => { + window.preventBfcache = new WebSocket('wss://{{ports[wss][0]}}/echo'); + }); + + let nextUrl = agent.getExecutorURL({ protocol: 'https', page: 2 }); + await agent.navigate(nextUrl); + + await agent.forceSinglePrefetch(previousUrl); + // In https://html.spec.whatwg.org/multipage/nav-history-apis.html#delta-traverse, + // `sourceDocument` is `History`'s relevant global object's associated + // Document. In this case, it's `iframe.contentDocument`, and thus the + // prefetch from `win`'s Document (iframe's parent Document) isn't used. + await agent.execute_script(() => { + window.executor.suspend(() => { + const iframe = document.createElement('iframe'); + document.body.appendChild(iframe); + iframe.contentWindow.history.go(-1); + }); + }); + + assert_equals(previousUrl, await agent.execute_script(() => location.href)); + assert_not_prefetched(await agent.getRequestHeaders(), + "prefetch from different Document should not be used"); +}, "History's Document is used for traversal navigations"); + +promise_test(async t => { + assert_implements(HTMLScriptElement.supports('speculationrules'), "Speculation Rules not supported"); + + let agent = await spawnWindow(t, { protocol: 'https', pipe: 'header(Cache-Control, no-store)' }); + let previousUrl = await agent.execute_script(() => location.href); await agent.forceSinglePrefetch(previousUrl); await agent.execute_script(() => { window.executor.suspend(() => location.reload()); diff --git a/tests/wpt/web-platform-tests/speculation-rules/prefetch/resources/prefetch_nvs_hint.py b/tests/wpt/web-platform-tests/speculation-rules/prefetch/resources/prefetch_nvs_hint.py new file mode 100644 index 00000000000..09c5d2eb737 --- /dev/null +++ b/tests/wpt/web-platform-tests/speculation-rules/prefetch/resources/prefetch_nvs_hint.py @@ -0,0 +1,34 @@ +import time + +def main(request, response): + uuid = request.GET[b"uuid"] + prefetch = request.headers.get( + "Sec-Purpose", b"").decode("utf-8").startswith("prefetch") + if b"unblock" in request.GET: + request.server.stash.put(uuid, 0) + return '' + + if b"nvs_header" in request.GET: + nvs_header = request.GET[b"nvs_header"] + response.headers.set("No-Vary-Search", nvs_header) + + if prefetch: + nvswait = None + while nvswait is None: + time.sleep(0.1) + nvswait = request.server.stash.take(uuid) + + content = (f'<!DOCTYPE html>\n' + f'<script src="/common/dispatcher/dispatcher.js"></script>\n' + f'<script src="utils.sub.js"></script>\n' + f'<script>\n' + f' window.requestHeaders = {{\n' + f' purpose: "{request.headers.get("Purpose", b"").decode("utf-8")}",\n' + f' sec_purpose: "{request.headers.get("Sec-Purpose", b"").decode("utf-8")}",\n' + f' referer: "{request.headers.get("Referer", b"").decode("utf-8")}",\n' + f' }};\n' + f' const uuid = new URLSearchParams(location.search).get("uuid");\n' + f' window.executor = new Executor(uuid);\n' + f'</script>\n') + + return content diff --git a/tests/wpt/web-platform-tests/speculation-rules/prerender/accept-clint-hint-cache.https.html b/tests/wpt/web-platform-tests/speculation-rules/prerender/accept-client-hint-cache.https.html index 66e2c90c04a..66e2c90c04a 100644 --- a/tests/wpt/web-platform-tests/speculation-rules/prerender/accept-clint-hint-cache.https.html +++ b/tests/wpt/web-platform-tests/speculation-rules/prerender/accept-client-hint-cache.https.html diff --git a/tests/wpt/web-platform-tests/speculation-rules/prerender/prefetch.https.html b/tests/wpt/web-platform-tests/speculation-rules/prerender/prefetch.https.html index 48de5adca13..2a1553b3d94 100644 --- a/tests/wpt/web-platform-tests/speculation-rules/prerender/prefetch.https.html +++ b/tests/wpt/web-platform-tests/speculation-rules/prerender/prefetch.https.html @@ -15,7 +15,7 @@ promise_test(async t => { await create_prerendered_page(t, {}, {prefetch: true}, {}); assert_equals(await tryToActivate(), 'activated'); - assert_equals(await getNetworkRequestCount(), '2', 'Network request count'); -}, "Prerender navigation requests don't use prefetched results (for now)"); + assert_equals(await getNetworkRequestCount(), '1', 'Network request count'); +}, "Prerender navigation requests should use prefetched results"); </script> </body> diff --git a/tests/wpt/web-platform-tests/storage/storagemanager-persist-persisted-match.https.any.js b/tests/wpt/web-platform-tests/storage/storagemanager-persist-persisted-match.https.any.js new file mode 100644 index 00000000000..edbe67fae2c --- /dev/null +++ b/tests/wpt/web-platform-tests/storage/storagemanager-persist-persisted-match.https.any.js @@ -0,0 +1,9 @@ +// META: title=StorageManager: result of persist() matches result of persisted() + +promise_test(async t => { + var persistResult = await navigator.storage.persist(); + assert_equals(typeof persistResult, 'boolean', persistResult + ' should be boolean'); + var persistedResult = await navigator.storage.persisted(); + assert_equals(typeof persistedResult, 'boolean', persistedResult + ' should be boolean'); + assert_equals(persistResult, persistedResult); +}, 'navigator.storage.persist() resolves to a value that matches navigator.storage.persisted()'); diff --git a/tests/wpt/web-platform-tests/tools/certs/cacert.key b/tests/wpt/web-platform-tests/tools/certs/cacert.key index a02adcacab1..39a1bf60a78 100644 --- a/tests/wpt/web-platform-tests/tools/certs/cacert.key +++ b/tests/wpt/web-platform-tests/tools/certs/cacert.key @@ -1,30 +1,30 @@ -----BEGIN ENCRYPTED PRIVATE KEY----- -MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQI6zyhjDZlpjsCAggA -MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECKlIS+BRd8lLBIIEyCwK12KwvZLZ -v0G+K0yv6s3h45NNywn2Jn8e8GxSMbsGvUswNlNIzYbloibVnu7KpdZ58D4upbTu -dJCrxCtvfP44h7aYswgVk7+thutpAl9roeDWe9e3C+iQMA4UHiIiSmSNe5KrLmu2 -DMezpSyQjqX+OJPpL/3Yiwd45Ae4Okd/c6DqnFEMWFdBqWt0Ft8+HOWELTQyQgYs -8cma4rqDqtX5QBZ4QBPm8hOp7+LhHITV1qpyaa/nnQQfZx/e1Cyq/h/hcnkbrwuE -I26s7hcpCaFXN7mSt7GJcZAt5oBqzmDw735iM+FlShokdBsYJEQqWaOVfuzeQYYx -xt0fz8CReOskIg06jJMXyiWPauutHpiNmQTdcFAE9oO2pUJQCZ3ytaSYG3oP0Byb -QgEyxhiw6mKv64ZtiAeHPBv7nBl/UPlOSNrXQ+QIyimohdQ+QFeay0eSPgnBwC/H -MnRaKG6341j5Tk3Itl/5cB6b9VZxvaDgvQNmRNf82EtqCj3YDx7cJF19C7Ut1M0W -mGLYkudLXne+pLkCWuhKWKEjDp+uDQHF7Zq2q3+l1Wk4DROCtEIO3ruOBLYgNUQf -flEA6FCw94YlrGKzjRzusXGvBriSrcwlvIc/d55goTZWIZiztPz9c0O93Qg2vYiC -eJU7D/73byozX0hYOL6d6gWPq4yvbtV/IAZzr+7JuT4j+MVcRkm7lbFhqge/RSbf -q2iwOOKLs3bpNlMI8S2jtBxPqZ5U/B/eI5slap8Z3xbMuqVAJr4vW4kDGC2WCDFG -3PXtJvfk4+slbU6cNSzHVk88cS73fRzB4IYyU/txNicyEL0R2iHm7scYKRFJqcKX -OnDqy4oc5afdv1jfmjb6hA2Xx6T5rC8FMcHBx0M6gi9Y6A/7OadHcRyZySG3F7Xq -+3eub3bwrLwOBEnpm4nl0ucU19WS8kI64gvZbDoQf9kxvOHHFZmjYC0KPFruEWG2 -jFq6xINzA9oTCsR7KWsn+/q3zu5yic9lHtQFN2WnzDzuDoZaVvLY/xqq61ZfROHT -Q14CfWQMXHwXOn/k9knkm2pNzjti07b+v/X2Wb3eYp85ysn+/jT6ubq4qCtXwHRU -++IZFpeL3xiuW6uyv+d1Am7Jt/m1JR743WFEOcLV3DZYikbzqG0Y2rWN0L95uhUm -eCxGLhPoj+j32dSgLhyK/R2n/ka2Ggp+YD+BAyctNUdpVVoqp4IOdCurPBNzNjAv -Z1qf2SJPKtIk4072VhyuOVUrz8eEQP5+gTUTMNMxFu001EVPrLtAH15KqBay2WAg -7tdiBZhvXZuICODwMHl8T+hOfLKYGRvxzsjhLU9Ja2b/0jyblt+9pGIwR4RcOBnO -iZTjKeUlq0R+5P5juqiOSEsB1gazaqu8t/xPzILAxBKz2PypeiVgDLxoRZaa2jGZ -4SAbE53d58NteP6N0wNPtMix0n2JfH1iwdghHXPF+BS+OHjl+4SriJJw+ylmIpjW -Sj5u5vQFyl+vnxCiAvo0396MsNsuvIgw8LIcDCI+xgtziYhXapi7vz+U0v2MnglG -GIVsfsJpMV92B7ch9OodKzitrBZxMRhnKOGekNkjJaGK/iBiRFbDCfnVqWK0Qete -hPlZzINynSbHPifLVeyfZg== +MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIjHFNizMFnigCAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECMHkdsnaSMH7BIIEyBv07wsA9kBS +Y64dr+vX2SHx1yY1HsI0u39L9OnIGcjSjqnXxNTRsHom4hf/18SCeo9hEDjpOWO2 +3arTVWLf4xRgGlS7rvbZuQlBXjFoVhm0hpDugy20vU8PZO+aWg4Hc5b2bMQgX0Jx +4Q2P+5V+CK/PfBCtmLqVWw7WzbFMObOH1wDKFJsfPZqfaTjJVz/FvTqwXTkvmdgv +5jF/jD9HzOu70C0Mxo/cqciWatBvs4bevQZgdB+kLygrefoypsQTseQfnwHrdHfZ +XEtlWY8Stvrxc5a/+yRJaF8PF6wbhIgKN7IvZO08Ph2Ay8ssiCS0iX8eMLqSpVVG +3+Hd5EyyGGXVTUaSITACRgzJRg79dn4ij2mVCAgItsuDZJcZ4USnrTLDEj6hjz3j +v0Ii/y2s6F3tq1ExrzPey3W49Cwvq1pZKHDxmaLD6qPVFbwAV76+gB4tNUyx47s6 +Iv9+1k+M1d40IFZ5/xfMb07JCyFMtfHuW4dNcrW8YFasu4hXPzgkTlN6YMzcZrr+ +8YgqbSaKMbBTaRow3KCOSbh7LBGmSztUeimB1aU2yUcKL9L4hMcv+gITl6tENzio +npzxSqj2IuSPMsaHyzGXhFZKqU9jP8zDF2UVfEvA46Ny20XEr9xiEkVqNZVsL8M3 +9PGCIMeF5L38jHfKbc8eV/rIeQIYEOti+e0vT0jUhFX85S0Y7pRciUbL1EkjLXRh +lndsOyw8cJrjvjSdRPnfZrCBjr+5PtEOdMzIhEj88pceoH3dskCfovabhJICUTgp +Y/BoHbOPdV35cJgNy38zY9BJTA3jCqvNcjomoNQ7iX5HFAw7FA4AoolpaVGoJGzd +oDbXFzYJJq5/x+9whY5xnesv3zUvVjM8e62mt30nnB9EJg6EtivwIV2Kwvz0Gs5m +IeCDkaVicmQ0IY2MJkTQm0cxq78PC9Acji4krJHDkeh0F2tv7t9OEv6D69rqgY7Q +hqIQSMEVJFvihTKD1oGxzngeCRpsrjvnrVK+oNFD43QRYU3/OoO0EMKHkuOMlexK +l28IOHvrYogw6nBX5bUGqx3N8XXvT5WHxxH4/3UALyJYVc/Niox5PRb9FbP7OIkf ++/8EEJQlh0jLqJvB6jRUTTusc4/S7bCLWqGuj9KeH4rYnfzDieNJc4w6n6fafas+ +hYTSqz08SJIz7Bj/lZvXkVZQWwlWpUq2PzTeflGazAkhmnBcisz7NkikwCkSHUem +wykUwqiQDdeyZ8nOjOJYIrilYiAciNT/3M2OvKS3lX6lArkhlFPLrd5nSC/A34fC +tA6g2LY81DK6EXLrvjV1J1Rk9/QnmpLLqXTR5bWtjFUL+OeYolju1dRjZMns1hws +MLwympcF2QzCZRLPAom9QOpHEB1kcc5kpovJWFEKSx/vOKtbBb1SP+TdrwZmjuQe +yRo67OEYZl8CU/0dRmdTBn8mDZ2JvUvGWE2cwt4Sr1OjrV3THvR53NubPW9cnl86 +fvxA9Z8i9woxm7145iHkQI9A2UDvwXJBYygObmf4w73kFog0uPZszEyjWxhwRHlI +tALvx2eo8onz4w+Pv0WhpeAyPkUP9xNH53LzMKwhBheLIUmgXwuKksis+HDeKLSc +UmIQjHnnIJBz35ME536TBQ== -----END ENCRYPTED PRIVATE KEY----- diff --git a/tests/wpt/web-platform-tests/tools/certs/cacert.pem b/tests/wpt/web-platform-tests/tools/certs/cacert.pem index 101ed617415..79bf67fe512 100644 --- a/tests/wpt/web-platform-tests/tools/certs/cacert.pem +++ b/tests/wpt/web-platform-tests/tools/certs/cacert.pem @@ -1,61 +1,61 @@ -----BEGIN CERTIFICATE----- -MIIW5zCCFc+gAwIBAgIDCrFbMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl -Yi1wbGF0Zm9ybS10ZXN0czAeFw0yMjA3MTIxMjQ1MTdaFw0yMzA3MTIxMjQ1MTda +MIIW5zCCFc+gAwIBAgIDBwluMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl +Yi1wbGF0Zm9ybS10ZXN0czAeFw0yMzA1MTIwMDU3MzFaFw0yNDA1MTEwMDU3MzFa MB0xGzAZBgNVBAMMEndlYi1wbGF0Zm9ybS10ZXN0czCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAOIOEkl98dlmCeI7SCy2wyAALDEblG813gVVErnMjOPl -o6BpynugeJx7OX85cGJXpn/xiPZi7922W+swGnBCtoe073kMif6WQRylplkJQhqf -I92IaDecX+f5ROTr7mCcloolt2yRohsAODe1TLZ7VqXouVEMws4+Y5Sp+TMG011Y -mB+qFEYIjhmvH0w4UoQxz5TBtvj6nkFoRdZRgnLbIkJZ0HVtefy1AhEsOgnz7yba -pstR97iZTuro0E6hcnMAdEKpXXXSYqV3HYPZzn9YAA8BloAM0GHSS9yWMRoV7UnS -07YjsorpbE6iQAV/CAWZtBaLmMlNY+cxefEK2NRPqhECAwEAAaOCFC4wghQqMAwG -A1UdEwQFMAMBAf8wHQYDVR0OBBYEFMo8kufcUDkL5UQ/32+RXOKIKjrWMEcGA1Ud -IwRAMD6AFMo8kufcUDkL5UQ/32+RXOKIKjrWoSGkHzAdMRswGQYDVQQDDBJ3ZWIt -cGxhdGZvcm0tdGVzdHOCAwqxWzALBgNVHQ8EBAMCAgQwggoFBgNVHR4Eggn8MIIJ -+KCCCfQwE4IRd2ViLXBsYXRmb3JtLnRlc3QwF4IVd3d3LndlYi1wbGF0Zm9ybS50 -ZXN0MBeCFW5vdC13ZWItcGxhdGZvcm0udGVzdDAYghZ3d3cxLndlYi1wbGF0Zm9y -bS50ZXN0MBiCFnd3dzIud2ViLXBsYXRmb3JtLnRlc3QwG4IZd3d3Lnd3dy53ZWIt -cGxhdGZvcm0udGVzdDAbghl3d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0MByCGnd3 +BQADggEPADCCAQoCggEBALGQERXCyZ4A9Ptm/ykUNcakBY1e02WQWcGjIQBEI15X +HdGBoloXg+Nz1Q9yPNtJX4Iy+RUaOEQ+OROMeIytk3pLreNLT6U7b7aaLMYGNltO +ldfwecpOTJpowt6npqXfGXfYZg87GQnft15eowH7RGC7MRS/6jtatqfHq3A3gq27 +u/R67V9YnnMhPd0JkFQ55Rwfaq/ekNlpH8zEHaz4Nm78ztUXEHbjemsMq78dt1QI +hWFCxBUsaL7SQsSV9mXdhxTjsfMARWQKjAKVGudaBbCCQ53R+oTkItykW1n6oDAr +AjBGz9j8LlxEAvpJKwEQegoPKLkKWiuYULJhMxtoZU0CAwEAAaOCFC4wghQqMAwG +A1UdEwQFMAMBAf8wHQYDVR0OBBYEFPESRpt+4PjsmOP+jnFDhkkg+KTlMEcGA1Ud +IwRAMD6AFPESRpt+4PjsmOP+jnFDhkkg+KTloSGkHzAdMRswGQYDVQQDDBJ3ZWIt +cGxhdGZvcm0tdGVzdHOCAwcJbjALBgNVHQ8EBAMCAgQwggoFBgNVHR4Eggn8MIIJ ++KCCCfQwE4IRd2ViLXBsYXRmb3JtLnRlc3QwF4IVbm90LXdlYi1wbGF0Zm9ybS50 +ZXN0MBeCFXd3dy53ZWItcGxhdGZvcm0udGVzdDAYghZ3d3cxLndlYi1wbGF0Zm9y +bS50ZXN0MBiCFnd3dzIud2ViLXBsYXRmb3JtLnRlc3QwG4IZd3d3Lm5vdC13ZWIt +cGxhdGZvcm0udGVzdDAbghl3d3cud3d3LndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3 dy53d3cyLndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dy53d3cxLndlYi1wbGF0Zm9y -bS50ZXN0MByCGnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzEud3d3 -LndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0 -MByCGnd3dzIud3d3LndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzEud3d3MS53ZWIt -cGxhdGZvcm0udGVzdDAdght3d3cyLnd3dzEud2ViLXBsYXRmb3JtLnRlc3QwHYIb -d3d3MS53d3cyLndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzIud3d3Mi53ZWItcGxh +bS50ZXN0MByCGnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzIud3d3 +LndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzEud3d3LndlYi1wbGF0Zm9ybS50ZXN0 +MByCGnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzEud3d3Mi53ZWIt +cGxhdGZvcm0udGVzdDAdght3d3cxLnd3dzEud2ViLXBsYXRmb3JtLnRlc3QwHYIb +d3d3Mi53d3cyLndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzIud3d3MS53ZWItcGxh dGZvcm0udGVzdDAfgh13d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdDAggh53 -d3cyLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3Lnd3dzEubm90LXdl -Yi1wbGF0Zm9ybS50ZXN0MCCCHnd3dzEud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz -dDAggh54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3Lnd3dzIu -bm90LXdlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzEud3d3MS5ub3Qtd2ViLXBsYXRm -b3JtLnRlc3QwIYIfd3d3Mi53d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdDAhgh93 -d3cyLnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzEud3d3Mi5ub3Qt -d2ViLXBsYXRmb3JtLnRlc3QwJIIieG4tLWx2ZS02bGFkLm5vdC13ZWItcGxhdGZv -cm0udGVzdDAkgiJ3d3cueG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0MCSC -InhuLS1sdmUtNmxhZC53d3cud2ViLXBsYXRmb3JtLnRlc3QwJYIjeG4tLWx2ZS02 -bGFkLnd3dzIud2ViLXBsYXRmb3JtLnRlc3QwJYIjeG4tLWx2ZS02bGFkLnd3dzEu +d3cud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3Lnd3dzEubm90LXdl +Yi1wbGF0Zm9ybS50ZXN0MCCCHnd3dzIud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz +dDAggh53d3cxLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwIIIeeG4tLWx2ZS02 +bGFkLndlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzEud3d3MS5ub3Qtd2ViLXBsYXRm +b3JtLnRlc3QwIYIfd3d3MS53d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdDAhgh93 +d3cyLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzIud3d3MS5ub3Qt +d2ViLXBsYXRmb3JtLnRlc3QwJIIieG4tLWx2ZS02bGFkLnd3dy53ZWItcGxhdGZv +cm0udGVzdDAkgiJ4bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCSC +Ind3dy54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3QwJYIjeG4tLWx2ZS02 +bGFkLnd3dzIud2ViLXBsYXRmb3JtLnRlc3QwJYIjd3d3MS54bi0tbHZlLTZsYWQu d2ViLXBsYXRmb3JtLnRlc3QwJYIjd3d3Mi54bi0tbHZlLTZsYWQud2ViLXBsYXRm -b3JtLnRlc3QwJYIjd3d3MS54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3Qw +b3JtLnRlc3QwJYIjeG4tLWx2ZS02bGFkLnd3dzEud2ViLXBsYXRmb3JtLnRlc3Qw KIImeG4tLWx2ZS02bGFkLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwKIImd3d3 -LnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYIneG4tLWx2ZS02 -bGFkLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCmCJ3huLS1sdmUtNmxhZC53 -d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdDApgid3d3cxLnhuLS1sdmUtNmxhZC5u -b3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYInd3d3Mi54bi0tbHZlLTZsYWQubm90LXdl +LnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYInd3d3Mi54bi0t +bHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCmCJ3d3dzEueG4tLWx2ZS02 +bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdDApgid4bi0tbHZlLTZsYWQud3d3Mi5u +b3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYIneG4tLWx2ZS02bGFkLnd3dzEubm90LXdl Yi1wbGF0Zm9ybS50ZXN0MCuCKXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1w bGF0Zm9ybS50ZXN0MC2CK3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQud2ViLXBs YXRmb3JtLnRlc3QwL4IteG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3LndlYi1w bGF0Zm9ybS50ZXN0MC+CLXd3dy54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWIt cGxhdGZvcm0udGVzdDAvgi14bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2Vi -LXBsYXRmb3JtLnRlc3QwMIIud3d3Mi54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53 -ZWItcGxhdGZvcm0udGVzdDAwgi54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cx +LXBsYXRmb3JtLnRlc3QwMIIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3MS53 +ZWItcGxhdGZvcm0udGVzdDAwgi53d3cyLnhuLS1uOGo2ZHM1M2x3d2tycWh2Mjhh LndlYi1wbGF0Zm9ybS50ZXN0MDCCLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3 dzIud2ViLXBsYXRmb3JtLnRlc3QwMIIud3d3MS54bi0tbjhqNmRzNTNsd3drcnFo djI4YS53ZWItcGxhdGZvcm0udGVzdDAxgi94bi0tbHZlLTZsYWQueG4tLWx2ZS02 -bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdDAzgjF4bi0tbjhqNmRzNTNsd3drcnFo -djI4YS53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDOCMXd3dy54bi0tbjhqNmRz -NTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwNIIyeG4tLW44ajZk -czUzbHd3a3JxaHYyOGEud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwNIIyeG4t -LW44ajZkczUzbHd3a3JxaHYyOGEud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3Qw -NIIyd3d3Mi54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3Jt -LnRlc3QwNIIyd3d3MS54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBs +bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdDAzgjF3d3cueG4tLW44ajZkczUzbHd3 +a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDOCMXhuLS1uOGo2ZHM1M2x3 +d2tycWh2MjhhLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwNIIyd3d3MS54bi0t +bjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwNIIyd3d3 +Mi54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3Qw +NIIyeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3MS5ub3Qtd2ViLXBsYXRmb3Jt +LnRlc3QwNIIyeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3Mi5ub3Qtd2ViLXBs YXRmb3JtLnRlc3QwOII2eG4tLWx2ZS02bGFkLnhuLS1uOGo2ZHM1M2x3d2tycWh2 MjhhLndlYi1wbGF0Zm9ybS50ZXN0MDiCNnhuLS1uOGo2ZHM1M2x3d2tycWh2Mjhh LnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdDA8gjp4bi0tbjhqNmRzNTNs @@ -65,49 +65,49 @@ YXRmb3JtLnRlc3QwQ4JBeG4tLW44ajZkczUzbHd3a3JxaHYyOGEueG4tLW44ajZk czUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3QwR4JFeG4tLW44ajZkczUz bHd3a3JxaHYyOGEueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0 Zm9ybS50ZXN0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMIIJhQYDVR0RBIIJfDCCCXiC -EXdlYi1wbGF0Zm9ybS50ZXN0ghV3d3cud2ViLXBsYXRmb3JtLnRlc3SCFW5vdC13 +EXdlYi1wbGF0Zm9ybS50ZXN0ghVub3Qtd2ViLXBsYXRmb3JtLnRlc3SCFXd3dy53 ZWItcGxhdGZvcm0udGVzdIIWd3d3MS53ZWItcGxhdGZvcm0udGVzdIIWd3d3Mi53 -ZWItcGxhdGZvcm0udGVzdIIZd3d3Lnd3dy53ZWItcGxhdGZvcm0udGVzdIIZd3d3 -Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIad3d3Lnd3dzIud2ViLXBsYXRmb3JtLnRl +ZWItcGxhdGZvcm0udGVzdIIZd3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIZd3d3 +Lnd3dy53ZWItcGxhdGZvcm0udGVzdIIad3d3Lnd3dzIud2ViLXBsYXRmb3JtLnRl c3SCGnd3dy53d3cxLndlYi1wbGF0Zm9ybS50ZXN0ghp3d3cyLm5vdC13ZWItcGxh -dGZvcm0udGVzdIIad3d3MS53d3cud2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEubm90 -LXdlYi1wbGF0Zm9ybS50ZXN0ghp3d3cyLnd3dy53ZWItcGxhdGZvcm0udGVzdIIb -d3d3MS53d3cxLndlYi1wbGF0Zm9ybS50ZXN0ght3d3cyLnd3dzEud2ViLXBsYXRm -b3JtLnRlc3SCG3d3dzEud3d3Mi53ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cy +dGZvcm0udGVzdIIad3d3Mi53d3cud2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEud3d3 +LndlYi1wbGF0Zm9ybS50ZXN0ghp3d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIIb +d3d3MS53d3cyLndlYi1wbGF0Zm9ybS50ZXN0ght3d3cxLnd3dzEud2ViLXBsYXRm +b3JtLnRlc3SCG3d3dzIud3d3Mi53ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cx LndlYi1wbGF0Zm9ybS50ZXN0gh13d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz -dIIed3d3Mi53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh53d3cud3d3MS5ub3Qt -d2ViLXBsYXRmb3JtLnRlc3SCHnd3dzEud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz -dIIeeG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0gh53d3cud3d3Mi5ub3Qt +dIIed3d3Lnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh53d3cud3d3MS5ub3Qt +d2ViLXBsYXRmb3JtLnRlc3SCHnd3dzIud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz +dIIed3d3MS53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh54bi0tbHZlLTZsYWQu d2ViLXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRl -c3SCH3d3dzIud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3MS5u -b3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3Mi5ub3Qtd2ViLXBsYXRmb3Jt -LnRlc3SCInhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCInd3dy54 -bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC53d3cu +c3SCH3d3dzEud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3Mi5u +b3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3MS5ub3Qtd2ViLXBsYXRmb3Jt +LnRlc3SCInhuLS1sdmUtNmxhZC53d3cud2ViLXBsYXRmb3JtLnRlc3SCInhuLS1s +dmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCInd3dy54bi0tbHZlLTZsYWQu d2ViLXBsYXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53d3cyLndlYi1wbGF0Zm9y -bS50ZXN0giN4bi0tbHZlLTZsYWQud3d3MS53ZWItcGxhdGZvcm0udGVzdIIjd3d3 -Mi54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCI3d3dzEueG4tLWx2ZS02 -bGFkLndlYi1wbGF0Zm9ybS50ZXN0giZ4bi0tbHZlLTZsYWQud3d3Lm5vdC13ZWIt +bS50ZXN0giN3d3cxLnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdIIjd3d3 +Mi54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53 +d3cxLndlYi1wbGF0Zm9ybS50ZXN0giZ4bi0tbHZlLTZsYWQud3d3Lm5vdC13ZWIt cGxhdGZvcm0udGVzdIImd3d3LnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3Jt -LnRlc3SCJ3huLS1sdmUtNmxhZC53d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIIn -eG4tLWx2ZS02bGFkLnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gid3d3cxLnhu -LS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3d3dzIueG4tLWx2ZS02 -bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdIIpeG4tLW44ajZkczUzbHd3a3JxaHYy +LnRlc3SCJ3d3dzIueG4tLWx2ZS02bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdIIn +d3d3MS54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0gid4bi0tbHZl +LTZsYWQud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3huLS1sdmUtNmxhZC53 +d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIIpeG4tLW44ajZkczUzbHd3a3JxaHYy OGEud2ViLXBsYXRmb3JtLnRlc3SCK3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQu d2ViLXBsYXRmb3JtLnRlc3SCLXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dy53 ZWItcGxhdGZvcm0udGVzdIItd3d3LnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndl Yi1wbGF0Zm9ybS50ZXN0gi14bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2Vi -LXBsYXRmb3JtLnRlc3SCLnd3dzIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi LXBsYXRmb3JtLnRlc3SCLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEud2Vi +LXBsYXRmb3JtLnRlc3SCLnd3dzIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi LXBsYXRmb3JtLnRlc3SCLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIud2Vi LXBsYXRmb3JtLnRlc3SCLnd3dzEueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi LXBsYXRmb3JtLnRlc3SCL3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQubm90LXdl -Yi1wbGF0Zm9ybS50ZXN0gjF4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cubm90 -LXdlYi1wbGF0Zm9ybS50ZXN0gjF3d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEu -bm90LXdlYi1wbGF0Zm9ybS50ZXN0gjJ4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53 -d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIIyeG4tLW44ajZkczUzbHd3a3JxaHYy -OGEud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCMnd3dzIueG4tLW44ajZkczUz -bHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjJ3d3cxLnhuLS1uOGo2 -ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZvcm0udGVzdII2eG4tLWx2ZS02 +Yi1wbGF0Zm9ybS50ZXN0gjF3d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90 +LXdlYi1wbGF0Zm9ybS50ZXN0gjF4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cu +bm90LXdlYi1wbGF0Zm9ybS50ZXN0gjJ3d3cxLnhuLS1uOGo2ZHM1M2x3d2tycWh2 +MjhhLm5vdC13ZWItcGxhdGZvcm0udGVzdIIyd3d3Mi54bi0tbjhqNmRzNTNsd3dr +cnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCMnhuLS1uOGo2ZHM1M2x3d2ty +cWh2MjhhLnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjJ4bi0tbjhqNmRzNTNs +d3drcnFodjI4YS53d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdII2eG4tLWx2ZS02 bGFkLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gjZ4 bi0tbjhqNmRzNTNsd3drcnFodjI4YS54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3Jt LnRlc3SCOnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1sdmUtNmxhZC5ub3Qt @@ -115,11 +115,11 @@ d2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3dr cnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCQXhuLS1uOGo2ZHM1M2x3d2ty cWh2MjhhLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0 gkV4bi0tbjhqNmRzNTNsd3drcnFodjI4YS54bi0tbjhqNmRzNTNsd3drcnFodjI4 -YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJKoZIhvcNAQELBQADggEBAFgUyc+X -AMTXjKv+IuKOSKSNp5WsA7tNEK8HHvKyKraX611JTPUejxohoSZv7scL2+8GOMsq -9I9mmju4l0F45FiphfrR3swVquSM1jK6k9BDTchQU5FQOoBhunvrtwb7Y64/AiCy -ZRE7nkOtV/6mIjrGjFu97JT0OwbZ+SFw+bNVWmf6RMea550ODCS/jsEo3Scbihya -oHPCVFk29oEBqOOlWITasEc5Z4IpZRn31mT3YV/+GHfMDJ16lEENwg2iXIrjcU0a -a0/KCLgRZKBNorlVt3E/3awQVJV2qn4Ei7sMaIjPn4oMen166poZe7oA8mKHaavp -VKvWQ5Gh5LHGhZs= +YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJKoZIhvcNAQELBQADggEBAHmWNJCj +6J8HohdpZBK9UsU8Fs615djgKGi0s474l+2A2Ul2WxONz7XzuIRMc5qt3gbiXh7w +ypk2BhAayyw0viUDh1AVenvUC/GD6HAW7zz7f9p02/rc4K6Jyt/5Oo8PNFzesWSs +Mw8eTg4Y6AupFp9fKRXNkEQ7gDbqWP4UYKj1YWESRH85OsaAuyBTOnl7CdCYJHtI +Exz3dd72SK1lq86b6IoGiW2jEY1/1GMK10Gid349qYapkYizYyaRZO16O++FXWC+ +dWH3p8FO4jgixV8aTwfgrLmx0RPNrWk6u11ePE1K2n4naruqJAONugmZG3LWGLHO +lwo3HjEOzXXqD2Y= -----END CERTIFICATE----- diff --git a/tests/wpt/web-platform-tests/tools/certs/web-platform.test.key b/tests/wpt/web-platform-tests/tools/certs/web-platform.test.key index 26b926f7a5f..f1eb177cad2 100644 --- a/tests/wpt/web-platform-tests/tools/certs/web-platform.test.key +++ b/tests/wpt/web-platform-tests/tools/certs/web-platform.test.key @@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- -MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDf1DWXJxBWd17d -IofHTgQIBfsq32PiaxjN/89gNhC+rB4RHwhnCX3cuvLPDOvvMpA4GCXAX3pYeDSV -OBks6xuZNx25BQTvV0ydCDhf7YVkkRZfj1x0bRPknwSNDjCE0NPH40AghmS/h+Tf -GU80rQDFji0/FapcswmLMmKcB9kl+dvudmaSWqCnWZTpT/kyLBWSd5+mkA6S1br2 -lQSIE6N5O9oaU1jAK1E6jQ2ld3DFM8JINRW9fsx7u5OMu2gds84AbGPc1bPOW9ad -gFrcxngiYdHGZ0hvYLi7RofbD3OR0CTir4txNd0YXewTcENKBcBb7i2DRP9J8nuy -5YUhycgXAgMBAAECggEAGMEPbDgVxnpNM4euHIy0RW7j6Enscg4GIEI6XRmdoHjI -mnwkIcEa+l5ynBOBxGKDMLD6+9uTXFVu+1HI9v7Jfphp4Rx8/ztYbcWK9pD+P7EM -GGVyhC3MFWzAxBjdpNKzmVe4r+AtJEGTPlk+OUUo4LBosKFkxfvHAm4AGeGEUn6q -ppoaJbGjjbeKzZFkS6RdHqpJJ4b/o8oOlraHAEZb/vJk31pgokUBV1Hh0BYeLuHA -ugQT2+a8sX3MwbHC8+6poPR5kpmQUzoVEuN+Iz/ccr9ruUeD10TFcQYl/4gx/gl4 -isjLK3mDCAt7FWGWeVuIjxyBOTrCeyHP0cZza8oKgQKBgQD5MYy3FNXdH9TowU54 -0J+0nAkoSz3w6Tsg9J2jdUtJ+l4yITiFd4p4512q8aVcaTIwQCCGEWxE3Y7Cbt09 -YAK+BLNnXaGQPYomIvt9W8zOrjp/5sB1ac40q5e90Ng9czVHWIGDxE5pEpg8eHza -PxxdhCGAkEtkahKpYn6nqT7S+wKBgQDl8U0e05DerY36hxSmWVSv+P7ccwzq/FWS -oke1CUTO2njt/IWiPI/Di5VZl0jQ7vChcHVFpFn/Igr4sWq30fqdRvNjGV78Htyy -2Jd6XpLSDOHdJr4Ykx0WORenXerdvZB1+OV78I2m1BgVS/OOhOgwK9LhTYlMHVIn -hU1ASbo0lQKBgQCzoT44M3K+xVVquv3gJTMatGf9fc+Wu+l9pheEXub42tvP8xaV -T0ioQs/IjAyRgttE4NURD7omIjfofJZKyczwQN86Icp2+YV+XDVBdk06p2lQDXyq -pqyYVyE5GTTnhwbe+TPTUkzbfSX0YT5O7LN7zeWAkYNnTPdK1s9J+LxqxQKBgQCR -vzUmyOsWeeN4XI6WMiEfuS+yA6q4d2C2JO5WrZ1Tj97+2gTKJKDrTVpJAz9AT3Nu -oJ10mwwAT0+s+qeuBAZaElLLCZXPMLCrG+ZHxhJB2bCAQMJVSUoyf9WiXEE2c6VR -YYXz3TGsANuTBCVIvK1/ewebj03rVNpx+mhQy2qfUQKBgQDYzRKBO21bpw0IcD1v -r35D688y55bG2vTjV2vFoUpanLV6gftY473C/gwNJXAs69uJIeT9AM+KE6n/3bEK -8rS8M6TcN8I3cRYwNnx+OPFF+YD8KVsbv8I2y2Gu1xGrMd+PyAHYnQmXcaYqN7eU -hqH7BXYpwNm96Lm4De1W+tXPJA== +MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC2skGFCv8b3v+p +KSbn/2RpcWzUab1/gbRgydfidP762Ltsj5L+tuaHtdzvqt7a1ySc3fwDr49qJtxc +WZrFKl7xecKA847isx1WoPm+fmAwaLQPqQlH+hgTrAfrofN22FPewaKz+XCeGIIR +bnipZssv0Td3o1C5sYVmhdsoKRWnF90RNXUCtJ1GcrtnDxuaYY/l++n3Hx37nUQt +iw2IC7fqfCPMsFOGiPefskVuNoUDXyBhTd0rZWEXqU/qrxhljkRFUVq8ILWw6Ie1 +Bgst+HUW8Sp0Dir2VRcpYoIMWF4NY7TyeC39xWz4FGoCGiM3NdWNCDyfOqzDKFeu +a1Dr3AjhAgMBAAECggEBAKxK7Uk3tqAlLHvuSDev/ZUHF7g2RDR0MJS6pXJ2HWSZ +ch+OQvUdrcg8NTB8txAwpuGc4ybisOBN57Db+/6G1+TojAqqJo0al8dzpjME4Vel +1nGSWyNa8svSh+Gq6HyixG2ltPf/fDpMKJWh1f8D5wigSKv2A5IrnP+zqpt0K2xY +ltDiuMCjLO86TMeQDBA/KDL2fw4VObDjuA7H1IBRWJvC/n1Js/Am/y+FKOUA/aMW +x4lgDhx2ISoti9uS6EfKxMb5Tj4FEXVDgmqETW7k4mhZN/LynBKeJ+Cl/2VpyqnO +1+EFVqcHnaZSttqoUQlSiR2E37Qry9PV4tm4vUkMsAECgYEA6Y/l/52dHpe8A4AE +t3lT0RxHypJtN36L30f7xPXSYGu8q/2QpPHESgSEsEa9OxAgHHPjj/F0SMu+BXBo +MeO57gbTEidqRbS1zOdnzWtFNECwZV0T80rXt8awuGH+hbzDUcjHW50s9Wh1jaMW +5xeuEKU5YuxPFx7qu8acG5jWCmECgYEAyD9kNBkUxWotofqpiOWfXJZjjiuaj48E +l1t8DxuXhjRlPIB8Z7k3+rEgGkeBOw4UsX3SUbbVCLRe4Qye/G6sFg0xtEgJpkHW +uCTVohrzGhQmPA+7Cu0pQOvmlh60bFh1ATU1ePxrMyWZUFn2d1XdD4ZERdCUWC/2 +OM7wIzyfjoECgYEA3vWxV/y8GpI6txSkbAl0S/C1T9nMTOeO2s06uOD5vXXbnEvo +oqzw9r+tcyF0T0erf73ZhHW4zi1A7qxJqyZ7PZBiObhKqNRDoKFe5Cf83k7KlVjv +TJcrqpIP7VQOxthVlGMYfIpkerkHTvhbSqu+TMGNMLPpJGctKagFKgsSeMECgYAz +OBuuQ7gPYsA3TUEt9eXULddbFwYasC8xc8IAr0MLnb1DQ24Orc6GveWDM0T30Ps0 +BwXTxtsotdIK6EqGMNyta0SKY16seuyr/yfxpckGo57AABoMimrh4zUAsuvdRqbu +3yhFQPM+iuBzL/+duIWpoeM2pEo9YE8vaqb7rFb3gQKBgQCYRw+PH0k1Lp0Z2Z4H +2Nb2C25GoNHc5QA4au2ST3mKhlaqLYZqrg9yR58jR2IgD55xBQrmhxm6CyL/6Owa +26G2LRzj55FHIPVssnfgtVGUEEmiGxdpL6Q7nEue+2kvoAsdYql1JPavTCuTJCmj +pXFkinopUTpVFlVtXF5asrvU1w== -----END PRIVATE KEY----- diff --git a/tests/wpt/web-platform-tests/tools/certs/web-platform.test.pem b/tests/wpt/web-platform-tests/tools/certs/web-platform.test.pem index be1bfd5a1f1..7063a254dd6 100644 --- a/tests/wpt/web-platform-tests/tools/certs/web-platform.test.pem +++ b/tests/wpt/web-platform-tests/tools/certs/web-platform.test.pem @@ -1,121 +1,121 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 700764 (0xab15c) + Serial Number: 461167 (0x7096f) Signature Algorithm: sha256WithRSAEncryption Issuer: CN=web-platform-tests Validity - Not Before: Jul 12 12:45:17 2022 GMT - Not After : Jul 12 12:45:17 2023 GMT + Not Before: May 12 00:57:31 2023 GMT + Not After : May 11 00:57:31 2024 GMT Subject: CN=web-platform.test Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: - 00:df:d4:35:97:27:10:56:77:5e:dd:22:87:c7:4e: - 04:08:05:fb:2a:df:63:e2:6b:18:cd:ff:cf:60:36: - 10:be:ac:1e:11:1f:08:67:09:7d:dc:ba:f2:cf:0c: - eb:ef:32:90:38:18:25:c0:5f:7a:58:78:34:95:38: - 19:2c:eb:1b:99:37:1d:b9:05:04:ef:57:4c:9d:08: - 38:5f:ed:85:64:91:16:5f:8f:5c:74:6d:13:e4:9f: - 04:8d:0e:30:84:d0:d3:c7:e3:40:20:86:64:bf:87: - e4:df:19:4f:34:ad:00:c5:8e:2d:3f:15:aa:5c:b3: - 09:8b:32:62:9c:07:d9:25:f9:db:ee:76:66:92:5a: - a0:a7:59:94:e9:4f:f9:32:2c:15:92:77:9f:a6:90: - 0e:92:d5:ba:f6:95:04:88:13:a3:79:3b:da:1a:53: - 58:c0:2b:51:3a:8d:0d:a5:77:70:c5:33:c2:48:35: - 15:bd:7e:cc:7b:bb:93:8c:bb:68:1d:b3:ce:00:6c: - 63:dc:d5:b3:ce:5b:d6:9d:80:5a:dc:c6:78:22:61: - d1:c6:67:48:6f:60:b8:bb:46:87:db:0f:73:91:d0: - 24:e2:af:8b:71:35:dd:18:5d:ec:13:70:43:4a:05: - c0:5b:ee:2d:83:44:ff:49:f2:7b:b2:e5:85:21:c9: - c8:17 + 00:b6:b2:41:85:0a:ff:1b:de:ff:a9:29:26:e7:ff: + 64:69:71:6c:d4:69:bd:7f:81:b4:60:c9:d7:e2:74: + fe:fa:d8:bb:6c:8f:92:fe:b6:e6:87:b5:dc:ef:aa: + de:da:d7:24:9c:dd:fc:03:af:8f:6a:26:dc:5c:59: + 9a:c5:2a:5e:f1:79:c2:80:f3:8e:e2:b3:1d:56:a0: + f9:be:7e:60:30:68:b4:0f:a9:09:47:fa:18:13:ac: + 07:eb:a1:f3:76:d8:53:de:c1:a2:b3:f9:70:9e:18: + 82:11:6e:78:a9:66:cb:2f:d1:37:77:a3:50:b9:b1: + 85:66:85:db:28:29:15:a7:17:dd:11:35:75:02:b4: + 9d:46:72:bb:67:0f:1b:9a:61:8f:e5:fb:e9:f7:1f: + 1d:fb:9d:44:2d:8b:0d:88:0b:b7:ea:7c:23:cc:b0: + 53:86:88:f7:9f:b2:45:6e:36:85:03:5f:20:61:4d: + dd:2b:65:61:17:a9:4f:ea:af:18:65:8e:44:45:51: + 5a:bc:20:b5:b0:e8:87:b5:06:0b:2d:f8:75:16:f1: + 2a:74:0e:2a:f6:55:17:29:62:82:0c:58:5e:0d:63: + b4:f2:78:2d:fd:c5:6c:f8:14:6a:02:1a:23:37:35: + d5:8d:08:3c:9f:3a:ac:c3:28:57:ae:6b:50:eb:dc: + 08:e1 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Subject Key Identifier: - 53:34:14:49:85:A6:DE:7F:A4:F6:2C:42:A9:1A:9C:F7:D9:20:50:C1 + 55:E3:89:23:FF:B4:2F:9B:59:D4:B8:B7:E4:0D:C2:9A:61:86:2D:A6 X509v3 Authority Key Identifier: - keyid:CA:3C:92:E7:DC:50:39:0B:E5:44:3F:DF:6F:91:5C:E2:88:2A:3A:D6 + keyid:F1:12:46:9B:7E:E0:F8:EC:98:E3:FE:8E:71:43:86:49:20:F8:A4:E5 X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Subject Alternative Name: - DNS:web-platform.test, DNS:www.web-platform.test, DNS:not-web-platform.test, DNS:www1.web-platform.test, DNS:www2.web-platform.test, DNS:www.www.web-platform.test, DNS:www.not-web-platform.test, DNS:www.www2.web-platform.test, DNS:www.www1.web-platform.test, DNS:www2.not-web-platform.test, DNS:www1.www.web-platform.test, DNS:www1.not-web-platform.test, DNS:www2.www.web-platform.test, DNS:www1.www1.web-platform.test, DNS:www2.www1.web-platform.test, DNS:www1.www2.web-platform.test, DNS:www2.www2.web-platform.test, DNS:www.www.not-web-platform.test, DNS:www2.www.not-web-platform.test, DNS:www.www1.not-web-platform.test, DNS:www1.www.not-web-platform.test, DNS:xn--lve-6lad.web-platform.test, DNS:www.www2.not-web-platform.test, DNS:www1.www1.not-web-platform.test, DNS:www2.www2.not-web-platform.test, DNS:www2.www1.not-web-platform.test, DNS:www1.www2.not-web-platform.test, DNS:xn--lve-6lad.not-web-platform.test, DNS:www.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www.web-platform.test, DNS:xn--lve-6lad.www2.web-platform.test, DNS:xn--lve-6lad.www1.web-platform.test, DNS:www2.xn--lve-6lad.web-platform.test, DNS:www1.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www.not-web-platform.test, DNS:www.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www2.not-web-platform.test, DNS:xn--lve-6lad.www1.not-web-platform.test, DNS:www1.xn--lve-6lad.not-web-platform.test, DNS:www2.xn--lve-6lad.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.not-web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.not-web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test + DNS:web-platform.test, DNS:not-web-platform.test, DNS:www.web-platform.test, DNS:www1.web-platform.test, DNS:www2.web-platform.test, DNS:www.not-web-platform.test, DNS:www.www.web-platform.test, DNS:www.www2.web-platform.test, DNS:www.www1.web-platform.test, DNS:www2.not-web-platform.test, DNS:www2.www.web-platform.test, DNS:www1.www.web-platform.test, DNS:www1.not-web-platform.test, DNS:www1.www2.web-platform.test, DNS:www1.www1.web-platform.test, DNS:www2.www2.web-platform.test, DNS:www2.www1.web-platform.test, DNS:www.www.not-web-platform.test, DNS:www.www2.not-web-platform.test, DNS:www.www1.not-web-platform.test, DNS:www2.www.not-web-platform.test, DNS:www1.www.not-web-platform.test, DNS:xn--lve-6lad.web-platform.test, DNS:www1.www1.not-web-platform.test, DNS:www1.www2.not-web-platform.test, DNS:www2.www2.not-web-platform.test, DNS:www2.www1.not-web-platform.test, DNS:xn--lve-6lad.www.web-platform.test, DNS:xn--lve-6lad.not-web-platform.test, DNS:www.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www2.web-platform.test, DNS:www1.xn--lve-6lad.web-platform.test, DNS:www2.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www1.web-platform.test, DNS:xn--lve-6lad.www.not-web-platform.test, DNS:www.xn--lve-6lad.not-web-platform.test, DNS:www2.xn--lve-6lad.not-web-platform.test, DNS:www1.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www2.not-web-platform.test, DNS:xn--lve-6lad.www1.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.not-web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.not-web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.not-web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test Signature Algorithm: sha256WithRSAEncryption - 74:00:12:c7:43:34:fd:87:4e:f8:67:58:34:e2:c7:42:be:a8: - fc:61:df:11:9c:77:18:d5:0b:e6:92:a1:c2:d9:9b:20:a5:ee: - e8:81:ab:62:fb:55:67:35:95:fa:8b:b6:a5:3b:52:f7:d4:21: - e8:7c:b5:37:12:58:02:24:b5:7e:93:4f:6c:ce:5b:4b:af:8f: - fc:22:e2:03:2d:47:d2:87:43:c0:de:82:a7:5b:6a:97:2f:e9: - f7:46:f4:41:d2:35:07:62:c5:a4:e8:08:a2:90:1d:44:4a:3d: - 71:d6:c5:f5:40:2d:99:0d:33:4f:0f:31:69:f7:02:bd:c5:44: - b9:42:9e:f2:94:36:44:66:b8:b8:81:99:06:d2:b7:df:cb:b0: - 01:c8:5b:64:15:a4:75:78:da:71:b1:92:01:5b:55:7c:76:94: - a2:f3:1a:23:78:37:e5:65:51:0f:ca:66:91:d4:62:1b:b7:22: - d2:75:37:7e:67:ac:b5:9d:b3:50:c8:db:76:29:a1:73:21:74: - 71:9e:25:de:25:2a:2c:20:fb:e8:68:eb:9f:fc:f1:a7:85:69: - a4:a8:0d:93:4b:ff:f5:9d:32:31:d3:ca:7e:0e:79:f3:45:32: - d8:fc:35:12:d4:08:71:fd:e2:0e:64:55:a2:5a:f4:2f:be:19: - f1:2d:be:3f + a7:2c:41:42:13:d2:c0:0a:e5:f4:84:9e:b9:47:50:ed:b4:a8: + 09:41:c8:8c:3b:cc:a9:03:9f:6d:f8:7b:d2:e5:d9:87:55:a1: + 7a:00:9b:2c:5a:3a:c7:46:4d:02:9b:16:10:02:4c:0d:a5:68: + e2:79:07:21:a4:8e:42:51:ae:80:ab:f8:f8:34:5f:02:0b:72: + 66:18:3c:e3:da:98:f9:4c:70:19:5f:61:c2:49:9b:86:46:8c: + 5f:92:b4:3e:49:ef:d4:a7:f7:7c:0b:fc:b0:fb:7d:ec:73:5d: + a9:5a:58:47:b8:11:60:1b:43:2c:47:da:15:9e:6c:db:35:cc: + d8:f4:f4:99:11:94:e6:8e:bf:06:66:81:28:99:25:5e:e6:01: + 2b:16:c0:50:43:8a:12:04:c4:5d:6b:fa:8b:dd:ca:98:bc:7a: + 85:3a:c2:10:74:f2:e9:e6:b1:a7:bd:a7:d5:99:33:3b:15:e7: + 24:e4:d7:d8:9b:9d:84:60:e8:fd:17:4a:63:01:33:ad:30:e6: + ec:b0:aa:7b:31:f2:83:3c:6e:d9:3b:7c:02:e6:64:a3:c2:ee: + 88:1c:4b:43:bc:de:0b:94:2a:cb:7e:1b:ba:10:01:01:e0:a7: + d2:19:fd:1b:fe:43:df:0e:7b:e4:2f:25:12:99:b4:d5:c7:63: + fa:d1:de:cf -----BEGIN CERTIFICATE----- -MIIMsjCCC5qgAwIBAgIDCrFcMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl -Yi1wbGF0Zm9ybS10ZXN0czAeFw0yMjA3MTIxMjQ1MTdaFw0yMzA3MTIxMjQ1MTda +MIIMsjCCC5qgAwIBAgIDBwlvMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl +Yi1wbGF0Zm9ybS10ZXN0czAeFw0yMzA1MTIwMDU3MzFaFw0yNDA1MTEwMDU3MzFa MBwxGjAYBgNVBAMMEXdlYi1wbGF0Zm9ybS50ZXN0MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA39Q1lycQVnde3SKHx04ECAX7Kt9j4msYzf/PYDYQvqwe -ER8IZwl93Lryzwzr7zKQOBglwF96WHg0lTgZLOsbmTcduQUE71dMnQg4X+2FZJEW -X49cdG0T5J8EjQ4whNDTx+NAIIZkv4fk3xlPNK0AxY4tPxWqXLMJizJinAfZJfnb -7nZmklqgp1mU6U/5MiwVknefppAOktW69pUEiBOjeTvaGlNYwCtROo0NpXdwxTPC -SDUVvX7Me7uTjLtoHbPOAGxj3NWzzlvWnYBa3MZ4ImHRxmdIb2C4u0aH2w9zkdAk -4q+LcTXdGF3sE3BDSgXAW+4tg0T/SfJ7suWFIcnIFwIDAQABo4IJ+jCCCfYwCQYD -VR0TBAIwADAdBgNVHQ4EFgQUUzQUSYWm3n+k9ixCqRqc99kgUMEwHwYDVR0jBBgw -FoAUyjyS59xQOQvlRD/fb5Fc4ogqOtYwCwYDVR0PBAQDAgXgMBMGA1UdJQQMMAoG -CCsGAQUFBwMBMIIJhQYDVR0RBIIJfDCCCXiCEXdlYi1wbGF0Zm9ybS50ZXN0ghV3 -d3cud2ViLXBsYXRmb3JtLnRlc3SCFW5vdC13ZWItcGxhdGZvcm0udGVzdIIWd3d3 +AAOCAQ8AMIIBCgKCAQEAtrJBhQr/G97/qSkm5/9kaXFs1Gm9f4G0YMnX4nT++ti7 +bI+S/rbmh7Xc76re2tcknN38A6+PaibcXFmaxSpe8XnCgPOO4rMdVqD5vn5gMGi0 +D6kJR/oYE6wH66HzdthT3sGis/lwnhiCEW54qWbLL9E3d6NQubGFZoXbKCkVpxfd +ETV1ArSdRnK7Zw8bmmGP5fvp9x8d+51ELYsNiAu36nwjzLBThoj3n7JFbjaFA18g +YU3dK2VhF6lP6q8YZY5ERVFavCC1sOiHtQYLLfh1FvEqdA4q9lUXKWKCDFheDWO0 +8ngt/cVs+BRqAhojNzXVjQg8nzqswyhXrmtQ69wI4QIDAQABo4IJ+jCCCfYwCQYD +VR0TBAIwADAdBgNVHQ4EFgQUVeOJI/+0L5tZ1Li35A3CmmGGLaYwHwYDVR0jBBgw +FoAU8RJGm37g+OyY4/6OcUOGSSD4pOUwCwYDVR0PBAQDAgXgMBMGA1UdJQQMMAoG +CCsGAQUFBwMBMIIJhQYDVR0RBIIJfDCCCXiCEXdlYi1wbGF0Zm9ybS50ZXN0ghVu +b3Qtd2ViLXBsYXRmb3JtLnRlc3SCFXd3dy53ZWItcGxhdGZvcm0udGVzdIIWd3d3 MS53ZWItcGxhdGZvcm0udGVzdIIWd3d3Mi53ZWItcGxhdGZvcm0udGVzdIIZd3d3 -Lnd3dy53ZWItcGxhdGZvcm0udGVzdIIZd3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz +Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIZd3d3Lnd3dy53ZWItcGxhdGZvcm0udGVz dIIad3d3Lnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCGnd3dy53d3cxLndlYi1wbGF0 -Zm9ybS50ZXN0ghp3d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIIad3d3MS53d3cu -d2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0ghp3 -d3cyLnd3dy53ZWItcGxhdGZvcm0udGVzdIIbd3d3MS53d3cxLndlYi1wbGF0Zm9y -bS50ZXN0ght3d3cyLnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCG3d3dzEud3d3Mi53 -ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cyLndlYi1wbGF0Zm9ybS50ZXN0gh13 -d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIed3d3Mi53d3cubm90LXdlYi1w +Zm9ybS50ZXN0ghp3d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIIad3d3Mi53d3cu +d2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEud3d3LndlYi1wbGF0Zm9ybS50ZXN0ghp3 +d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIIbd3d3MS53d3cyLndlYi1wbGF0Zm9y +bS50ZXN0ght3d3cxLnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCG3d3dzIud3d3Mi53 +ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cxLndlYi1wbGF0Zm9ybS50ZXN0gh13 +d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIed3d3Lnd3dzIubm90LXdlYi1w bGF0Zm9ybS50ZXN0gh53d3cud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCHnd3 -dzEud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIeeG4tLWx2ZS02bGFkLndlYi1w -bGF0Zm9ybS50ZXN0gh53d3cud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3 -dzEud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3Mi5ub3Qtd2Vi -LXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SC -H3d3dzEud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC5u -b3Qtd2ViLXBsYXRmb3JtLnRlc3SCInd3dy54bi0tbHZlLTZsYWQud2ViLXBsYXRm -b3JtLnRlc3SCInhuLS1sdmUtNmxhZC53d3cud2ViLXBsYXRmb3JtLnRlc3SCI3hu -LS1sdmUtNmxhZC53d3cyLndlYi1wbGF0Zm9ybS50ZXN0giN4bi0tbHZlLTZsYWQu -d3d3MS53ZWItcGxhdGZvcm0udGVzdIIjd3d3Mi54bi0tbHZlLTZsYWQud2ViLXBs -YXRmb3JtLnRlc3SCI3d3dzEueG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0 +dzIud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIed3d3MS53d3cubm90LXdlYi1w +bGF0Zm9ybS50ZXN0gh54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCH3d3 +dzEud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3Mi5ub3Qtd2Vi +LXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SC +H3d3dzIud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC53 +d3cud2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRm +b3JtLnRlc3SCInd3dy54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCI3hu +LS1sdmUtNmxhZC53d3cyLndlYi1wbGF0Zm9ybS50ZXN0giN3d3cxLnhuLS1sdmUt +NmxhZC53ZWItcGxhdGZvcm0udGVzdIIjd3d3Mi54bi0tbHZlLTZsYWQud2ViLXBs +YXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53d3cxLndlYi1wbGF0Zm9ybS50ZXN0 giZ4bi0tbHZlLTZsYWQud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIImd3d3Lnhu -LS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3huLS1sdmUtNmxhZC53 -d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIIneG4tLWx2ZS02bGFkLnd3dzEubm90 -LXdlYi1wbGF0Zm9ybS50ZXN0gid3d3cxLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBs -YXRmb3JtLnRlc3SCJ3d3dzIueG4tLWx2ZS02bGFkLm5vdC13ZWItcGxhdGZvcm0u +LS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3d3dzIueG4tLWx2ZS02 +bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdIInd3d3MS54bi0tbHZlLTZsYWQubm90 +LXdlYi1wbGF0Zm9ybS50ZXN0gid4bi0tbHZlLTZsYWQud3d3Mi5ub3Qtd2ViLXBs +YXRmb3JtLnRlc3SCJ3huLS1sdmUtNmxhZC53d3cxLm5vdC13ZWItcGxhdGZvcm0u dGVzdIIpeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SC K3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCLXhu LS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dy53ZWItcGxhdGZvcm0udGVzdIItd3d3 LnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gi14bi0t -bjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCLnd3dzIu +bjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCLnhuLS1u +OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCLnd3dzIu eG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCLnhuLS1u -OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCLnhuLS1u OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCLnd3dzEu eG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCL3huLS1s -dmUtNmxhZC54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjF4bi0t -bjhqNmRzNTNsd3drcnFodjI4YS53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjF3 -d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0 -gjJ4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cyLm5vdC13ZWItcGxhdGZvcm0u -dGVzdIIyeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3MS5ub3Qtd2ViLXBsYXRm -b3JtLnRlc3SCMnd3dzIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1w -bGF0Zm9ybS50ZXN0gjJ3d3cxLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13 +dmUtNmxhZC54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjF3d3cu +eG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjF4 +bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0 +gjJ3d3cxLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZvcm0u +dGVzdIIyd3d3Mi54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRm +b3JtLnRlc3SCMnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEubm90LXdlYi1w +bGF0Zm9ybS50ZXN0gjJ4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cyLm5vdC13 ZWItcGxhdGZvcm0udGVzdII2eG4tLWx2ZS02bGFkLnhuLS1uOGo2ZHM1M2x3d2ty cWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gjZ4bi0tbjhqNmRzNTNsd3drcnFodjI4 YS54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1uOGo2ZHM1M2x3 @@ -124,10 +124,10 @@ LS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRm b3JtLnRlc3SCQXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1uOGo2ZHM1M2x3 d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gkV4bi0tbjhqNmRzNTNsd3drcnFo djI4YS54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRl -c3QwDQYJKoZIhvcNAQELBQADggEBAHQAEsdDNP2HTvhnWDTix0K+qPxh3xGcdxjV -C+aSocLZmyCl7uiBq2L7VWc1lfqLtqU7UvfUIeh8tTcSWAIktX6TT2zOW0uvj/wi -4gMtR9KHQ8Degqdbapcv6fdG9EHSNQdixaToCKKQHURKPXHWxfVALZkNM08PMWn3 -Ar3FRLlCnvKUNkRmuLiBmQbSt9/LsAHIW2QVpHV42nGxkgFbVXx2lKLzGiN4N+Vl -UQ/KZpHUYhu3ItJ1N35nrLWds1DI23YpoXMhdHGeJd4lKiwg++ho65/88aeFaaSo -DZNL//WdMjHTyn4OefNFMtj8NRLUCHH94g5kVaJa9C++GfEtvj8= +c3QwDQYJKoZIhvcNAQELBQADggEBAKcsQUIT0sAK5fSEnrlHUO20qAlByIw7zKkD +n234e9Ll2YdVoXoAmyxaOsdGTQKbFhACTA2laOJ5ByGkjkJRroCr+Pg0XwILcmYY +POPamPlMcBlfYcJJm4ZGjF+StD5J79Sn93wL/LD7fexzXalaWEe4EWAbQyxH2hWe +bNs1zNj09JkRlOaOvwZmgSiZJV7mASsWwFBDihIExF1r+ovdypi8eoU6whB08unm +sae9p9WZMzsV5yTk19ibnYRg6P0XSmMBM60w5uywqnsx8oM8btk7fALmZKPC7ogc +S0O83guUKst+G7oQAQHgp9IZ/Rv+Q98Oe+QvJRKZtNXHY/rR3s8= -----END CERTIFICATE----- diff --git a/tests/wpt/web-platform-tests/tools/ci/requirements_build.txt b/tests/wpt/web-platform-tests/tools/ci/requirements_build.txt index 4216606d3d7..a976e5d6398 100644 --- a/tests/wpt/web-platform-tests/tools/ci/requirements_build.txt +++ b/tests/wpt/web-platform-tests/tools/ci/requirements_build.txt @@ -1,5 +1,5 @@ cairocffi==1.5.1 -fonttools==4.39.3 +fonttools==4.39.4 genshi==0.7.7 jinja2==3.1.2 pyyaml==6.0 diff --git a/tests/wpt/web-platform-tests/tools/ci/requirements_tc.txt b/tests/wpt/web-platform-tests/tools/ci/requirements_tc.txt index 5c14ac4d40a..91789c95e30 100644 --- a/tests/wpt/web-platform-tests/tools/ci/requirements_tc.txt +++ b/tests/wpt/web-platform-tests/tools/ci/requirements_tc.txt @@ -1,4 +1,4 @@ -pygithub==1.58.1 +pygithub==1.58.2 pyyaml==6.0 requests==2.30.0 -taskcluster==49.1.3 +taskcluster==50.1.0 diff --git a/tests/wpt/web-platform-tests/tools/conftest.py b/tests/wpt/web-platform-tests/tools/conftest.py index 021a49fc297..8d1f585b0d8 100644 --- a/tests/wpt/web-platform-tests/tools/conftest.py +++ b/tests/wpt/web-platform-tests/tools/conftest.py @@ -1,3 +1,5 @@ +# mypy: disable-error-code="no-untyped-def" + import platform import os @@ -13,3 +15,12 @@ settings.register_profile("pypy", settings(deadline=None, settings.load_profile(os.getenv("HYPOTHESIS_PROFILE", "default" if impl != "PyPy" else "pypy")) + + +def pytest_ignore_collect(collection_path, path, config): + # ignore directories which have their own tox.ini + assert collection_path != config.rootpath + if (collection_path / "tox.ini").is_file(): + return True + + return None diff --git a/tests/wpt/web-platform-tests/tools/pytest.ini b/tests/wpt/web-platform-tests/tools/pytest.ini index c1e428d0717..bf58dc409aa 100644 --- a/tests/wpt/web-platform-tests/tools/pytest.ini +++ b/tests/wpt/web-platform-tests/tools/pytest.ini @@ -1,9 +1,28 @@ [pytest] -# Directories with their own tox.ini: wave, wpt, wptrunner -# Python 3 only: quic (it should have its own tox.ini eventually) -norecursedirs = .* {arch} *.egg third_party wave wpt wptrunner quic +norecursedirs = .* {arch} *.egg third_party xfail_strict = true addopts = --strict-markers markers = slow: marks tests as slow (deselect with '-m "not slow"') remote_network +filterwarnings = + error + # ignore importlib changes which six is unlikely to ever adopt + ignore:_SixMetaPathImporter.exec_module\(\) not found; falling back to load_module\(\):ImportWarning + ignore:_SixMetaPathImporter.find_spec\(\) not found; falling back to find_module\(\):ImportWarning + # ignore mozinfo deprecation warnings + ignore:distutils Version classes are deprecated\. Use packaging\.version instead\.:DeprecationWarning:mozinfo + # ingore mozinfo's dependency on distro + ignore:distro\.linux_distribution\(\) is deprecated\. It should only be used as a compatibility shim with Python's platform\.linux_distribution\(\)\. Please use distro\.id\(\), distro\.version\(\) and distro\.name\(\) instead\.:DeprecationWarning + # ignore mozversion deprecation warnings + ignore:This method will be removed in .*\.\s+Use 'parser\.read_file\(\)' instead\.:DeprecationWarning:mozversion + # ignore mozversion not cleanly closing .ini files + ignore:unclosed file.*\.ini:ResourceWarning:mozversion + # https://github.com/web-platform-tests/wpt/issues/39366 + always:The metaschema specified by \$schema was not found\. Using the latest draft to validate, but this will raise an error in the future\.:DeprecationWarning + # https://github.com/web-platform-tests/wpt/issues/39359 + always:'cgi' is deprecated and slated for removal in Python 3:DeprecationWarning + # https://github.com/web-platform-tests/wpt/issues/39373 + always:the imp module is deprecated in favour of importlib:DeprecationWarning + # https://github.com/web-platform-tests/wpt/issues/39827 + always:pkg_resources is deprecated as an API:DeprecationWarning diff --git a/tests/wpt/web-platform-tests/tools/requirements_mypy.txt b/tests/wpt/web-platform-tests/tools/requirements_mypy.txt index 1044bca9407..b027108a81f 100644 --- a/tests/wpt/web-platform-tests/tools/requirements_mypy.txt +++ b/tests/wpt/web-platform-tests/tools/requirements_mypy.txt @@ -1,14 +1,14 @@ -mypy==1.2.0 +mypy==1.3.0 mypy-extensions==1.0.0 toml==0.10.2 tomli==2.0.1 typed-ast==1.5.4 types-atomicwrites==1.4.5.1 -types-python-dateutil==2.8.19.12 +types-python-dateutil==2.8.19.13 types-PyYAML==6.0.12.9 -types-requests==2.28.11.17 -types-setuptools==67.7.0.1 +types-requests==2.30.0.0 +types-setuptools==67.7.0.2 types-six==1.16.21.8 types-ujson==5.7.0.5 -types-urllib3==1.26.25.11 +types-urllib3==1.26.25.13 typing_extensions==4.5.0 diff --git a/tests/wpt/web-platform-tests/tools/requirements_pytest.txt b/tests/wpt/web-platform-tests/tools/requirements_pytest.txt index 4fcbab6c702..afab5448312 100644 --- a/tests/wpt/web-platform-tests/tools/requirements_pytest.txt +++ b/tests/wpt/web-platform-tests/tools/requirements_pytest.txt @@ -1,3 +1,3 @@ pytest==7.3.1 pytest-cov==4.0.0 -hypothesis==6.75.1 +hypothesis==6.75.2 diff --git a/tests/wpt/web-platform-tests/tools/requirements_tests.txt b/tests/wpt/web-platform-tests/tools/requirements_tests.txt index 8a4b54f4dcd..ca946a306e7 100644 --- a/tests/wpt/web-platform-tests/tools/requirements_tests.txt +++ b/tests/wpt/web-platform-tests/tools/requirements_tests.txt @@ -2,4 +2,4 @@ httpx[http2]==0.24.0 json-e==4.5.2 jsonschema==4.17.3 pyyaml==6.0 -taskcluster==49.1.3 +taskcluster==50.1.0 diff --git a/tests/wpt/web-platform-tests/tools/wave/tests/test_wave.py b/tests/wpt/web-platform-tests/tools/wave/tests/test_wave.py index 01b3e93f133..a7d87a38e1b 100644 --- a/tests/wpt/web-platform-tests/tools/wave/tests/test_wave.py +++ b/tests/wpt/web-platform-tests/tools/wave/tests/test_wave.py @@ -52,3 +52,4 @@ def test_serve(): break finally: os.killpg(p.pid, 15) + p.wait(10) diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/browsing_context.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/browsing_context.py index abaf569f928..f2abb4764e2 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/browsing_context.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/browsing_context.py @@ -7,9 +7,7 @@ from ._module import BidiModule, command class BrowsingContext(BidiModule): @command def capture_screenshot(self, context: str) -> Mapping[str, Any]: - params: MutableMapping[str, Any] = { - "context": context - } + params: MutableMapping[str, Any] = {"context": context} return params @@ -28,7 +26,9 @@ class BrowsingContext(BidiModule): return params @command - def create(self, type_hint: str, reference_context: Optional[str] = None) -> Mapping[str, Any]: + def create(self, + type_hint: str, + reference_context: Optional[str] = None) -> Mapping[str, Any]: params: MutableMapping[str, Any] = {"type": type_hint} if reference_context is not None: @@ -63,9 +63,10 @@ class BrowsingContext(BidiModule): return result["contexts"] @command - def navigate( - self, context: str, url: str, wait: Optional[str] = None - ) -> Mapping[str, Any]: + def navigate(self, + context: str, + url: str, + wait: Optional[str] = None) -> Mapping[str, Any]: params: MutableMapping[str, Any] = {"context": context, "url": url} if wait is not None: params["wait"] = wait @@ -82,20 +83,28 @@ class BrowsingContext(BidiModule): return result @command - def print( - self, - context: str, - background: Optional[bool] = None, - margin: Optional[Mapping[str, Any]] = None, - orientation: Optional[str] = None, - page: Optional[Mapping[str, Any]] = None, - page_ranges: Optional[List[str]] = None, - scale: Optional[float] = None, - shrink_to_fit: Optional[bool] = None - ) -> Mapping[str, Any]: - params: MutableMapping[str, Any] = { - "context": context - } + def reload(self, + context: str, + ignore_cache: Optional[bool] = None, + wait: Optional[str] = None) -> Mapping[str, Any]: + params: MutableMapping[str, Any] = {"context": context} + if ignore_cache is not None: + params["ignoreCache"] = ignore_cache + if wait is not None: + params["wait"] = wait + return params + + @command + def print(self, + context: str, + background: Optional[bool] = None, + margin: Optional[Mapping[str, Any]] = None, + orientation: Optional[str] = None, + page: Optional[Mapping[str, Any]] = None, + page_ranges: Optional[List[str]] = None, + scale: Optional[float] = None, + shrink_to_fit: Optional[bool] = None) -> Mapping[str, Any]: + params: MutableMapping[str, Any] = {"context": context} if background is not None: params["background"] = background diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/input.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/input.py index 6b2221d7dc4..5240bbb5843 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/input.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/input.py @@ -372,3 +372,7 @@ class Input(BidiModule): def release_actions(self, context: str) -> Mapping[str, Any]: params: MutableMapping[str, Any] = {"context": context} return params + + +def get_element_origin(element: Any) -> Mapping[str, Any]: + return {"type": "element", "element": {"sharedId": element["sharedId"]}} diff --git a/tests/wpt/web-platform-tests/tools/webtransport/h3/webtransport_h3_server.py b/tests/wpt/web-platform-tests/tools/webtransport/h3/webtransport_h3_server.py index 141bd9f7dc9..0fc367e1ff4 100644 --- a/tests/wpt/web-platform-tests/tools/webtransport/h3/webtransport_h3_server.py +++ b/tests/wpt/web-platform-tests/tools/webtransport/h3/webtransport_h3_server.py @@ -15,7 +15,7 @@ from typing import Any, Dict, List, Optional, Tuple from aioquic.buffer import Buffer # type: ignore from aioquic.asyncio import QuicConnectionProtocol, serve # type: ignore from aioquic.asyncio.client import connect # type: ignore -from aioquic.h3.connection import H3_ALPN, FrameType, H3Connection, ProtocolError # type: ignore +from aioquic.h3.connection import H3_ALPN, FrameType, H3Connection, ProtocolError, SettingsError # type: ignore from aioquic.h3.events import H3Event, HeadersReceived, WebTransportStreamDataReceived, DatagramReceived, DataReceived # type: ignore from aioquic.quic.configuration import QuicConfiguration # type: ignore from aioquic.quic.connection import logger as quic_connection_logger # type: ignore @@ -66,12 +66,18 @@ class H3ConnectionWithDatagram(H3Connection): self._datagram_setting: Optional[H3DatagramSetting] = None def _validate_settings(self, settings: Dict[int, int]) -> None: - super()._validate_settings(settings) + # aioquic doesn't recognize the RFC version of HTTP Datagrams yet. + # Intentionally don't call `super()._validate_settings(settings)` since + # it raises a SettingsError when only the RFC version is negotiated. if settings.get(H3DatagramSetting.RFC) == 1: self._datagram_setting = H3DatagramSetting.RFC elif settings.get(H3DatagramSetting.DRAFT04) == 1: self._datagram_setting = H3DatagramSetting.DRAFT04 + if self._datagram_setting is None: + raise SettingsError("HTTP Datagrams support required") + + def _get_local_settings(self) -> Dict[int, int]: settings = super()._get_local_settings() settings[H3DatagramSetting.RFC] = 1 diff --git a/tests/wpt/web-platform-tests/tools/wpt/run.py b/tests/wpt/web-platform-tests/tools/wpt/run.py index 9a1111c59f6..58e0004f9be 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/run.py +++ b/tests/wpt/web-platform-tests/tools/wpt/run.py @@ -180,11 +180,10 @@ class BrowserSetup: if self.prompt_install(self.name): return self.browser.install(self.venv.path, channel) - def install_requirements(self): - if not self.venv.skip_virtualenv_setup and self.browser.requirements: - self.venv.install_requirements(os.path.join( - wpt_root, "tools", "wptrunner", self.browser.requirements)) - + def requirements(self): + if self.browser.requirements: + return [os.path.join(wpt_root, "tools", "wptrunner", self.browser.requirements)] + return [] def setup(self, kwargs): self.setup_kwargs(kwargs) @@ -813,7 +812,10 @@ def setup_wptrunner(venv, **kwargs): raise WptrunError("Unsupported product %s" % kwargs["product"]) setup_cls = product_setup[kwargs["product"]](venv, kwargs["prompt"]) - setup_cls.install_requirements() + if not venv.skip_virtualenv_setup: + requirements = [os.path.join(wpt_root, "tools", "wptrunner", "requirements.txt")] + requirements.extend(setup_cls.requirements()) + venv.install_requirements(*requirements) affected_revish = kwargs.get("affected") if affected_revish is not None: @@ -863,11 +865,6 @@ def setup_wptrunner(venv, **kwargs): wptcommandline.check_args(wptrunner_kwargs) - wptrunner_path = os.path.join(wpt_root, "tools", "wptrunner") - - if not venv.skip_virtualenv_setup: - venv.install_requirements(os.path.join(wptrunner_path, "requirements.txt")) - # Only update browser_version if it was not given as a command line # argument, so that it can be overridden on the command line. if not wptrunner_kwargs["browser_version"]: diff --git a/tests/wpt/web-platform-tests/tools/wpt/tests/test_run.py b/tests/wpt/web-platform-tests/tools/wpt/tests/test_run.py index f0e0d3c3ed5..fbf0f0afafe 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/tests/test_run.py +++ b/tests/wpt/web-platform-tests/tools/wpt/tests/test_run.py @@ -33,7 +33,7 @@ def venv(): def install(self, *requirements): return - def install_requirements(self, requirements_path): + def install_requirements(self, *requirements): return venv = Virtualenv() diff --git a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py index f5671f37430..d123faec2e7 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py +++ b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py @@ -399,6 +399,7 @@ def test_serve(): break finally: os.killpg(p.pid, 15) + p.wait(10) # The following commands are slow running and used implicitly in other CI # jobs, so we skip them here: diff --git a/tests/wpt/web-platform-tests/tools/wpt/tox.ini b/tests/wpt/web-platform-tests/tools/wpt/tox.ini index 1062b4a528c..9e8b9d720f9 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/tox.ini +++ b/tests/wpt/web-platform-tests/tools/wpt/tox.ini @@ -12,7 +12,7 @@ deps = -r{toxinidir}/../wptrunner/requirements_firefox.txt commands = - pytest {posargs} + pytest -c{toxinidir}/../pytest.ini --rootdir={toxinidir} {posargs} passenv = DISPLAY diff --git a/tests/wpt/web-platform-tests/tools/wpt/virtualenv.py b/tests/wpt/web-platform-tests/tools/wpt/virtualenv.py index 7176bafcde4..59f422a6ef5 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/virtualenv.py +++ b/tests/wpt/web-platform-tests/tools/wpt/virtualenv.py @@ -121,17 +121,22 @@ class Virtualenv: # occurs while packages are in the process of being published. call(self.pip_path, "install", "--prefer-binary", *requirements) - def install_requirements(self, requirements_path): - with open(requirements_path) as f: - try: - self.working_set.require(f.read()) - except Exception: - pass - else: - return - - # `--prefer-binary` guards against race conditions when installation - # occurs while packages are in the process of being published. - call( - self.pip_path, "install", "--prefer-binary", "-r", requirements_path - ) + def install_requirements(self, *requirements_paths): + install = [] + # Check which requirements are already satisfied, to skip calling pip + # at all in the case that we've already installed everything, and to + # minimise the installs in other cases. + for requirements_path in requirements_paths: + with open(requirements_path) as f: + try: + self.working_set.require(f.read()) + except Exception: + install.append(requirements_path) + + if install: + # `--prefer-binary` guards against race conditions when installation + # occurs while packages are in the process of being published. + cmd = [self.pip_path, "install", "--prefer-binary"] + for path in install: + cmd.extend(["-r", path]) + call(*cmd) diff --git a/tests/wpt/web-platform-tests/tools/wpt/wpt.py b/tests/wpt/web-platform-tests/tools/wpt/wpt.py index 74943a52f3b..e423a8c67c5 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/wpt.py +++ b/tests/wpt/web-platform-tests/tools/wpt/wpt.py @@ -132,8 +132,7 @@ def create_complete_parser(): for command in commands: props = commands[command] - for path in props.get("requirements", []): - venv.install_requirements(path) + venv.install_requirements(*props.get("requirements", [])) subparser = import_command('wpt', command, props)[1] if not subparser: @@ -160,16 +159,17 @@ def setup_virtualenv(path, skip_venv_setup, props): venv = virtualenv.Virtualenv(path, should_skip_setup) if not should_skip_setup: venv.start() - for path in props["requirements"]: - venv.install_requirements(path) + venv.install_requirements(*props.get("requirements", [])) return venv -def install_command_flag_requirements(venv, kwargs, requirements): +def install_command_flag_requirements(venv, props, kwargs): + requirements = props["conditional_requirements"].get("commandline_flag", {}) + install_paths = [] for command_flag_name, requirement_paths in requirements.items(): if command_flag_name in kwargs: - for path in requirement_paths: - venv.install_requirements(path) + install_paths.extend(requirement_paths) + venv.install_requirements(*install_paths) def main(prog=None, argv=None): @@ -215,9 +215,8 @@ def main(prog=None, argv=None): kwargs = {} if venv is not None: - requirements = props["conditional_requirements"].get("commandline_flag") - if requirements is not None and not main_args.skip_venv_setup: - install_command_flag_requirements(venv, kwargs, requirements) + if not main_args.skip_venv_setup: + install_command_flag_requirements(venv, props, kwargs) args = (venv,) + extras else: args = extras diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt index abe5966197d..fcaab2e6674 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt @@ -7,4 +7,4 @@ packaging==23.1 pillow==9.5.0 requests==2.30.0 six==1.16.0 -urllib3[secure]==1.26.15 +urllib3==1.26.15 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt index df44fa4ddb5..d2389eee93c 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt @@ -1 +1 @@ -selenium==4.9.0 +selenium==4.9.1 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt index e8513ccf97a..30a2b8a6bdb 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt @@ -1,4 +1,4 @@ -marionette_driver==3.2.0 +marionette_driver==3.3.0 mozcrash==2.2.0 mozdevice==4.1.0 mozinstall==2.0.1 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt index a01c45b3ec8..c3fe460116e 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt @@ -1,2 +1,2 @@ mozprocess==1.3.0 -selenium==4.9.0 +selenium==4.9.1 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt index a01c45b3ec8..c3fe460116e 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt @@ -1,2 +1,2 @@ mozprocess==1.3.0 -selenium==4.9.0 +selenium==4.9.1 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt index 9dd3989e0d8..f7f06f366c4 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt @@ -1,2 +1,2 @@ -selenium==4.9.0 +selenium==4.9.1 requests==2.30.0 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini b/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini index 82df778f50b..5aef267dad9 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini +++ b/tests/wpt/web-platform-tests/tools/wptrunner/tox.ini @@ -17,7 +17,7 @@ deps = safari: -r{toxinidir}/requirements_safari.txt sauce: -r{toxinidir}/requirements_sauce.txt -commands = pytest {posargs} +commands = pytest -c{toxinidir}/../pytest.ini --rootdir={toxinidir} {posargs} setenv = CURRENT_TOX_ENV = {envname} diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py index 6946ccd4a6b..7092122d8c4 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py @@ -49,7 +49,6 @@ def executor_kwargs(logger, test_type, test_environment, run_info_data, executor_kwargs = base_executor_kwargs(test_type, test_environment, run_info_data, **kwargs) executor_kwargs["close_after_done"] = True - executor_kwargs["supports_eager_pageload"] = False executor_kwargs["sanitizer_enabled"] = sanitizer_enabled capabilities = { @@ -66,9 +65,6 @@ def executor_kwargs(logger, test_type, test_environment, run_info_data, } } - if test_type == "testharness": - capabilities["pageLoadStrategy"] = "none" - chrome_options = capabilities["goog:chromeOptions"] if kwargs["binary"] is not None: chrome_options["binary"] = kwargs["binary"] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py index e1f133f5721..f3630f3abbc 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py @@ -2,7 +2,7 @@ # DO NOT EDIT MANUALLY. # tools/certs/web-platform.test.pem -WPT_FINGERPRINT = 'XreVR++++c9QamuUZu0YWHyqsL3PJarhG/0h87zEimI=' +WPT_FINGERPRINT = 'MbajVIHePcSR9G165yc/9ke/pq3AcwawOHR0ds9GOjE=' # signed-exchange/resources/127.0.0.1.sxg.pem SXG_WPT_FINGERPRINT = '0Rt4mT6SJXojEMHTnKnlJ/hBKMBcI4kteBlhR1eTTdk=' diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edgechromium.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edgechromium.py index 7dfc5d6c82d..9540320ed63 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edgechromium.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/edgechromium.py @@ -39,7 +39,6 @@ def executor_kwargs(logger, test_type, test_environment, run_info_data, run_info_data, **kwargs) executor_kwargs["close_after_done"] = True - executor_kwargs["supports_eager_pageload"] = False capabilities = { "ms:edgeOptions": { @@ -56,9 +55,6 @@ def executor_kwargs(logger, test_type, test_environment, run_info_data, } } - if test_type == "testharness": - capabilities["pageLoadStrategy"] = "none" - for (kwarg, capability) in [("binary", "binary"), ("binary_args", "args")]: if kwargs[kwarg] is not None: capabilities["ms:edgeOptions"][capability] = kwargs[kwarg] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py index 85076c877cd..c650c1ccd02 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py @@ -205,6 +205,7 @@ class SeleniumCookiesProtocolPart(CookiesProtocolPart): except exceptions.NoSuchCookieException: return None + class SeleniumWindowProtocolPart(WindowProtocolPart): def setup(self): self.webdriver = self.parent.webdriver @@ -218,6 +219,7 @@ class SeleniumWindowProtocolPart(WindowProtocolPart): self.logger.info("Setting window rect") self.webdriver.window.rect = rect + class SeleniumSendKeysProtocolPart(SendKeysProtocolPart): def setup(self): self.webdriver = self.parent.webdriver @@ -333,7 +335,7 @@ class SeleniumTestharnessExecutor(TestharnessExecutor): def __init__(self, logger, browser, server_config, timeout_multiplier=1, close_after_done=True, capabilities=None, debug_info=None, - supports_eager_pageload=True, **kwargs): + **kwargs): """Selenium-based executor for testharness.js tests""" TestharnessExecutor.__init__(self, logger, browser, server_config, timeout_multiplier=timeout_multiplier, @@ -343,7 +345,6 @@ class SeleniumTestharnessExecutor(TestharnessExecutor): self.script_resume = f.read() self.close_after_done = close_after_done self.window_id = str(uuid.uuid4()) - self.supports_eager_pageload = supports_eager_pageload def is_alive(self): return self.protocol.is_alive() @@ -381,9 +382,6 @@ class SeleniumTestharnessExecutor(TestharnessExecutor): protocol.base.load(url) - if not self.supports_eager_pageload: - self.wait_for_load(protocol) - handler = CallbackHandler(self.logger, protocol, test_window) while True: result = protocol.base.execute_script( @@ -393,29 +391,6 @@ class SeleniumTestharnessExecutor(TestharnessExecutor): break return rv - def wait_for_load(self, protocol): - # pageLoadStrategy=eager doesn't work in Chrome so try to emulate in user script - loaded = False - seen_error = False - while not loaded: - try: - loaded = protocol.base.execute_script(""" -var callback = arguments[arguments.length - 1]; -if (location.href === "about:blank") { - callback(false); -} else if (document.readyState !== "loading") { - callback(true); -} else { - document.addEventListener("readystatechange", () => {if (document.readyState !== "loading") {callback(true)}}); -}""", asynchronous=True) - except Exception: - # We can get an error here if the script runs in the initial about:blank - # document before it has navigated, with the driver returning an error - # indicating that the document was unloaded - if seen_error: - raise - seen_error = True - class SeleniumRefTestExecutor(RefTestExecutor): def __init__(self, logger, browser, server_config, timeout_multiplier=1, diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py index 829eca0deb5..ab7d1ab0d4c 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py @@ -226,6 +226,7 @@ class WebDriverCookiesProtocolPart(CookiesProtocolPart): except error.NoSuchCookieException: return None + class WebDriverWindowProtocolPart(WindowProtocolPart): def setup(self): self.webdriver = self.parent.webdriver @@ -238,6 +239,7 @@ class WebDriverWindowProtocolPart(WindowProtocolPart): self.logger.info("Restoring") self.webdriver.window.rect = rect + class WebDriverSendKeysProtocolPart(SendKeysProtocolPart): def setup(self): self.webdriver = self.parent.webdriver @@ -466,8 +468,7 @@ class WebDriverTestharnessExecutor(TestharnessExecutor): def __init__(self, logger, browser, server_config, timeout_multiplier=1, close_after_done=True, capabilities=None, debug_info=None, - supports_eager_pageload=True, cleanup_after_test=True, - **kwargs): + cleanup_after_test=True, **kwargs): """WebDriver-based executor for testharness.js tests""" TestharnessExecutor.__init__(self, logger, browser, server_config, timeout_multiplier=timeout_multiplier, @@ -480,7 +481,6 @@ class WebDriverTestharnessExecutor(TestharnessExecutor): self.close_after_done = close_after_done self.window_id = str(uuid.uuid4()) - self.supports_eager_pageload = supports_eager_pageload self.cleanup_after_test = cleanup_after_test def is_alive(self): @@ -525,9 +525,6 @@ class WebDriverTestharnessExecutor(TestharnessExecutor): handler = WebDriverCallbackHandler(self.logger, protocol, test_window) protocol.webdriver.url = url - if not self.supports_eager_pageload: - self.wait_for_load(protocol) - while True: result = protocol.base.execute_script( self.script_resume % format_map, asynchronous=True) @@ -558,29 +555,6 @@ class WebDriverTestharnessExecutor(TestharnessExecutor): return rv - def wait_for_load(self, protocol): - # pageLoadStrategy=eager doesn't work in Chrome so try to emulate in user script - loaded = False - seen_error = False - while not loaded: - try: - loaded = protocol.base.execute_script(""" -var callback = arguments[arguments.length - 1]; -if (location.href === "about:blank") { - callback(false); -} else if (document.readyState !== "loading") { - callback(true); -} else { - document.addEventListener("readystatechange", () => {if (document.readyState !== "loading") {callback(true)}}); -}""", asynchronous=True) - except error.JavascriptErrorException: - # We can get an error here if the script runs in the initial about:blank - # document before it has navigated, with the driver returning an error - # indicating that the document was unloaded - if seen_error: - raise - seen_error = True - class WebDriverRefTestExecutor(RefTestExecutor): protocol_cls = WebDriverProtocol diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py index 0088971795e..a919d6df7e0 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py @@ -560,21 +560,33 @@ class PropertyUpdate: # current existing node nodes = [node_by_run_info[run_info] for run_info in run_infos if run_info in node_by_run_info] - # If all the values are the same, update the value - if nodes and all(set(node.result_values.keys()) == set(nodes[0].result_values.keys()) for node in nodes): + + updated_value = None + current_values = set(condition.value) + if all(set(result).issubset(current_values) + for node in nodes + for result in node.result_values.keys()): + # If all the values are subsets of the current value, retain the condition as-is + updated_value = self.from_ini_value(condition.value) + elif nodes and all(set(node.result_values.keys()) == + set(nodes[0].result_values.keys()) for node in nodes): + # If the condition doesn't need to change, update the value current_value = self.from_ini_value(condition.value) try: - new_value = self.updated_value(current_value, - nodes[0].result_values) + updated_value = self.updated_value(current_value, + nodes[0].result_values) except ConditionError as e: errors.append(e) continue - if new_value != current_value: + if updated_value != current_value: self.node.modified = True - conditions.append((condition.condition_node, new_value)) + + if updated_value is not None: + # Reuse the existing condition with an updated value + conditions.append((condition.condition_node, updated_value)) run_info_with_condition |= set(run_infos) else: - # Don't append this condition + # Don't reuse this condition self.node.modified = True new_conditions, new_errors = self.build_tree_conditions(property_tree, @@ -741,8 +753,13 @@ class ExpectedUpdate(PropertyUpdate): # If the new intermittent is a subset of the existing one, just use the existing one # This prevents frequent flip-flopping of results between e.g. [OK, TIMEOUT] and # [TIMEOUT, OK] - if current and set(expected).issubset(set(current)): - return current + if current is not None: + if not isinstance(current, list): + current_set = {current} + else: + current_set = set(current) + if set(expected).issubset(current_set): + return current if self.update_intermittent: if len(expected) == 1: diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py index 3ae97114f85..d026fdf574e 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py @@ -491,7 +491,9 @@ class ExpectedUpdater: result = pack_result(data) test_data.set(test_id, subtest, "status", self.run_info, result) - if data.get("expected") and data["expected"] != data["status"]: + status = data["status"] + expected = data.get("expected") + if expected and expected != status and status not in data.get("known_intermittent", []): test_data.set_requires_update() def test_end(self, data): @@ -506,7 +508,9 @@ class ExpectedUpdater: result = pack_result(data) test_data.set(test_id, None, "status", self.run_info, result) - if data.get("expected") and data["expected"] != data["status"]: + status = data["status"] + expected = data.get("expected") + if expected and expected != status and status not in data.get("known_intermittent", []): test_data.set_requires_update() del self.tests_visited[test_id] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_testloader.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_testloader.py index 8c8d02a22b9..45b78496d1b 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_testloader.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_testloader.py @@ -17,6 +17,9 @@ from manifest.manifest import Manifest as WPTManifest structured.set_default_logger(structured.structuredlog.StructuredLogger("TestLoader")) +TestFilter.__test__ = False +TestLoader.__test__ = False + include_ini = """\ skip: true [test_\u53F0] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py index 6cbe335cfe7..e569db9b4af 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py @@ -414,7 +414,7 @@ def test_update_expected_tie_resolution(): "expected", default_run_info) == ["PASS", "FAIL"] -def test_update_reorder_expected(): +def test_update_no_reorder_expected(): tests = [("path/to/test.htm", [test_id], "testharness", b"""[test.htm] [test1] @@ -448,12 +448,7 @@ def test_update_reorder_expected(): "status": "OK"})]) updated = update(tests, log_0, log_1, log_2, update_intermittent=True) - new_manifest = updated[0][1] - - assert not new_manifest.is_empty - assert new_manifest.modified - assert new_manifest.get_test(test_id).children[0].get( - "expected", default_run_info) == ["PASS", "FAIL"] + assert not updated def test_update_and_preserve_unchanged_expected_intermittent(): @@ -499,6 +494,58 @@ def test_update_and_preserve_unchanged_expected_intermittent(): "expected", default_run_info) == "PASS" +def test_update_intermittent(): + tests = [("path/to/test.htm", [test_id], "testharness", + b"""[test.htm] + [test1] + expected: + if os == "linux" or os == "android": [PASS, FAIL, ERROR]""")] + + # Logs where the test requires an update, but we don't want to update the + # intermittent status + log_0 = suite_log([("test_start", {"test": test_id}), + ("test_status", {"test": test_id, + "subtest": "test1", + "status": "FAIL", + "expected": "PASS", + "known_intermittent": ["FAIL", "ERROR"]}), + ("test_end", {"test": test_id, + "status": "OK"})]) + + log_1 = suite_log([("test_start", {"test": test_id}), + ("test_status", {"test": test_id, + "subtest": "test1", + "status": "FAIL", + "expected": "PASS", + "known_intermittent": ["FAIL", "ERROR"]}), + ("test_end", {"test": test_id, + "status": "OK"})]) + + log_2 = suite_log([("test_start", {"test": test_id}), + ("test_status", {"test": test_id, + "subtest": "test1", + "status": "PASS", + "expected": "PASS", + "known_intermittent": ["FAIL", "ERROR"]}), + ("test_end", {"test": test_id, + "status": "TIMEOUT"})], + run_info={"os": "android"}) + + updated = update(tests, log_0, log_1, log_2, update_intermittent=True) + new_manifest = updated[0][1] + + assert not new_manifest.is_empty + assert new_manifest.modified + + run_info_1 = default_run_info.copy() + run_info_1.update({"os": "android"}) + assert new_manifest.get_test(test_id).get( + "expected", run_info_1) == "TIMEOUT" + + assert new_manifest.get_test(test_id).children[0].get( + "expected", default_run_info) == ["PASS", "FAIL", "ERROR"] + + def test_update_test_with_intermittent_to_one_expected_status(): tests = [("path/to/test.htm", [test_id], "testharness", b"""[test.htm] @@ -755,7 +802,7 @@ def test_full_orphan(): assert len(new_manifest.get_test(test_id).children) == 1 -def test_update_reorder_expected_full_conditions(): +def test_update_no_reorder_expected_full_conditions(): tests = [("path/to/test.htm", [test_id], "testharness", b"""[test.htm] [test1] @@ -802,17 +849,7 @@ def test_update_reorder_expected_full_conditions(): "status": "OK"})]) updated = update(tests, log_0, log_1, log_2, log_3, update_intermittent=True, full_update=True) - - new_manifest = updated[0][1] - - assert not new_manifest.is_empty - assert new_manifest.modified - run_info_1 = default_run_info.copy() - run_info_1.update({"os": "mac"}) - assert new_manifest.get_test(test_id).children[0].get( - "expected", run_info_1) == ["TIMEOUT", "FAIL"] - assert new_manifest.get_test(test_id).children[0].get( - "expected", default_run_info) == ["PASS", "FAIL"] + assert not updated def test_skip_0(): @@ -1721,6 +1758,8 @@ leak-total: 110""")] class TestStep(Step): + __test__ = False + def create(self, state): tests = [("path/to/test.htm", [test_id], "testharness", "")] state.foo = create_test_manifest(tests) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_wpttest.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_wpttest.py index 2d3578a903c..d2f68361bf8 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_wpttest.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_wpttest.py @@ -10,6 +10,8 @@ from . test_update import tree_and_sourcefile_mocks from .. import manifestexpected, manifestupdate, wpttest +TestharnessTest.__test__ = False + dir_ini_0 = b"""\ prefs: [a:b] """ diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/reload/invalid.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/reload/invalid.py new file mode 100644 index 00000000000..35be21ef19f --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/reload/invalid.py @@ -0,0 +1,37 @@ +import pytest +import webdriver.bidi.error as error + +pytestmark = pytest.mark.asyncio + + +@pytest.mark.parametrize("value", [None, False, 42, {}, []]) +async def test_params_context_invalid_type(bidi_session, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.reload(context=value) + + +@pytest.mark.parametrize("value", ["", "somestring"]) +async def test_params_context_invalid_value(bidi_session, value): + with pytest.raises(error.NoSuchFrameException): + await bidi_session.browsing_context.reload(context=value) + + +@pytest.mark.parametrize("value", ["", 42, {}, []]) +async def test_params_ignore_cache_invalid_type(bidi_session, new_tab, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.reload(context=new_tab["context"], + ignore_cache=value) + + +@pytest.mark.parametrize("value", [False, 42, {}, []]) +async def test_params_wait_invalid_type(bidi_session, new_tab, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.reload(context=new_tab["context"], + wait=value) + + +@pytest.mark.parametrize("value", ["", "somestring"]) +async def test_params_wait_invalid_value(bidi_session, new_tab, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.reload(context=new_tab["context"], + wait=value) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/invalid.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/invalid.py index 53b7f3a323e..b07802292c9 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/invalid.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/invalid.py @@ -1,10 +1,11 @@ import pytest -from webdriver.bidi.modules.input import Actions +from webdriver.bidi.modules.input import Actions, get_element_origin from webdriver.bidi.error import ( InvalidArgumentException, MoveTargetOutOfBoundsException, NoSuchFrameException, + NoSuchNodeException, ) @@ -89,13 +90,88 @@ async def test_params_actions_origin_element_outside_viewport( elem = await get_element("#inner") actions = Actions() - actions.add_pointer().pointer_move(x=0, y=0, origin=elem) + actions.add_pointer().pointer_move(x=0, y=0, origin=get_element_origin(elem)) with pytest.raises(MoveTargetOutOfBoundsException): await bidi_session.input.perform_actions( actions=actions, context=top_context["context"] ) +@pytest.mark.parametrize("value", [True, 42, []]) +async def test_params_actions_origin_invalid_type(bidi_session, top_context, value): + actions = Actions() + actions.add_pointer().pointer_move(x=0, y=0, origin=value) + with pytest.raises(InvalidArgumentException): + await bidi_session.input.perform_actions( + actions=actions, context=top_context["context"] + ) + + +@pytest.mark.parametrize("value", [None, True, 42, {}, [], "foo"]) +async def test_params_actions_origin_invalid_value_type( + bidi_session, top_context, get_actions_origin_page, get_element, value +): + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=get_actions_origin_page(""), + wait="complete", + ) + + elem = await get_element("#inner") + actions = Actions() + actions.add_pointer().pointer_move( + x=0, y=0, origin={"type": value, "element": {"sharedId": elem["sharedId"]}} + ) + with pytest.raises(InvalidArgumentException): + await bidi_session.input.perform_actions( + actions=actions, context=top_context["context"] + ) + + +@pytest.mark.parametrize("value", [None, True, 42, {}, [], "foo"]) +async def test_params_actions_origin_invalid_value_element( + bidi_session, top_context, value +): + actions = Actions() + actions.add_pointer().pointer_move( + x=0, y=0, origin={"type": "element", "element": value} + ) + with pytest.raises(InvalidArgumentException): + await bidi_session.input.perform_actions( + actions=actions, context=top_context["context"] + ) + + +async def test_params_actions_origin_invalid_value_serialized_element( + bidi_session, top_context, get_actions_origin_page, get_element +): + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=get_actions_origin_page(""), + wait="complete", + ) + + elem = await get_element("#inner") + + actions = Actions() + actions.add_pointer().pointer_move(x=0, y=0, origin=elem) + with pytest.raises(InvalidArgumentException): + await bidi_session.input.perform_actions( + actions=actions, context=top_context["context"] + ) + + +async def test_params_actions_origin_no_such_node(bidi_session, top_context): + actions = Actions() + actions.add_pointer().pointer_move( + x=0, y=0, origin={"type": "element", "element": {"sharedId": "foo"}} + ) + with pytest.raises(NoSuchNodeException): + await bidi_session.input.perform_actions( + actions=actions, context=top_context["context"] + ) + + @pytest.mark.parametrize("origin", ["viewport", "pointer"]) async def test_params_actions_origin_outside_viewport( bidi_session, top_context, origin diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_mouse.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_mouse.py index b73d3d859dd..7e262581018 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_mouse.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_mouse.py @@ -1,6 +1,6 @@ import pytest -from webdriver.bidi.modules.input import Actions +from webdriver.bidi.modules.input import Actions, get_element_origin from tests.support.asserts import assert_move_to_coordinates from tests.support.helpers import filter_dict @@ -96,7 +96,7 @@ async def test_click_element_center( actions = Actions() ( actions.add_pointer() - .pointer_move(x=0, y=0, origin=outer) + .pointer_move(x=0, y=0, origin=get_element_origin(outer)) .pointer_down(button=0) .pointer_up(button=0) ) @@ -137,7 +137,7 @@ async def test_click_navigation( actions = Actions() ( actions.add_pointer() - .pointer_move(x=0, y=0, origin=link) + .pointer_move(x=0, y=0, origin=get_element_origin(link)) .pointer_down(button=0) .pointer_up(button=0) ) @@ -185,7 +185,7 @@ async def test_drag_and_drop( actions = Actions() ( actions.add_pointer() - .pointer_move(x=0, y=0, origin=drag_target) + .pointer_move(x=0, y=0, origin=get_element_origin(drag_target)) .pointer_down(button=0) .pointer_move(dx, dy, duration=drag_duration, origin="pointer") .pointer_up(button=0) @@ -224,9 +224,11 @@ async def test_drag_and_drop_with_draggable_element( actions = Actions() ( actions.add_pointer() - .pointer_move(x=0, y=0, origin=drag_target) + .pointer_move(x=0, y=0, origin=get_element_origin(drag_target)) .pointer_down(button=0) - .pointer_move(x=50, y=25, duration=drag_duration, origin=drop_target) + .pointer_move( + x=50, y=25, duration=drag_duration, origin=get_element_origin(drop_target) + ) .pointer_up(button=0) .pointer_move(80, 50, duration=100, origin="pointer") ) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_mouse_modifier.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_mouse_modifier.py index 9f76e250a1a..8eec30f1a0c 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_mouse_modifier.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_mouse_modifier.py @@ -1,6 +1,6 @@ import pytest -from webdriver.bidi.modules.input import Actions +from webdriver.bidi.modules.input import Actions, get_element_origin from webdriver.bidi.modules.script import ContextTarget from tests.support.helpers import filter_dict @@ -42,7 +42,7 @@ async def test_control_click( ) mouse_sources = ( actions.add_pointer() - .pointer_move(x=0, y=0, origin=outer) + .pointer_move(x=0, y=0, origin=get_element_origin(outer)) .pointer_down(button=0) .pointer_up(button=0) ) @@ -101,7 +101,7 @@ async def test_control_click_release( key_sources = actions.add_key().pause(duration=0).key_down(Keys.CONTROL) mouse_sources = ( actions.add_pointer() - .pointer_move(x=0, y=0, origin=key_reporter) + .pointer_move(x=0, y=0, origin=get_element_origin(key_reporter)) .pointer_down(button=0) ) await bidi_session.input.perform_actions( @@ -148,7 +148,7 @@ async def test_many_modifiers_click( ) mouse_sources = ( actions.add_pointer() - .pointer_move(x=0, y=0, origin=outer) + .pointer_move(x=0, y=0, origin=get_element_origin(outer)) .pause(duration=0) .pointer_down(button=0) .pointer_up(button=0) @@ -212,7 +212,7 @@ async def test_modifier_click( ) mouse_sources = ( actions.add_pointer() - .pointer_move(x=0, y=0, origin=outer) + .pointer_move(x=0, y=0, origin=get_element_origin(outer)) .pointer_down(button=0) .pointer_up(button=0) ) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_mouse_multiclick.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_mouse_multiclick.py index 4f67f8fda94..f74650c2f3e 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_mouse_multiclick.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_mouse_multiclick.py @@ -1,6 +1,6 @@ import pytest -from webdriver.bidi.modules.input import Actions +from webdriver.bidi.modules.input import Actions, get_element_origin from webdriver.bidi.modules.script import ContextTarget from tests.support.asserts import assert_move_to_coordinates diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_origin.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_origin.py index c953d3d1b02..7991eecbdba 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_origin.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_origin.py @@ -1,6 +1,6 @@ import pytest -from webdriver.bidi.modules.input import Actions +from webdriver.bidi.modules.input import Actions, get_element_origin from webdriver.bidi.modules.script import ContextTarget from tests.support.asserts import assert_move_to_coordinates @@ -106,7 +106,7 @@ async def test_element_center_point_with_offset( center = await get_inview_center_bidi(bidi_session, context=top_context, element=elem) actions = Actions() - actions.add_pointer().pointer_move(x=offset_x, y=offset_y, origin=elem) + actions.add_pointer().pointer_move(x=offset_x, y=offset_y, origin=get_element_origin(elem)) await bidi_session.input.perform_actions( actions=actions, context=top_context["context"] ) @@ -130,7 +130,7 @@ async def test_element_larger_than_viewport( center = await get_inview_center_bidi(bidi_session, context=top_context, element=elem) actions = Actions() - actions.add_pointer().pointer_move(x=0, y=0, origin=elem) + actions.add_pointer().pointer_move(x=0, y=0, origin=get_element_origin(elem)) await bidi_session.input.perform_actions( actions=actions, context=top_context["context"] ) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_pen.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_pen.py index 5483a1436c1..30728f9a136 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_pen.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_pen.py @@ -1,6 +1,6 @@ import pytest -from webdriver.bidi.modules.input import Actions +from webdriver.bidi.modules.input import Actions, get_element_origin from .. import get_events from . import get_inview_center_bidi @@ -21,11 +21,11 @@ async def test_pen_pointer_properties( actions = Actions() ( actions.add_pointer(pointer_type="pen") - .pointer_move(x=0, y=0, origin=pointerArea) + .pointer_move(x=0, y=0, origin=get_element_origin(pointerArea)) .pointer_down(button=0, pressure=0.36, tilt_x=-72, tilt_y=9, twist=86) - .pointer_move(x=10, y=10, origin=pointerArea) + .pointer_move(x=10, y=10, origin=get_element_origin(pointerArea)) .pointer_up(button=0) - .pointer_move(x=80, y=50, origin=pointerArea) + .pointer_move(x=80, y=50, origin=get_element_origin(pointerArea)) ) await bidi_session.input.perform_actions( diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_touch.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_touch.py index 9c31b0127fe..126e72c76ed 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_touch.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/pointer_touch.py @@ -1,6 +1,6 @@ import pytest -from webdriver.bidi.modules.input import Actions +from webdriver.bidi.modules.input import Actions, get_element_origin from .. import get_events from . import get_inview_center_bidi @@ -14,14 +14,14 @@ async def test_touch_pointer_properties( await load_static_test_page(page="test_actions_pointer.html") pointerArea = await get_element("#pointerArea") - center = await get_inview_center( + center = await get_inview_center_bidi( bidi_session, context=top_context, element=pointerArea ) actions = Actions() ( actions.add_pointer(pointer_type="touch") - .pointer_move(x=0, y=0, origin=pointerArea) + .pointer_move(x=0, y=0, origin=get_element_origin(pointerArea)) .pointer_down( button=0, width=23, @@ -34,7 +34,7 @@ async def test_touch_pointer_properties( .pointer_move( x=10, y=10, - origin=pointerArea, + origin=get_element_origin(pointerArea), width=39, height=35, pressure=0.91, @@ -43,7 +43,7 @@ async def test_touch_pointer_properties( twist=345, ) .pointer_up(button=0) - .pointer_move(x=80, y=50, origin=pointerArea) + .pointer_move(x=80, y=50, origin=get_element_origin(pointerArea)) ) await bidi_session.input.perform_actions( @@ -91,14 +91,14 @@ async def test_touch_pointer_properties_tilt_twist( await load_static_test_page(page="test_actions_pointer.html") pointerArea = await get_element("#pointerArea") - center = await get_inview_center( + center = await get_inview_center_bidi( bidi_session, context=top_context, element=pointerArea ) actions = Actions() ( actions.add_pointer(pointer_type="touch") - .pointer_move(x=0, y=0, origin=pointerArea) + .pointer_move(x=0, y=0, origin=get_element_origin(pointerArea)) .pointer_down( button=0, width=23, @@ -111,7 +111,7 @@ async def test_touch_pointer_properties_tilt_twist( .pointer_move( x=10, y=10, - origin=pointerArea, + origin=get_element_origin(pointerArea), width=39, height=35, pressure=0.91, @@ -120,7 +120,7 @@ async def test_touch_pointer_properties_tilt_twist( twist=345, ) .pointer_up(button=0) - .pointer_move(x=80, y=50, origin=pointerArea) + .pointer_move(x=80, y=50, origin=get_element_origin(pointerArea)) ) await bidi_session.input.perform_actions( diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/wheel.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/wheel.py index 00e10e91226..cf96a9cd9ba 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/wheel.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/input/perform_actions/wheel.py @@ -1,6 +1,6 @@ import pytest -from webdriver.bidi.modules.input import Actions +from webdriver.bidi.modules.input import Actions, get_element_origin from .. import get_events pytestmark = pytest.mark.asyncio @@ -13,7 +13,9 @@ async def test_wheel_scroll( actions = Actions() outer = await get_element("#outer") - actions.add_wheel().scroll(x=0, y=0, delta_x=delta_x, delta_y=delta_y, origin=outer) + actions.add_wheel().scroll( + x=0, y=0, delta_x=delta_x, delta_y=delta_y, origin=get_element_origin(outer) + ) await bidi_session.input.perform_actions( actions=actions, context=top_context["context"] @@ -36,7 +38,7 @@ async def test_wheel_scroll_iframe( subframe = await get_element("#subframe") actions.add_wheel().scroll( - x=0, y=0, delta_x=delta_x, delta_y=delta_y, origin=subframe + x=0, y=0, delta_x=delta_x, delta_y=delta_y, origin=get_element_origin(subframe) ) await bidi_session.input.perform_actions( @@ -60,7 +62,11 @@ async def test_wheel_scroll_overflow( scrollable = await get_element("#scrollable") actions.add_wheel().scroll( - x=0, y=0, delta_x=delta_x, delta_y=delta_y, origin=scrollable + x=0, + y=0, + delta_x=delta_x, + delta_y=delta_y, + origin=get_element_origin(scrollable), ) await bidi_session.input.perform_actions( diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/arguments.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/arguments.py index 0cb571038b7..ea85b2c6c94 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/arguments.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/arguments.py @@ -136,94 +136,124 @@ async def test_local_value(bidi_session, top_context, argument, expected_type): @pytest.mark.asyncio @pytest.mark.parametrize( - "setup_expression, function_declaration, expected", + "setup_expression, function_declaration, await_promise, expected", [ ( "Symbol('foo')", "(symbol) => symbol.toString()", + False, {"type": "string", "value": "Symbol(foo)"}, ), - ("[1,2]", "(array) => array[0]", {"type": "number", "value": 1}), + ( + "[1,2]", + "(array) => array[0]", + False, + {"type": "number", "value": 1}), ( "new RegExp('foo')", "(regexp) => regexp.source", + False, {"type": "string", "value": "foo"}, ), ( "new Date(1654004849000)", "(date) => date.toISOString()", + False, {"type": "string", "value": "2022-05-31T13:47:29.000Z"}, ), ( "new Map([['foo', 'bar']])", "(map) => map.get('foo')", + False, {"type": "string", "value": "bar"}, ), ( "new Set(['foo'])", "(set) => set.has('foo')", + False, {"type": "boolean", "value": True}, ), ( "{const weakMap = new WeakMap(); weakMap.set(weakMap, 'foo')}", "(weakMap)=> weakMap.get(weakMap)", + False, {"type": "string", "value": "foo"}, ), ( "{const weakSet = new WeakSet(); weakSet.add(weakSet)}", "(weakSet)=> weakSet.has(weakSet)", + False, {"type": "boolean", "value": True}, ), ( "new Error('error message')", "(error) => error.message", + False, {"type": "string", "value": "error message"}, ), ( "new SyntaxError('syntax error message')", "(error) => error.message", + False, {"type": "string", "value": "syntax error message"}, ), ( "new Promise((resolve) => resolve(3))", "(promise) => promise", + True, {"type": "number", "value": 3}, ), ( + "new Promise(() => {})", + "(promise) => promise", + False, + {"type": "promise"}, + ), + ( "new Int8Array(2)", "(int8Array) => int8Array.length", + False, {"type": "number", "value": 2}, ), ( "new ArrayBuffer(8)", "(arrayBuffer) => arrayBuffer.byteLength", + False, {"type": "number", "value": 8}, ), - ("() => true", "(func) => func()", {"type": "boolean", "value": True}), + ( + "() => true", + "(func) => func()", + False, + {"type": "boolean", "value": True}), ( "(function() {return false;})", "(func) => func()", + False, {"type": "boolean", "value": False}, ), ( "window.foo = 3; window", "(window) => window.foo", + False, {"type": "number", "value": 3}, ), ( "window.url = new URL('https://example.com'); window.url", "(url) => url.hostname", + False, {"type": "string", "value": "example.com"}, ), ( "({SOME_PROPERTY:'SOME_VALUE'})", "(obj) => obj.SOME_PROPERTY", + False, {"type": "string", "value": "SOME_VALUE"}, ), ], ) async def test_remote_reference_argument( - bidi_session, top_context, setup_expression, function_declaration, expected + bidi_session, top_context, setup_expression, function_declaration, await_promise, expected ): remote_value_result = await bidi_session.script.evaluate( expression=setup_expression, @@ -238,7 +268,7 @@ async def test_remote_reference_argument( result = await bidi_session.script.call_function( function_declaration=function_declaration, arguments=[{"handle": remote_value_handle}], - await_promise=True if remote_value_result["type"] == "promise" else False, + await_promise=await_promise, target=ContextTarget(top_context["context"]), ) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_mouse.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_mouse.py index 5b9aec0434f..14da9871f40 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_mouse.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_mouse.py @@ -192,3 +192,12 @@ def test_missing_coordinates(session, test_actions_page, mouse_chain, missing): del actions._actions[-1][missing] with pytest.raises(InvalidArgumentException): actions.perform() + + +def test_invalid_element_origin(session, test_actions_page, mouse_chain): + outer = session.find.css("#outer", all=False) + actions = mouse_chain.pointer_move( + x=0, y=0, origin={"type": "element", "element": {"sharedId": outer.id}} + ) + with pytest.raises(InvalidArgumentException): + actions.perform() diff --git a/tests/wpt/web-platform-tests/webrtc/protocol/bundle.https.html b/tests/wpt/web-platform-tests/webrtc/protocol/bundle.https.html index a9381e1e2ab..3d2b835baf3 100644 --- a/tests/wpt/web-platform-tests/webrtc/protocol/bundle.https.html +++ b/tests/wpt/web-platform-tests/webrtc/protocol/bundle.https.html @@ -118,4 +118,33 @@ a=setup:actpass assert_false(transceivers[0].stopped); assert_true(transceivers[1].stopped); }, 'max-bundle with an offer without bundle only negotiates the first m-line'); + +promise_test(async t => { + const sdp = `v=0 +o=- 0 3 IN IP4 127.0.0.1 +s=- +t=0 0 +a=group:BUNDLE audio video +m=audio 9 UDP/TLS/RTP/SAVPF 111 +c=IN IP4 0.0.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:ETEn +a=ice-pwd:OtSK0WpNtpUjkY4+86js7Z/l +a=rtcp-mux +a=sendonly +a=mid:audio +a=rtpmap:111 opus/48000/2 +a=setup:actpass +m=video 9 UDP/TLS/RTP/SAVPF 100 +c=IN IP4 0.0.0.0 +a=bundle-only +a=sendonly +a=mid:video +a=rtpmap:100 VP8/90000 +a=fmtp:100 max-fr=30;max-fs=3600 +`; + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + await pc.setRemoteDescription({ type: 'offer', sdp }); +}, 'sRD(offer) works with no transport attributes in a bundle-only m-section'); </script> diff --git a/tests/wpt/web-platform-tests/websockets/Create-http-urls.any.js b/tests/wpt/web-platform-tests/websockets/Create-http-urls.any.js new file mode 100644 index 00000000000..17590fc43ef --- /dev/null +++ b/tests/wpt/web-platform-tests/websockets/Create-http-urls.any.js @@ -0,0 +1,19 @@ +test(() => { + const url = new URL ("/", location); + url.protocol = "http"; + const httpURL = url.href; + url.protocol = "https"; + const httpsURL = url.href; + url.protocol = "ws"; + const wsURL = url.href; + url.protocol = "wss"; + const wssURL = url.href; + + let ws = new WebSocket(httpURL); + assert_equals(ws.url, wsURL); + ws.close(); + + ws = new WebSocket(httpsURL); + assert_equals(ws.url, wssURL); + ws.close(); +}, "WebSocket: ensure both HTTP schemes are supported"); diff --git a/tests/wpt/web-platform-tests/websockets/Create-invalid-urls.any.js b/tests/wpt/web-platform-tests/websockets/Create-invalid-urls.any.js index 89783a9ea74..73c9fadab9d 100644 --- a/tests/wpt/web-platform-tests/websockets/Create-invalid-urls.any.js +++ b/tests/wpt/web-platform-tests/websockets/Create-invalid-urls.any.js @@ -1,34 +1,14 @@ -// META: variant= -// META: variant=?wss -// META: variant=?wpt_flags=h2 - -var wsocket; -test(function() { - assert_throws_dom("SYNTAX_ERR", function() { - wsocket = new WebSocket("/echo") - }); -}, "Url is /echo - should throw SYNTAX_ERR"); - -test(function() { - assert_throws_dom("SYNTAX_ERR", function() { - wsocket = new WebSocket("mailto:microsoft@microsoft.com") - }); -}, "Url is a mail address - should throw SYNTAX_ERR"); - -test(function() { - assert_throws_dom("SYNTAX_ERR", function() { - wsocket = new WebSocket("about:blank") - }); -}, "Url is about:blank - should throw SYNTAX_ERR"); - -test(function() { - assert_throws_dom("SYNTAX_ERR", function() { - wsocket = new WebSocket("?test") - }); -}, "Url is ?test - should throw SYNTAX_ERR"); - -test(function() { - assert_throws_dom("SYNTAX_ERR", function() { - wsocket = new WebSocket("#test") - }); -}, "Url is #test - should throw SYNTAX_ERR"); +[ + "ws://foo bar.com/", + "wss://foo bar.com/", + "ftp://"+location.host+"/", + "mailto:example@example.org", + "about:blank", + location.origin + "/#", + location.origin + "/#test", + "#test" +].forEach(input => { + test(() => { + assert_throws_dom("SyntaxError", () => new WebSocket(input)); + }, `new WebSocket("${input}") should throw a "SyntaxError" DOMException`); +}); diff --git a/tests/wpt/web-platform-tests/websockets/Create-non-absolute-url.any.js b/tests/wpt/web-platform-tests/websockets/Create-non-absolute-url.any.js index 8d533fd2e04..5a7b1794d04 100644 --- a/tests/wpt/web-platform-tests/websockets/Create-non-absolute-url.any.js +++ b/tests/wpt/web-platform-tests/websockets/Create-non-absolute-url.any.js @@ -1,11 +1,14 @@ -// META: script=constants.sub.js -// META: variant= -// META: variant=?wss -// META: variant=?wpt_flags=h2 - -test(function() { - var wsocket; - assert_throws_dom("SYNTAX_ERR", function() { - wsocket = CreateWebSocketNonAbsolute() - }); -}, "Create WebSocket - Pass a non absolute URL - SYNTAX_ERR is thrown") +[ + "test", + "?", + null, + 123, +].forEach(input => { + test(() => { + const url = new URL(input, location); + url.protocol = "ws"; + const ws = new WebSocket(input); + assert_equals(ws.url, url.href); + ws.close(); + }, `Create WebSocket - Pass a non absolute URL: ${input}`); +}); diff --git a/tests/wpt/web-platform-tests/websockets/Create-url-with-windows-1252-encoding.html b/tests/wpt/web-platform-tests/websockets/Create-url-with-windows-1252-encoding.html new file mode 100644 index 00000000000..6596b5e1a0b --- /dev/null +++ b/tests/wpt/web-platform-tests/websockets/Create-url-with-windows-1252-encoding.html @@ -0,0 +1,20 @@ +<!doctype html> +<meta charset=windows-1252> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +test(() => { + const url = new URL("/", location); + url.protocol = "ws"; + const input = "?\u20AC"; + const expected = url.href + "?%E2%82%AC"; + + let ws = new WebSocket(url.href + input); + assert_equals(ws.url, expected); + ws.close(); + + ws = new WebSocket("/" + input); + assert_equals(ws.url, expected); + ws.close(); +}, "URL's percent-encoding is always in UTF-8 for WebSocket"); +</script> diff --git a/tests/wpt/web-platform-tests/websockets/Create-wrong-scheme.any.js b/tests/wpt/web-platform-tests/websockets/Create-wrong-scheme.any.js deleted file mode 100644 index 00cfffece60..00000000000 --- a/tests/wpt/web-platform-tests/websockets/Create-wrong-scheme.any.js +++ /dev/null @@ -1,11 +0,0 @@ -// META: script=constants.sub.js -// META: variant= -// META: variant=?wss -// META: variant=?wpt_flags=h2 - -test(function() { - var wsocket; - assert_throws_dom("SYNTAX_ERR", function() { - wsocket = CreateWebSocketNonWsScheme() - }); -}, "Create WebSocket - Pass a URL with a non ws/wss scheme - SYNTAX_ERR is thrown") diff --git a/tests/wpt/web-platform-tests/websockets/constants.sub.js b/tests/wpt/web-platform-tests/websockets/constants.sub.js index 65ea4f66f29..d8e340d304b 100644 --- a/tests/wpt/web-platform-tests/websockets/constants.sub.js +++ b/tests/wpt/web-platform-tests/websockets/constants.sub.js @@ -32,18 +32,6 @@ function IsWebSocket() { } } -function CreateWebSocketNonAbsolute() { - IsWebSocket(); - const url = __SERVER__NAME; - return new WebSocket(url); -} - -function CreateWebSocketNonWsScheme() { - IsWebSocket(); - const url = "http://" + __SERVER__NAME + ":" + __PORT + "/" + __PATH; - return new WebSocket(url); -} - function CreateWebSocketNonAsciiProtocol(nonAsciiProtocol) { IsWebSocket(); const url = SCHEME_DOMAIN_PORT + "/" + __PATH; diff --git a/tests/wpt/web-platform-tests/websockets/constructor/002.html b/tests/wpt/web-platform-tests/websockets/constructor/002.html deleted file mode 100644 index 8c80c23735f..00000000000 --- a/tests/wpt/web-platform-tests/websockets/constructor/002.html +++ /dev/null @@ -1,21 +0,0 @@ -<!doctype html> -<title>WebSockets: new WebSocket(invalid url)</title> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=../constants.sub.js></script> -<meta name="variant" content=""> -<meta name="variant" content="?wss"> -<meta name="variant" content="?wpt_flags=h2"> -<div id=log></div> -<script> -test(function() {assert_throws_dom("SyntaxError", function(){new WebSocket("/test")})}); -test(function() {assert_throws_dom("SyntaxError", function(){new WebSocket("ws://foo bar.com/")})}); -test(function() {assert_throws_dom("SyntaxError", function(){new WebSocket("wss://foo bar.com/")})}); -test(function() {assert_throws_dom("SyntaxError", function(){new WebSocket("http://"+location.host+"/")})}); -test(function() {assert_throws_dom("SyntaxError", function(){new WebSocket("mailto:example@example.org")})}); -test(function() {assert_throws_dom("SyntaxError", function(){new WebSocket("about:blank")})}); -test(function() {assert_throws_dom("SyntaxError", function(){new WebSocket(SCHEME_DOMAIN_PORT+"/#")})}); -test(function() {assert_throws_dom("SyntaxError", function(){new WebSocket(SCHEME_DOMAIN_PORT+"/#test")})}); -test(function() {assert_throws_dom("SyntaxError", function(){new WebSocket("?test")})}); -test(function() {assert_throws_dom("SyntaxError", function(){new WebSocket("#test")})}); -</script> diff --git a/tests/wpt/web-platform-tests/webtransport/close.https.any.js b/tests/wpt/web-platform-tests/webtransport/close.https.any.js index 642d716a103..de675036f3d 100644 --- a/tests/wpt/web-platform-tests/webtransport/close.https.any.js +++ b/tests/wpt/web-platform-tests/webtransport/close.https.any.js @@ -14,7 +14,7 @@ promise_test(async t => { const close_info = await wt.closed; - assert_equals(close_info.closeCode, 0 , 'code'); + assert_equals(close_info.closeCode, 0, 'code'); assert_equals(close_info.reason, '', 'reason'); await wait(10); @@ -129,3 +129,25 @@ promise_test(async t => { assert_equals(e.source, 'session', 'source'); assert_equals(e.streamErrorCode, null, 'streamErrorCode'); }, 'server initiated connection closure'); + +promise_test(async t => { + const wt = new WebTransport(webtransport_url('echo.py')); + const stream = await wt.createUnidirectionalStream(); + await wt.ready; +}, 'opening unidirectional stream before ready'); + +promise_test(async t => { + const wt = new WebTransport(webtransport_url('echo.py')); + const stream = await wt.createBidirectionalStream(); + await wt.ready; +}, 'opening bidirectional stream before ready'); + +promise_test(async t => { + const wt = new WebTransport(webtransport_url('server-close.py')); + promise_rejects_dom(t, "InvalidStateError", wt.createUnidirectionalStream()); +}, 'server initiated closure while opening unidirectional stream before ready'); + +promise_test(async t => { + const wt = new WebTransport(webtransport_url('server-close.py')); + promise_rejects_dom(t, "InvalidStateError", wt.createBidirectionalStream()); +}, 'server initiated closure while opening bidirectional stream before ready'); diff --git a/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-meta.html b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-meta.html index cff8e91488e..97a5da870f8 100644 --- a/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-meta.html +++ b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-import-meta.html @@ -53,7 +53,7 @@ promise_test(() => { worker.postMessage('./' + script_url + '#1'); return new Promise(resolve => worker.onmessage = resolve); }) - .then(msg_event => assert_true(msg_event.data.endsWith(script_url))); + .then(msg_event => assert_true(msg_event.data.endsWith(script_url + "#1"))); }, 'Test import.meta.url on the imported module script with a fragment.'); </script> |