diff --git a/tests/wpt/metadata-layout-2020/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.js.ini b/tests/wpt/metadata-layout-2020/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.js.ini index 91d1ef0799f..e222def8988 100644 --- a/tests/wpt/metadata-layout-2020/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.js.ini +++ b/tests/wpt/metadata-layout-2020/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.js.ini @@ -593,6 +593,12 @@ [Invalid key pair: importKey(jwk (public) , {name: Ed448}, true, [sign, sign\])] expected: FAIL + [Invalid key pair: importKey(jwk(private), {name: Ed448}, true, [sign\])] + expected: FAIL + + [Invalid key pair: importKey(jwk(private), {name: Ed448}, true, [sign, sign\])] + expected: FAIL + [okp_importKey_failures_Ed448.https.any.html] [Bad usages: importKey(spki, {name: Ed448}, true, [encrypt\])] @@ -1188,3 +1194,9 @@ [Invalid key pair: importKey(jwk (public) , {name: Ed448}, true, [sign, sign\])] expected: FAIL + + [Invalid key pair: importKey(jwk(private), {name: Ed448}, true, [sign\])] + expected: FAIL + + [Invalid key pair: importKey(jwk(private), {name: Ed448}, true, [sign, sign\])] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js.ini b/tests/wpt/metadata-layout-2020/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js.ini index 3746cfa45ec..b76b57f3270 100644 --- a/tests/wpt/metadata-layout-2020/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js.ini +++ b/tests/wpt/metadata-layout-2020/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js.ini @@ -581,6 +581,18 @@ [Invalid key pair: importKey(jwk (public) , {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits\])] expected: FAIL + [Invalid key pair: importKey(jwk(private), {name: X448}, true, [deriveKey\])] + expected: FAIL + + [Invalid key pair: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey\])] + expected: FAIL + + [Invalid key pair: importKey(jwk(private), {name: X448}, true, [deriveBits\])] + expected: FAIL + + [Invalid key pair: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits\])] + expected: FAIL + [okp_importKey_failures_X448.https.any.worker.html] [Bad usages: importKey(spki, {name: X448}, true, [encrypt\])] @@ -1164,3 +1176,15 @@ [Invalid key pair: importKey(jwk (public) , {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits\])] expected: FAIL + + [Invalid key pair: importKey(jwk(private), {name: X448}, true, [deriveKey\])] + expected: FAIL + + [Invalid key pair: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey\])] + expected: FAIL + + [Invalid key pair: importKey(jwk(private), {name: X448}, true, [deriveBits\])] + expected: FAIL + + [Invalid key pair: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits\])] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini deleted file mode 100644 index 147f062e548..00000000000 --- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[hit-test-floats-005.html] - [Miss clipped float] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-in-inline-hittest-001.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-in-inline-hittest-001.html.ini new file mode 100644 index 00000000000..b4eea326212 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/CSS2/normal-flow/block-in-inline-hittest-001.html.ini @@ -0,0 +1,3 @@ +[block-in-inline-hittest-001.html] + [block-in-inline-hittest-001] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-fonts/variations/at-font-face-font-matching.html.ini b/tests/wpt/metadata-layout-2020/css/css-fonts/variations/at-font-face-font-matching.html.ini index 1602265618b..8c0193fa2e7 100644 --- a/tests/wpt/metadata-layout-2020/css/css-fonts/variations/at-font-face-font-matching.html.ini +++ b/tests/wpt/metadata-layout-2020/css/css-fonts/variations/at-font-face-font-matching.html.ini @@ -125,9 +125,6 @@ [Matching font-style: 'italic' should prefer 'oblique 20deg' over 'oblique 30deg 60deg'] expected: FAIL - [Matching font-style: 'italic' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg'] - expected: FAIL - [Matching font-style: 'italic' should prefer 'oblique 40deg 50deg' over 'oblique 5deg 10deg'] expected: FAIL @@ -173,9 +170,6 @@ [Matching font-style: 'oblique 10deg' should prefer 'italic' over 'oblique 0deg'] expected: FAIL - [Matching font-style: 'oblique 10deg' should prefer 'oblique 0deg' over 'oblique -50deg -20deg'] - expected: FAIL - [Matching font-style: 'oblique 10deg' should prefer 'oblique -50deg -20deg' over 'oblique -40deg -30deg'] expected: FAIL @@ -200,9 +194,6 @@ [Matching font-style: 'oblique -10deg' should prefer 'oblique -20deg -15deg' over 'oblique -60deg -30deg'] expected: FAIL - [Matching font-style: 'oblique -10deg' should prefer 'oblique -60deg -30deg' over 'oblique -50deg -40deg'] - expected: FAIL - [Matching font-style: 'oblique -10deg' should prefer 'oblique -50deg -40deg' over 'italic'] expected: FAIL @@ -251,12 +242,6 @@ [Matching font-weight: '501' should prefer '503 520' over '500'] expected: FAIL - [Matching font-stretch: '90%' should prefer '60% 70%' over '110% 140%'] - expected: FAIL - - [Matching font-style: 'italic' should prefer 'oblique 5deg 10deg' over 'oblique 5deg'] - expected: FAIL - [Matching font-style: 'italic' should prefer 'oblique 5deg' over 'normal'] expected: FAIL @@ -301,3 +286,24 @@ [Matching font-style: 'oblique -20deg' should prefer 'oblique -20deg' over 'oblique -60deg -40deg'] expected: FAIL + + [Matching font-weight: '500' should prefer '500' over '450 460'] + expected: FAIL + + [Matching font-weight: '399' should prefer '200 300' over '400'] + expected: FAIL + + [Matching font-style: 'oblique 20deg' should prefer 'oblique 10deg' over 'italic'] + expected: FAIL + + [Matching font-style: 'oblique 20deg' should prefer 'oblique 0deg' over 'oblique -50deg -20deg'] + expected: FAIL + + [Matching font-style: 'oblique 21deg' should prefer 'oblique 21deg' over 'oblique 30deg 60deg'] + expected: FAIL + + [Matching font-style: 'oblique 21deg' should prefer 'oblique 20deg' over 'oblique 10deg'] + expected: FAIL + + [Matching font-style: 'oblique 0deg' should prefer 'oblique 40deg 50deg' over 'italic'] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-text/white-space/trailing-space-position-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-text/white-space/trailing-space-position-001.html.ini index ad3b251437e..2a6a9ba5a81 100644 --- a/tests/wpt/metadata-layout-2020/css/css-text/white-space/trailing-space-position-001.html.ini +++ b/tests/wpt/metadata-layout-2020/css/css-text/white-space/trailing-space-position-001.html.ini @@ -4,6 +4,3 @@ [CSS Test: Positions of trailing collapsible spaces 2] expected: FAIL - - [CSS Test: Positions of trailing collapsible spaces 4] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-001.html.ini index 73c4b4ace57..6eac2d016ea 100644 --- a/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-001.html.ini +++ b/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-001.html.ini @@ -352,3 +352,126 @@ [text-shadow shadow(shadow) / values] expected: FAIL + + [background-color color(rgba) / values] + expected: FAIL + + [border-top-width length(pt) / values] + expected: FAIL + + [border-top-width length(pc) / values] + expected: FAIL + + [border-top-width length(px) / values] + expected: FAIL + + [border-top-width length(em) / values] + expected: FAIL + + [border-top-width length(ex) / values] + expected: FAIL + + [border-top-width length(mm) / values] + expected: FAIL + + [border-top-width length(cm) / values] + expected: FAIL + + [border-top-width length(in) / values] + expected: FAIL + + [border-right-width length(pt) / values] + expected: FAIL + + [border-right-width length(pc) / values] + expected: FAIL + + [border-right-width length(px) / values] + expected: FAIL + + [border-right-width length(em) / values] + expected: FAIL + + [border-right-width length(ex) / values] + expected: FAIL + + [border-right-width length(mm) / values] + expected: FAIL + + [border-right-width length(cm) / values] + expected: FAIL + + [border-right-width length(in) / values] + expected: FAIL + + [border-bottom-width length(pt) / values] + expected: FAIL + + [border-bottom-width length(pc) / values] + expected: FAIL + + [border-bottom-width length(px) / values] + expected: FAIL + + [border-bottom-width length(em) / values] + expected: FAIL + + [border-bottom-width length(ex) / values] + expected: FAIL + + [border-bottom-width length(mm) / values] + expected: FAIL + + [border-bottom-width length(cm) / values] + expected: FAIL + + [border-bottom-width length(in) / values] + expected: FAIL + + [border-left-width length(pt) / values] + expected: FAIL + + [border-left-width length(pc) / values] + expected: FAIL + + [border-left-width length(px) / values] + expected: FAIL + + [border-left-width length(em) / values] + expected: FAIL + + [border-left-width length(ex) / values] + expected: FAIL + + [border-left-width length(mm) / values] + expected: FAIL + + [border-left-width length(cm) / values] + expected: FAIL + + [border-left-width length(in) / values] + expected: FAIL + + [border-top-color color(rgba) / values] + expected: FAIL + + [border-right-color color(rgba) / values] + expected: FAIL + + [border-bottom-color color(rgba) / values] + expected: FAIL + + [border-left-color color(rgba) / values] + expected: FAIL + + [padding-bottom length(pt) / values] + expected: FAIL + + [padding-bottom length(pc) / values] + expected: FAIL + + [padding-bottom length(px) / values] + expected: FAIL + + [padding-bottom length(em) / values] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-002.html.ini b/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-002.html.ini index ce3251ad5da..d34dc5456ba 100644 --- a/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-002.html.ini +++ b/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-002.html.ini @@ -1,27 +1,3 @@ [properties-value-002.html] [vertical-align vertical(keyword) / values] expected: FAIL - - [margin-bottom percentage(%) / values] - expected: FAIL - - [margin-left percentage(%) / values] - expected: FAIL - - [margin-right percentage(%) / values] - expected: FAIL - - [margin-top percentage(%) / values] - expected: FAIL - - [padding-bottom percentage(%) / values] - expected: FAIL - - [padding-left percentage(%) / values] - expected: FAIL - - [padding-right percentage(%) / values] - expected: FAIL - - [padding-top percentage(%) / values] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-inherit-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-inherit-001.html.ini index 29ecf3883fa..cb4e61edc69 100644 --- a/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-inherit-001.html.ini +++ b/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-inherit-001.html.ini @@ -56,575 +56,152 @@ [background-position length(px) / events] expected: FAIL - [background-color color(rgba) / events] + [color color(rgba) / events] expected: FAIL - [border-top-width length(pt) / events] + [font-size length(pt) / events] expected: FAIL - [border-top-width length(pc) / events] + [font-size length(pc) / events] expected: FAIL - [border-top-width length(px) / events] + [font-size length(px) / events] expected: FAIL - [border-top-width length(em) / events] + [font-size length(em) / events] expected: FAIL - [border-top-width length(ex) / events] + [font-size length(ex) / events] expected: FAIL - [border-top-width length(mm) / events] + [font-size length(mm) / events] expected: FAIL - [border-top-width length(cm) / events] + [font-size length(cm) / events] expected: FAIL - [border-top-width length(in) / events] + [font-size length(in) / events] expected: FAIL - [border-right-width length(pt) / events] + [font-size percentage(%) / events] expected: FAIL - [border-right-width length(pc) / events] + [font-weight font-weight(keyword) / events] expected: FAIL - [border-right-width length(px) / events] + [font-weight font-weight(numeric) / events] expected: FAIL - [border-right-width length(em) / events] + [line-height number(integer) / events] expected: FAIL - [border-right-width length(ex) / events] + [line-height number(decimal) / events] expected: FAIL - [border-right-width length(mm) / events] + [line-height length(pt) / events] expected: FAIL - [border-right-width length(cm) / events] + [line-height length(pc) / events] expected: FAIL - [border-right-width length(in) / events] + [line-height length(px) / events] expected: FAIL - [border-bottom-width length(pt) / events] + [line-height length(em) / events] expected: FAIL - [border-bottom-width length(pc) / events] + [line-height length(ex) / events] expected: FAIL - [border-bottom-width length(px) / events] + [line-height length(mm) / events] expected: FAIL - [border-bottom-width length(em) / events] + [line-height length(cm) / events] expected: FAIL - [border-bottom-width length(ex) / events] + [line-height length(in) / events] expected: FAIL - [border-bottom-width length(mm) / events] + [line-height percentage(%) / events] expected: FAIL - [border-bottom-width length(cm) / events] + [letter-spacing length(pt) / events] expected: FAIL - [border-bottom-width length(in) / events] + [letter-spacing length(pc) / events] expected: FAIL - [border-left-width length(pt) / events] + [letter-spacing length(px) / events] expected: FAIL - [border-left-width length(pc) / events] + [letter-spacing length(em) / events] expected: FAIL - [border-left-width length(px) / events] + [letter-spacing length(ex) / events] expected: FAIL - [border-left-width length(em) / events] + [letter-spacing length(mm) / events] expected: FAIL - [border-left-width length(ex) / events] + [letter-spacing length(cm) / events] expected: FAIL - [border-left-width length(mm) / events] + [letter-spacing length(in) / events] expected: FAIL - [border-left-width length(cm) / events] + [word-spacing length(pt) / events] expected: FAIL - [border-left-width length(in) / events] + [word-spacing length(pc) / events] expected: FAIL - [border-top-color color(rgba) / events] + [word-spacing length(px) / events] expected: FAIL - [border-right-color color(rgba) / events] + [word-spacing length(em) / events] expected: FAIL - [border-bottom-color color(rgba) / events] + [word-spacing length(ex) / events] expected: FAIL - [border-left-color color(rgba) / events] + [word-spacing length(mm) / events] expected: FAIL - [padding-bottom length(pt) / events] + [word-spacing length(cm) / events] expected: FAIL - [padding-bottom length(pc) / events] + [word-spacing length(in) / events] expected: FAIL - [padding-bottom length(px) / events] + [word-spacing percentage(%) / events] expected: FAIL - [padding-bottom length(em) / events] + [text-indent length(pt) / events] expected: FAIL - [max-height length(ex) / events] + [text-indent length(pc) / events] expected: FAIL - [max-height length(mm) / events] + [text-indent length(px) / events] expected: FAIL - [max-height length(cm) / events] + [text-indent length(em) / events] expected: FAIL - [max-height length(in) / events] + [text-indent length(ex) / events] expected: FAIL - [max-height percentage(%) / events] + [text-indent length(mm) / events] expected: FAIL - [max-width length(pt) / events] + [text-indent length(cm) / events] expected: FAIL - [max-width length(pc) / events] + [text-indent length(in) / events] expected: FAIL - [max-width length(px) / events] + [text-indent percentage(%) / events] expected: FAIL - [max-width length(em) / events] - expected: FAIL - - [max-width length(ex) / events] - expected: FAIL - - [max-width length(mm) / events] - expected: FAIL - - [max-width length(cm) / events] - expected: FAIL - - [max-width length(in) / events] - expected: FAIL - - [max-width percentage(%) / events] - expected: FAIL - - [top length(pt) / events] - expected: FAIL - - [top length(pc) / events] - expected: FAIL - - [top length(px) / events] - expected: FAIL - - [top length(em) / events] - expected: FAIL - - [top length(ex) / events] - expected: FAIL - - [top length(mm) / events] - expected: FAIL - - [top length(cm) / events] - expected: FAIL - - [top length(in) / events] - expected: FAIL - - [top percentage(%) / events] - expected: FAIL - - [right length(pt) / events] - expected: FAIL - - [right length(pc) / events] - expected: FAIL - - [right length(px) / events] - expected: FAIL - - [right length(em) / events] - expected: FAIL - - [right length(ex) / events] - expected: FAIL - - [right length(mm) / events] - expected: FAIL - - [right length(cm) / events] - expected: FAIL - - [right length(in) / events] - expected: FAIL - - [right percentage(%) / events] - expected: FAIL - - [bottom length(pt) / events] - expected: FAIL - - [bottom length(pc) / events] - expected: FAIL - - [bottom length(px) / events] - expected: FAIL - - [bottom length(em) / events] - expected: FAIL - - [bottom length(ex) / events] - expected: FAIL - - [bottom length(mm) / events] - expected: FAIL - - [bottom length(cm) / events] - expected: FAIL - - [bottom length(in) / events] - expected: FAIL - - [bottom percentage(%) / events] - expected: FAIL - - [left length(pt) / events] - expected: FAIL - - [left length(pc) / events] - expected: FAIL - - [left length(px) / events] - expected: FAIL - - [left length(em) / events] - expected: FAIL - - [left length(ex) / events] - expected: FAIL - - [left length(mm) / events] - expected: FAIL - - [left length(cm) / events] - expected: FAIL - - [left length(in) / events] - expected: FAIL - - [left percentage(%) / events] - expected: FAIL - - [padding-bottom length(ex) / events] - expected: FAIL - - [padding-bottom length(mm) / events] - expected: FAIL - - [padding-bottom length(cm) / events] - expected: FAIL - - [padding-bottom length(in) / events] - expected: FAIL - - [padding-left length(pt) / events] - expected: FAIL - - [padding-left length(pc) / events] - expected: FAIL - - [padding-left length(px) / events] - expected: FAIL - - [padding-left length(em) / events] - expected: FAIL - - [padding-left length(ex) / events] - expected: FAIL - - [padding-left length(mm) / events] - expected: FAIL - - [padding-left length(cm) / events] - expected: FAIL - - [padding-left length(in) / events] - expected: FAIL - - [padding-right length(pt) / events] - expected: FAIL - - [padding-right length(pc) / events] - expected: FAIL - - [padding-right length(px) / events] - expected: FAIL - - [padding-right length(em) / events] - expected: FAIL - - [padding-right length(ex) / events] - expected: FAIL - - [padding-right length(mm) / events] - expected: FAIL - - [padding-right length(cm) / events] - expected: FAIL - - [padding-right length(in) / events] - expected: FAIL - - [padding-top length(pt) / events] - expected: FAIL - - [padding-top length(pc) / events] - expected: FAIL - - [padding-top length(px) / events] - expected: FAIL - - [padding-top length(em) / events] - expected: FAIL - - [padding-top length(ex) / events] - expected: FAIL - - [padding-top length(mm) / events] - expected: FAIL - - [padding-top length(cm) / events] - expected: FAIL - - [padding-top length(in) / events] - expected: FAIL - - [margin-bottom length(pt) / events] - expected: FAIL - - [margin-bottom length(pc) / events] - expected: FAIL - - [margin-bottom length(px) / events] - expected: FAIL - - [margin-bottom length(em) / events] - expected: FAIL - - [margin-bottom length(ex) / events] - expected: FAIL - - [margin-bottom length(mm) / events] - expected: FAIL - - [margin-bottom length(cm) / events] - expected: FAIL - - [margin-bottom length(in) / events] - expected: FAIL - - [margin-left length(pt) / events] - expected: FAIL - - [margin-left length(pc) / events] - expected: FAIL - - [margin-left length(px) / events] - expected: FAIL - - [margin-left length(em) / events] - expected: FAIL - - [margin-left length(ex) / events] - expected: FAIL - - [margin-left length(mm) / events] - expected: FAIL - - [margin-left length(cm) / events] - expected: FAIL - - [margin-left length(in) / events] - expected: FAIL - - [margin-right length(pt) / events] - expected: FAIL - - [margin-right length(pc) / events] - expected: FAIL - - [margin-right length(px) / events] - expected: FAIL - - [margin-right length(em) / events] - expected: FAIL - - [margin-right length(ex) / events] - expected: FAIL - - [margin-right length(mm) / events] - expected: FAIL - - [margin-right length(cm) / events] - expected: FAIL - - [margin-right length(in) / events] - expected: FAIL - - [margin-top length(pt) / events] - expected: FAIL - - [margin-top length(pc) / events] - expected: FAIL - - [margin-top length(px) / events] - expected: FAIL - - [margin-top length(em) / events] - expected: FAIL - - [margin-top length(ex) / events] - expected: FAIL - - [margin-top length(mm) / events] - expected: FAIL - - [margin-top length(cm) / events] - expected: FAIL - - [margin-top length(in) / events] - expected: FAIL - - [height length(pt) / events] - expected: FAIL - - [height length(pc) / events] - expected: FAIL - - [height length(px) / events] - expected: FAIL - - [height length(em) / events] - expected: FAIL - - [height length(ex) / events] - expected: FAIL - - [height length(mm) / events] - expected: FAIL - - [height length(cm) / events] - expected: FAIL - - [height length(in) / events] - expected: FAIL - - [height percentage(%) / events] - expected: FAIL - - [width length(pt) / events] - expected: FAIL - - [width length(pc) / events] - expected: FAIL - - [width length(px) / events] - expected: FAIL - - [width length(em) / events] - expected: FAIL - - [width length(ex) / events] - expected: FAIL - - [width length(mm) / events] - expected: FAIL - - [width length(cm) / events] - expected: FAIL - - [width length(in) / events] - expected: FAIL - - [width percentage(%) / events] - expected: FAIL - - [min-height length(pt) / events] - expected: FAIL - - [min-height length(pc) / events] - expected: FAIL - - [min-height length(px) / events] - expected: FAIL - - [min-height length(em) / events] - expected: FAIL - - [min-height length(ex) / events] - expected: FAIL - - [min-height length(mm) / events] - expected: FAIL - - [min-height length(cm) / events] - expected: FAIL - - [min-height length(in) / events] - expected: FAIL - - [min-height percentage(%) / events] - expected: FAIL - - [min-width length(pt) / events] - expected: FAIL - - [min-width length(pc) / events] - expected: FAIL - - [min-width length(px) / events] - expected: FAIL - - [min-width length(em) / events] - expected: FAIL - - [min-width length(ex) / events] - expected: FAIL - - [min-width length(mm) / events] - expected: FAIL - - [min-width length(cm) / events] - expected: FAIL - - [min-width length(in) / events] - expected: FAIL - - [min-width percentage(%) / events] - expected: FAIL - - [max-height length(pt) / events] - expected: FAIL - - [max-height length(pc) / events] - expected: FAIL - - [max-height length(px) / events] - expected: FAIL - - [max-height length(em) / events] + [text-shadow shadow(shadow) / events] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini deleted file mode 100644 index cf67b5d03dd..00000000000 --- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[elementFromPoint-dynamic-anon-box.html] - [Link should be clickable after hiding a scrollbox with an anonymous table inside] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini deleted file mode 100644 index b905fe70fcb..00000000000 --- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[elementFromPoint-ellipsis-in-inline-box.html] - [elementFromPoint-ellipsis-in-inline-box] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-float-in-table.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-float-in-table.html.ini deleted file mode 100644 index db065588308..00000000000 --- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-float-in-table.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[elementFromPoint-float-in-table.html] - [float-in-div] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-visibility-hidden-resizer.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-visibility-hidden-resizer.html.ini deleted file mode 100644 index a6bca7ac372..00000000000 --- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-visibility-hidden-resizer.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[elementFromPoint-visibility-hidden-resizer.html] - [elementFromPoint on resizer area of an element with visibility:hidden] - expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini index fef9ce7fc04..1a06450c5c1 100644 --- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini +++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini @@ -16,3 +16,6 @@ [test some point of the element: top left corner] expected: FAIL + + [test the top of layer] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini new file mode 100644 index 00000000000..a3496a40d07 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini @@ -0,0 +1,3 @@ +[elementsFromPoint-invalid-cases.html] + [The root element is the last element returned for otherwise empty queries within the viewport] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/fetch/content-length/parsing.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-length/parsing.window.js.ini index 3285a4f15ac..959ec1fd02b 100644 --- a/tests/wpt/metadata-layout-2020/fetch/content-length/parsing.window.js.ini +++ b/tests/wpt/metadata-layout-2020/fetch/content-length/parsing.window.js.ini @@ -76,3 +76,6 @@ [Input: "Content-Length: ". Expected: 42.] expected: FAIL + + [Input: "Content-Length: 42\\r\\nContent-Length: 42,42". Expected: 42.] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini index 8edde75f4d0..a0bee01802c 100644 --- a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini @@ -308,3 +308,9 @@ [Response: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK] expected: NOTRUN + + [ +

Cross origin

+ + + + diff --git a/tests/wpt/web-platform-tests/html/user-activation/resources/child-two.html b/tests/wpt/web-platform-tests/html/user-activation/resources/child-two.html index caf23f4dadd..9fb68dbd515 100644 --- a/tests/wpt/web-platform-tests/html/user-activation/resources/child-two.html +++ b/tests/wpt/web-platform-tests/html/user-activation/resources/child-two.html @@ -7,6 +7,14 @@ "hasBeenActive": navigator.userActivation.hasBeenActive }), "*"); + window.addEventListener("click", event => { + window.top.postMessage(JSON.stringify({ + "type": "child-two-clicked", + "isActive": navigator.userActivation.isActive, + "hasBeenActive": navigator.userActivation.hasBeenActive + }), "*"); + }); + window.addEventListener("message", event => { var msg = JSON.parse(event.data); if (msg.type == "report") { diff --git a/tests/wpt/web-platform-tests/html/user-activation/resources/utils.js b/tests/wpt/web-platform-tests/html/user-activation/resources/utils.js index f4ff4268256..5d3302583fb 100644 --- a/tests/wpt/web-platform-tests/html/user-activation/resources/utils.js +++ b/tests/wpt/web-platform-tests/html/user-activation/resources/utils.js @@ -31,3 +31,18 @@ async function consumeTransientActivation() { return false; } } + +function receiveMessage(type) { + return new Promise((resolve) => { + window.addEventListener("message", function listener(event) { + if (typeof event.data !== "string") { + return; + } + const data = JSON.parse(event.data); + if (data.type === type) { + window.removeEventListener("message", listener); + resolve(data); + } + }); + }); +} diff --git a/tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-feature-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-feature-policy.https.sub.html.headers deleted file mode 100644 index 729e9429e6a..00000000000 --- a/tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-feature-policy.https.sub.html.headers +++ /dev/null @@ -1 +0,0 @@ -Feature-Policy: idle-detection * diff --git a/tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html b/tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub.html similarity index 86% rename from tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html rename to tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub.html index 6c6ff6f14c8..fc92a09f6c8 100644 --- a/tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html +++ b/tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub.html @@ -4,16 +4,16 @@ - + - + diff --git a/tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html similarity index 70% rename from tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-feature-policy.https.sub.html rename to tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html index 75d15409de3..47a7d69ee0c 100644 --- a/tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-feature-policy.https.sub.html +++ b/tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html @@ -4,15 +4,15 @@ - + diff --git a/tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html.headers new file mode 100644 index 00000000000..2bf18afe5fe --- /dev/null +++ b/tests/wpt/web-platform-tests/idle-detection/idle-detection-allowed-by-permissions-policy.https.sub.html.headers @@ -0,0 +1 @@ +Permissions-Policy: idle-detection=* diff --git a/tests/wpt/web-platform-tests/idle-detection/idle-detection-default-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/idle-detection/idle-detection-default-permissions-policy.https.sub.html similarity index 75% rename from tests/wpt/web-platform-tests/idle-detection/idle-detection-default-feature-policy.https.sub.html rename to tests/wpt/web-platform-tests/idle-detection/idle-detection-default-permissions-policy.https.sub.html index f0766ae960e..762e29968ec 100644 --- a/tests/wpt/web-platform-tests/idle-detection/idle-detection-default-feature-policy.https.sub.html +++ b/tests/wpt/web-platform-tests/idle-detection/idle-detection-default-permissions-policy.https.sub.html @@ -4,12 +4,12 @@ - + diff --git a/tests/wpt/web-platform-tests/idle-detection/idle-detection-disabled-by-feature-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/idle-detection/idle-detection-disabled-by-feature-policy.https.sub.html.headers deleted file mode 100644 index f27e1a26271..00000000000 --- a/tests/wpt/web-platform-tests/idle-detection/idle-detection-disabled-by-feature-policy.https.sub.html.headers +++ /dev/null @@ -1 +0,0 @@ -Feature-Policy: idle-detection 'none' diff --git a/tests/wpt/web-platform-tests/idle-detection/idle-detection-disabled-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/idle-detection/idle-detection-disabled-by-permissions-policy.https.sub.html similarity index 68% rename from tests/wpt/web-platform-tests/idle-detection/idle-detection-disabled-by-feature-policy.https.sub.html rename to tests/wpt/web-platform-tests/idle-detection/idle-detection-disabled-by-permissions-policy.https.sub.html index 2814a2263db..90317dece7a 100644 --- a/tests/wpt/web-platform-tests/idle-detection/idle-detection-disabled-by-feature-policy.https.sub.html +++ b/tests/wpt/web-platform-tests/idle-detection/idle-detection-disabled-by-permissions-policy.https.sub.html @@ -2,15 +2,15 @@ - + diff --git a/tests/wpt/web-platform-tests/idle-detection/idle-detection-disabled-by-permissions-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/idle-detection/idle-detection-disabled-by-permissions-policy.https.sub.html.headers new file mode 100644 index 00000000000..289463c30d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/idle-detection/idle-detection-disabled-by-permissions-policy.https.sub.html.headers @@ -0,0 +1 @@ +Permissions-Policy: idle-detection=() diff --git a/tests/wpt/web-platform-tests/idle-detection/resources/idle-detection-allowed-by-feature-policy-worker.js b/tests/wpt/web-platform-tests/idle-detection/resources/idle-detection-allowed-by-permissions-policy-worker.js similarity index 75% rename from tests/wpt/web-platform-tests/idle-detection/resources/idle-detection-allowed-by-feature-policy-worker.js rename to tests/wpt/web-platform-tests/idle-detection/resources/idle-detection-allowed-by-permissions-policy-worker.js index e643414f750..1fe410ed114 100644 --- a/tests/wpt/web-platform-tests/idle-detection/resources/idle-detection-allowed-by-feature-policy-worker.js +++ b/tests/wpt/web-platform-tests/idle-detection/resources/idle-detection-allowed-by-permissions-policy-worker.js @@ -11,6 +11,6 @@ if (typeof postMessage === 'function') { promise_test(async () => { await new IdleDetector().start() }, - `Inherited header feature policy allows ${workerType} workers.`) + `Inherited header permissions policy allows ${workerType} workers.`) done(); diff --git a/tests/wpt/web-platform-tests/idle-detection/resources/idle-detection-disabled-by-feature-policy-worker.js b/tests/wpt/web-platform-tests/idle-detection/resources/idle-detection-disabled-by-permissions-policy-worker.js similarity index 87% rename from tests/wpt/web-platform-tests/idle-detection/resources/idle-detection-disabled-by-feature-policy-worker.js rename to tests/wpt/web-platform-tests/idle-detection/resources/idle-detection-disabled-by-permissions-policy-worker.js index 138b29173f7..c30f7c188e7 100644 --- a/tests/wpt/web-platform-tests/idle-detection/resources/idle-detection-disabled-by-feature-policy-worker.js +++ b/tests/wpt/web-platform-tests/idle-detection/resources/idle-detection-disabled-by-permissions-policy-worker.js @@ -2,7 +2,7 @@ importScripts('/resources/testharness.js'); -const header = 'Feature-Policy header {"idle-detection" : []}'; +const header = 'Permissions-Policy header idle-detection=()'; let workerType; if (typeof postMessage === 'function') { diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/webtransport-h3.https.sub.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/webtransport-h3.https.sub.any.js.ini index ba4a1b69c07..7d3874e36c3 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/webtransport-h3.https.sub.any.js.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/webtransport-h3.https.sub.any.js.ini @@ -1,23 +1,29 @@ [webtransport-h3.https.sub.any.html] [WebTransport server should be running and should handle a bidirectional stream] expected: - if product == "chrome" and os != "mac": PASS + if product == "chrome": PASS + FAIL + +[webtransport-h3.https.sub.any.window.html] + [WebTransport server should be running and should handle a bidirectional stream] + expected: + if product == "chrome": PASS FAIL [webtransport-h3.https.sub.any.worker.html] [WebTransport server should be running and should handle a bidirectional stream] expected: - if product == "chrome" and os != "mac": PASS + if product == "chrome": PASS FAIL [webtransport-h3.https.sub.any.sharedworker.html] [WebTransport server should be running and should handle a bidirectional stream] expected: - if product == "chrome" and os != "mac": PASS + if product == "chrome": PASS FAIL [webtransport-h3.https.sub.any.serviceworker.html] [WebTransport server should be running and should handle a bidirectional stream] expected: - if product == "chrome" and os != "mac": PASS + if product == "chrome": PASS FAIL diff --git a/tests/wpt/web-platform-tests/layout-instability/resources/util.js b/tests/wpt/web-platform-tests/layout-instability/resources/util.js index 1b3c82d7d68..597e2d7d849 100644 --- a/tests/wpt/web-platform-tests/layout-instability/resources/util.js +++ b/tests/wpt/web-platform-tests/layout-instability/resources/util.js @@ -64,7 +64,7 @@ ScoreWatcher = function() { list.getEntries().forEach(entry => { this.lastEntry = entry; this.score += entry.value; - watcher_entry_record.push({startTime: entry.startTime, score: entry.value}); + watcher_entry_record.push({startTime: entry.startTime, score: entry.value, hadRecentInput : entry.hadRecentInput}); if (!entry.hadRecentInput) this.scoreWithInputExclusion += entry.value; this.resolve(); diff --git a/tests/wpt/web-platform-tests/loading/early-hints/preload-without-as.h2.window.js b/tests/wpt/web-platform-tests/loading/early-hints/preload-without-as.h2.window.js new file mode 100644 index 00000000000..bf77210e5f6 --- /dev/null +++ b/tests/wpt/web-platform-tests/loading/early-hints/preload-without-as.h2.window.js @@ -0,0 +1,10 @@ +// META: script=/common/utils.js +// META: script=resources/early-hints-helpers.sub.js + +test(() => { + const params = new URLSearchParams(); + params.set("resource-url", + SAME_ORIGIN_RESOURCES_URL + "/empty.js?" + token()); + const test_url = "resources/preload-without-as.h2.py?" + params.toString(); + window.location.replace(new URL(test_url, window.location)); +}); diff --git a/tests/wpt/web-platform-tests/loading/early-hints/resources/preload-without-as.h2.py b/tests/wpt/web-platform-tests/loading/early-hints/resources/preload-without-as.h2.py new file mode 100644 index 00000000000..d37a0a690a8 --- /dev/null +++ b/tests/wpt/web-platform-tests/loading/early-hints/resources/preload-without-as.h2.py @@ -0,0 +1,24 @@ +import os + + +def handle_headers(frame, request, response): + resource_url = request.GET.first(b"resource-url").decode() + link_header_value = "<{}>; rel=preload".format(resource_url) + early_hints = [ + (b":status", b"103"), + (b"link", link_header_value), + ] + response.writer.write_raw_header_frame(headers=early_hints, + end_headers=True) + + response.status = 200 + response.headers[b"content-type"] = "text/html" + response.write_status_headers() + + +def main(request, response): + current_dir = os.path.dirname(os.path.realpath(__file__)) + file_path = os.path.join(current_dir, "preload-without-as.html") + with open(file_path, "r") as f: + test_content = f.read() + response.writer.write_data(item=test_content, last=True) diff --git a/tests/wpt/web-platform-tests/loading/early-hints/resources/preload-without-as.html b/tests/wpt/web-platform-tests/loading/early-hints/resources/preload-without-as.html new file mode 100644 index 00000000000..f0473bd5053 --- /dev/null +++ b/tests/wpt/web-platform-tests/loading/early-hints/resources/preload-without-as.html @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/writing-mode/force-horizontal-tb.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/writing-mode/force-horizontal-tb.html new file mode 100644 index 00000000000..f867cffa228 --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/writing-mode/force-horizontal-tb.html @@ -0,0 +1,40 @@ + + + + +Forced writing-mode on MathML elements + + + + + + + + +
+
+ +
+ + + diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/writing-mode/reset-and-logicial-property-ref.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/writing-mode/reset-and-logicial-property-ref.html new file mode 100644 index 00000000000..6eae88efb16 --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/writing-mode/reset-and-logicial-property-ref.html @@ -0,0 +1,15 @@ + + + + + Reset writing-mode and logical property (reference) + + +

Test passes if you see a green square.

+ + + + + diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/writing-mode/reset-and-logicial-property.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/writing-mode/reset-and-logicial-property.html new file mode 100644 index 00000000000..939cfc5ba60 --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/writing-mode/reset-and-logicial-property.html @@ -0,0 +1,20 @@ + + + + + Reset writing-mode and logical property + + + + + +

Test passes if you see a green square.

+ + + + + + + diff --git a/tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/audio-upgrade.https.sub.html b/tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/audio-upgrade.https.sub.html index 0731ef69c15..4aeb183e3d7 100644 --- a/tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/audio-upgrade.https.sub.html +++ b/tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/audio-upgrade.https.sub.html @@ -4,6 +4,7 @@ Autoupgrade mixed content: Audio. + @@ -20,6 +21,20 @@ i.onerror = test.unreached_func("Audio should load successfully from " + url); i.src = url; } + // Test the same just with another host + async_test(t => assert_other_host_audio_loads(t), "Audio of other host autoupgraded"); + + function assert_other_host_audio_loads(test) { + // Since autoupgrades don't upgrade custom ports, we use the https port with an HTTP scheme. A successful autoupgrade will result in the right URL loading (and no autoupgrade will result in failure). + var otherHost = get_host_info().HTTP_NOTSAMESITE_ORIGIN.slice(0,-4); // cut of http port + var url = new URL( otherHost + "{{ports[https][0]}}/mixed-content/tentative/resources/test.wav") + var i = document.createElement('audio'); + i.oncanplaythrough = test.step_func_done(_ => { + assert_equals(i.duration, 1, "Length of other host audio is correct"); + }); + i.onerror = test.unreached_func("Audio of other host should load successfully from " + url); + i.src = url; + } diff --git a/tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/image-upgrade.https.sub.html b/tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/image-upgrade.https.sub.html index 03b5c3e69de..d63a71026ae 100644 --- a/tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/image-upgrade.https.sub.html +++ b/tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/image-upgrade.https.sub.html @@ -4,6 +4,7 @@ Autoupgrade mixed content: Optionally Blockable. + @@ -21,6 +22,22 @@ i.onerror = test.unreached_func("Image should load successfully from " + url); i.src = url; } + + // Test the same just with another host + async_test(t => assert_other_host_image_loads(t), "Image of other host autoupgraded"); + + function assert_other_host_image_loads(test) { + // Since autoupgrades don't upgrade custom ports, we use the https port with an HTTP scheme. A successful autoupgrade will result in the right URL loading (and no autoupgrade will result in failure). + var otherHost = get_host_info().HTTP_NOTSAMESITE_ORIGIN.slice(0,-4); // cut of http port + var url = new URL( otherHost + "{{ports[https][0]}}/mixed-content/tentative/resources/pass.png") + var i = document.createElement('img'); + i.onload = test.step_func_done(_ => { + assert_equals(i.naturalHeight, 64, "Height."); + assert_equals(i.naturalWidth, 168, "Width."); + }); + i.onerror = test.unreached_func("image of other host should load successfully from " + url); + i.src = url; + } diff --git a/tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/video-upgrade.https.sub.html b/tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/video-upgrade.https.sub.html index 45ec71848d0..ea2d07309c0 100644 --- a/tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/video-upgrade.https.sub.html +++ b/tests/wpt/web-platform-tests/mixed-content/tentative/autoupgrades/video-upgrade.https.sub.html @@ -4,6 +4,7 @@ Autoupgrade mixed content: Video. + @@ -20,6 +21,21 @@ i.onerror = test.unreached_func("Video should load successfully from " + url); i.src = url; } + + // Test the same just with another host + async_test(t => assert_other_host_video_loads(t), "Video of other host autoupgraded"); + + function assert_other_host_video_loads(test) { + // Since autoupgrades don't upgrade custom ports, we use the https port with an HTTP scheme. A successful autoupgrade will result in the right URL loading (and no autoupgrade will result in failure). + var otherHost = get_host_info().HTTP_NOTSAMESITE_ORIGIN.slice(0,-4); // cut of http port + var url = new URL( otherHost + "{{ports[https][0]}}/mixed-content/tentative/resources/test.ogv") + var i = document.createElement('video'); + i.oncanplaythrough = test.step_func_done(_ => { + assert_equals(Math.floor(i.duration), 300, "Length. Other host"); + }); + i.onerror = test.unreached_func("Video of other host should load successfully from " + url); + i.src = url; + } diff --git a/tests/wpt/web-platform-tests/navigation-api/navigate-event/navigate-destination-getState-reload.html b/tests/wpt/web-platform-tests/navigation-api/navigate-event/navigate-destination-getState-reload.html new file mode 100644 index 00000000000..b3afb72482c --- /dev/null +++ b/tests/wpt/web-platform-tests/navigation-api/navigate-event/navigate-destination-getState-reload.html @@ -0,0 +1,25 @@ + + + + diff --git a/tests/wpt/web-platform-tests/paint-timing/fcp-only/fcp-document-opacity-image.html b/tests/wpt/web-platform-tests/paint-timing/fcp-only/fcp-document-opacity-image.html index 7f211324761..e407f687086 100644 --- a/tests/wpt/web-platform-tests/paint-timing/fcp-only/fcp-document-opacity-image.html +++ b/tests/wpt/web-platform-tests/paint-timing/fcp-only/fcp-document-opacity-image.html @@ -39,9 +39,11 @@ promise_test(async t => { assert_equals(fcp_entries.length, 1, "Got an FCP entry"); const lcp_entries = await new Promise(resolve => {new PerformanceObserver((list) => resolve(list.getEntries())).observe({type: 'largest-contentful-paint', buffered: true})}); assert_equals(lcp_entries.length, 1, "Got an LCP entry"); - assert_less_than_equal(fcp_entries[0].startTime, lcp_entries[0].startTime, "LCP is not smaller than FCP"); + // TODO: Rewrite this assertion after the FCP and LCP precision alignment CL is landed. Currently FCP start time has a higher precision than that of LCP. That means, even if the two are intrinsically the same, FCP.startTime will be larger as it has more fractional digits. + isLess = fcp_entries[0].startTime < lcp_entries[0].startTime; + isEqualToMicrosecond = Math.abs(fcp_entries[0].startTime - lcp_entries[0].startTime) < 0.001; + assert_true(isLess || isEqualToMicrosecond, "FCP should be smaller than FCP."); }, "Test that FCP after opacity change is not a larger value than LCP"); - diff --git a/tests/wpt/web-platform-tests/performance-timeline/cross-origin-non-tao-image.sub.html b/tests/wpt/web-platform-tests/performance-timeline/cross-origin-non-tao-image.sub.html new file mode 100644 index 00000000000..210f4e1fa3e --- /dev/null +++ b/tests/wpt/web-platform-tests/performance-timeline/cross-origin-non-tao-image.sub.html @@ -0,0 +1,40 @@ + + +Largest Contentful Paint: Expose cross-origin non-TAO images renderTime. + + + + + + + diff --git a/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-battery.html b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-battery.html index dff4b3290d6..643d6a4ef5e 100644 --- a/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-battery.html +++ b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-battery.html @@ -2,8 +2,8 @@ 'use strict'; Promise.resolve().then(() => navigator.getBattery()).then(battery => { - window.parent.postMessage({ enabled: true }, '*'); + window.parent.postMessage({ type: 'availability-result', enabled: true }, '*'); }, error => { - window.parent.postMessage({ enabled: false }, '*'); + window.parent.postMessage({ type: 'availability-result', enabled: false }, '*'); }); diff --git a/tests/wpt/web-platform-tests/feature-policy/resources/feature-policy-geolocation.html b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-geolocation.html similarity index 72% rename from tests/wpt/web-platform-tests/feature-policy/resources/feature-policy-geolocation.html rename to tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-geolocation.html index 81943845447..c9ae680ff2d 100644 --- a/tests/wpt/web-platform-tests/feature-policy/resources/feature-policy-geolocation.html +++ b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-geolocation.html @@ -4,18 +4,20 @@ "use strict"; Promise.resolve().then(async () => { + test_driver.set_test_context(window.parent); await test_driver.set_permission( { name: "geolocation" }, "granted", false ); + let enabled = true; try { await new Promise((resolve, reject) => { navigator.geolocation.getCurrentPosition(resolve, reject); }); - window.parent.postMessage({ enabled: true }, "*"); } catch (e) { - window.parent.postMessage({ enabled: false }, "*"); + enabled = false; } + window.parent.postMessage({ type: "availability-result", enabled }, "*"); }); diff --git a/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-idle-detection-worker.js b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-idle-detection-worker.js index 2e4e3cdc727..0d348c72ae7 100644 --- a/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-idle-detection-worker.js +++ b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-idle-detection-worker.js @@ -6,9 +6,9 @@ if (typeof postMessage === 'function') { switch(event.data.type) { case 'ready': new IdleDetector().start().then(() => { - postMessage({ enabled: true }); + postMessage({ type: 'availability-result', enabled: true }); }, error => { - postMessage ({ enabled: false }); + postMessage ({ type: 'availability-result', enabled: false }); }); break; } diff --git a/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-idle-detection.html b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-idle-detection.html index 65a578181b9..f21a3851d16 100644 --- a/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-idle-detection.html +++ b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-idle-detection.html @@ -2,9 +2,9 @@ 'use strict'; new IdleDetector().start().then(() => { - window.parent.postMessage({ enabled: true }, '*'); + window.parent.postMessage({ type: 'availability-result', enabled: true }, '*'); }, error => { - window.parent.postMessage({ enabled: false }, '*'); + window.parent.postMessage({ type: 'availability-result', enabled: false }, '*'); }); diff --git a/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-serial-worker.js b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-serial-worker.js index 2e8e6f5433a..59bb6787ddf 100644 --- a/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-serial-worker.js +++ b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-serial-worker.js @@ -6,8 +6,8 @@ if (typeof postMessage === 'function') { switch(event.data.type) { case 'ready': navigator.serial.getPorts().then( - () => postMessage({ enabled: true }), - error => postMessage ({ enabled: false })); + () => postMessage({ type: 'availability-result', enabled: true }), + error => postMessage ({ type: 'availability-result', enabled: false })); break; } }; diff --git a/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-serial.html b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-serial.html index caf716d37ac..fe25f034826 100644 --- a/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-serial.html +++ b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-serial.html @@ -2,8 +2,8 @@ 'use strict'; navigator.serial.getPorts().then(ports => { - window.parent.postMessage({ enabled: true }, '*'); + window.parent.postMessage({ type: 'availability-result', enabled: true }, '*'); }, error => { - window.parent.postMessage({ enabled: false }, '*'); + window.parent.postMessage({ type: 'availability-result', enabled: false }, '*'); }); diff --git a/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-usb-worker.js b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-usb-worker.js index c294f14f3c6..97d96e7fb71 100644 --- a/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-usb-worker.js +++ b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-usb-worker.js @@ -6,9 +6,9 @@ if (typeof postMessage === 'function') { switch(event.data.type) { case 'ready': navigator.usb.getDevices().then( - () => postMessage({ enabled: true }), - error => postMessage ({ enabled: false })); + () => postMessage({ type: 'availability-result', enabled: true }), + error => postMessage ({ type: 'availability-result', enabled: false })); break; } }; -} \ No newline at end of file +} diff --git a/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-usb.html b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-usb.html index 99d47c6f392..8812ca7db9a 100644 --- a/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-usb.html +++ b/tests/wpt/web-platform-tests/permissions-policy/resources/permissions-policy-usb.html @@ -2,8 +2,8 @@ 'use strict'; Promise.resolve().then(() => navigator.usb.getDevices()).then(devices => { - window.parent.postMessage({ enabled: true }, '*'); + window.parent.postMessage({ type: 'availability-result', enabled: true }, '*'); }, error => { - window.parent.postMessage({ enabled: false }, '*'); + window.parent.postMessage({ type: 'availability-result', enabled: false }, '*'); }); diff --git a/tests/wpt/web-platform-tests/resources/declarative-shadow-dom-polyfill.js b/tests/wpt/web-platform-tests/resources/declarative-shadow-dom-polyfill.js new file mode 100644 index 00000000000..dfb0a1e053c --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/declarative-shadow-dom-polyfill.js @@ -0,0 +1,16 @@ +/* + * Polyfill for attaching shadow trees for declarative Shadow DOM for implementations that do not support + * declarative Shadow DOM. + * + * root: The root of the subtree to perform the attachments in + */ + +function polyfill_declarative_shadow_dom(root) { + root.querySelectorAll("template[shadowroot]").forEach(template => { + const mode = template.getAttribute("shadowroot"); + const shadowRoot = template.parentNode.attachShadow({ mode }); + shadowRoot.appendChild(template.content); + template.remove(); + polyfill_declarative_shadow_dom(shadowRoot); + }); +} diff --git a/tests/wpt/web-platform-tests/screen-capture/getdisplaymedia.https.html b/tests/wpt/web-platform-tests/screen-capture/getdisplaymedia.https.html index 426235a8420..095b98dea4c 100644 --- a/tests/wpt/web-platform-tests/screen-capture/getdisplaymedia.https.html +++ b/tests/wpt/web-platform-tests/screen-capture/getdisplaymedia.https.html @@ -267,4 +267,13 @@ test(() => { }); } +promise_test(async t => { + const stream = await getDisplayMedia({video: true}); + t.add_cleanup(() => stopTracks(stream)); + const capabilities = stream.getVideoTracks()[0].getCapabilities(); + assert_any( + assert_equals, capabilities.displaySurface, + ['monitor', 'window', 'browser']); +}, 'getDisplayMedia() with getCapabilities'); + diff --git a/tests/wpt/web-platform-tests/screen-orientation/hidden_document.html b/tests/wpt/web-platform-tests/screen-orientation/hidden_document.html index 6097cc9d28d..4d018a882a1 100644 --- a/tests/wpt/web-platform-tests/screen-orientation/hidden_document.html +++ b/tests/wpt/web-platform-tests/screen-orientation/hidden_document.html @@ -9,8 +9,9 @@ - - diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-document-scroller-quirks.html b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-document-scroller-quirks.html index 26f88255fae..1a9e6a2b3aa 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-document-scroller-quirks.html +++ b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-document-scroller-quirks.html @@ -16,8 +16,12 @@ #element { animation: anim forwards scroll(root); } + #spacer { + height: 200vh; + }
+
+ + + + + + +
+
+
+
+
+
+
+ + diff --git a/tests/wpt/web-platform-tests/serial/resources/serial-allowed-by-feature-policy-worker.js b/tests/wpt/web-platform-tests/serial/resources/serial-allowed-by-permissions-policy-worker.js similarity index 73% rename from tests/wpt/web-platform-tests/serial/resources/serial-allowed-by-feature-policy-worker.js rename to tests/wpt/web-platform-tests/serial/resources/serial-allowed-by-permissions-policy-worker.js index 46c338e9a33..cef0aacdfc3 100644 --- a/tests/wpt/web-platform-tests/serial/resources/serial-allowed-by-feature-policy-worker.js +++ b/tests/wpt/web-platform-tests/serial/resources/serial-allowed-by-permissions-policy-worker.js @@ -9,6 +9,6 @@ if (typeof postMessage === 'function') { } promise_test(() => navigator.serial.getPorts(), - `Inherited header feature policy allows ${workerType} workers.`); + `Inherited header permissions policy allows ${workerType} workers.`); done(); diff --git a/tests/wpt/web-platform-tests/serial/resources/serial-disabled-by-feature-policy-worker.js b/tests/wpt/web-platform-tests/serial/resources/serial-disabled-by-permissions-policy-worker.js similarity index 88% rename from tests/wpt/web-platform-tests/serial/resources/serial-disabled-by-feature-policy-worker.js rename to tests/wpt/web-platform-tests/serial/resources/serial-disabled-by-permissions-policy-worker.js index b64b1a861ec..afac4429748 100644 --- a/tests/wpt/web-platform-tests/serial/resources/serial-disabled-by-feature-policy-worker.js +++ b/tests/wpt/web-platform-tests/serial/resources/serial-disabled-by-permissions-policy-worker.js @@ -2,7 +2,7 @@ importScripts('/resources/testharness.js'); -const header = 'Feature-Policy header {"serial" : []}'; +const header = 'Permissions-Policy header serial=()'; let workerType; if (typeof postMessage === 'function') { diff --git a/tests/wpt/web-platform-tests/serial/serial-allowed-by-feature-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/serial/serial-allowed-by-feature-policy.https.sub.html.headers deleted file mode 100644 index 113ce29ae9f..00000000000 --- a/tests/wpt/web-platform-tests/serial/serial-allowed-by-feature-policy.https.sub.html.headers +++ /dev/null @@ -1 +0,0 @@ -Feature-Policy: serial * diff --git a/tests/wpt/web-platform-tests/serial/serial-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html b/tests/wpt/web-platform-tests/serial/serial-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub.html similarity index 79% rename from tests/wpt/web-platform-tests/serial/serial-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html rename to tests/wpt/web-platform-tests/serial/serial-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub.html index 7c3a88dd51f..ac278ff0cf0 100644 --- a/tests/wpt/web-platform-tests/serial/serial-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html +++ b/tests/wpt/web-platform-tests/serial/serial-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub.html @@ -2,20 +2,20 @@ - + - + diff --git a/tests/wpt/web-platform-tests/serial/serial-allowed-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/serial/serial-allowed-by-permissions-policy.https.sub.html similarity index 80% rename from tests/wpt/web-platform-tests/serial/serial-allowed-by-feature-policy.https.sub.html rename to tests/wpt/web-platform-tests/serial/serial-allowed-by-permissions-policy.https.sub.html index 36990694d19..1be8eb979f8 100644 --- a/tests/wpt/web-platform-tests/serial/serial-allowed-by-feature-policy.https.sub.html +++ b/tests/wpt/web-platform-tests/serial/serial-allowed-by-permissions-policy.https.sub.html @@ -3,16 +3,16 @@ - + diff --git a/tests/wpt/web-platform-tests/serial/serial-allowed-by-permissions-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/serial/serial-allowed-by-permissions-policy.https.sub.html.headers new file mode 100644 index 00000000000..27deb827582 --- /dev/null +++ b/tests/wpt/web-platform-tests/serial/serial-allowed-by-permissions-policy.https.sub.html.headers @@ -0,0 +1 @@ +Permissions-Policy: serial=* diff --git a/tests/wpt/web-platform-tests/serial/serial-default-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/serial/serial-default-permissions-policy.https.sub.html similarity index 76% rename from tests/wpt/web-platform-tests/serial/serial-default-feature-policy.https.sub.html rename to tests/wpt/web-platform-tests/serial/serial-default-permissions-policy.https.sub.html index 61a872f9b5c..e3908d92152 100644 --- a/tests/wpt/web-platform-tests/serial/serial-default-feature-policy.https.sub.html +++ b/tests/wpt/web-platform-tests/serial/serial-default-permissions-policy.https.sub.html @@ -2,13 +2,13 @@ - + - + diff --git a/tests/wpt/web-platform-tests/serial/serial-disabled-by-permissions-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/serial/serial-disabled-by-permissions-policy.https.sub.html.headers new file mode 100644 index 00000000000..690b6967513 --- /dev/null +++ b/tests/wpt/web-platform-tests/serial/serial-disabled-by-permissions-policy.https.sub.html.headers @@ -0,0 +1 @@ +Permissions-Policy: serial=() diff --git a/tests/wpt/web-platform-tests/shadow-dom/focus-navigation/resources/shadow-dom.js b/tests/wpt/web-platform-tests/shadow-dom/focus-navigation/resources/shadow-dom.js index 442fde241fa..83dfc0d6438 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/focus-navigation/resources/shadow-dom.js +++ b/tests/wpt/web-platform-tests/shadow-dom/focus-navigation/resources/shadow-dom.js @@ -25,7 +25,7 @@ function convertTemplatesToShadowRootsWithin(node) { var parent = template.parentNode; parent.removeChild(template); var shadowRoot; - if (!mode || mode == 'v0') { + if (!mode) { shadowRoot = parent.attachShadow({ mode: 'open' }); } else { shadowRoot = @@ -83,10 +83,7 @@ function createTestTree(node) { let parent = template.parentNode; parent.removeChild(template); let shadowRoot; - if (template.getAttribute('data-mode') === 'v0') { - // For legacy Shadow DOM - shadowRoot = parent.attachShadow({ mode: 'open' }); - } else if (template.getAttribute('data-slot-assignment') === 'manual') { + if (template.getAttribute('data-slot-assignment') === 'manual') { shadowRoot = parent.attachShadow({ mode: template.getAttribute('data-mode'), diff --git a/tests/wpt/web-platform-tests/soft-navigation-heuristics/navigation-api-back.tentative.html b/tests/wpt/web-platform-tests/soft-navigation-heuristics/navigation-api-back.tentative.html new file mode 100644 index 00000000000..cb96d9caf95 --- /dev/null +++ b/tests/wpt/web-platform-tests/soft-navigation-heuristics/navigation-api-back.tentative.html @@ -0,0 +1,45 @@ + + + + +Detect navigation.back() + + + + + + + +
+
+ Click me! +
+
+ + + + diff --git a/tests/wpt/web-platform-tests/soft-navigation-heuristics/navigation-api-forward.tentative.html b/tests/wpt/web-platform-tests/soft-navigation-heuristics/navigation-api-forward.tentative.html new file mode 100644 index 00000000000..f483ad376b6 --- /dev/null +++ b/tests/wpt/web-platform-tests/soft-navigation-heuristics/navigation-api-forward.tentative.html @@ -0,0 +1,48 @@ + + + + +Detect navigation.forward() + + + + + + + +
+
+ Click me! +
+
+ + + + + diff --git a/tests/wpt/web-platform-tests/soft-navigation-heuristics/navigation-api-preventDefault.tentative.html b/tests/wpt/web-platform-tests/soft-navigation-heuristics/navigation-api-preventDefault.tentative.html index 8fc159d28dc..d6c61efb3cb 100644 --- a/tests/wpt/web-platform-tests/soft-navigation-heuristics/navigation-api-preventDefault.tentative.html +++ b/tests/wpt/web-platform-tests/soft-navigation-heuristics/navigation-api-preventDefault.tentative.html @@ -16,16 +16,19 @@ diff --git a/tests/wpt/web-platform-tests/soft-navigation-heuristics/navigation-api-traverseto.tentative.html b/tests/wpt/web-platform-tests/soft-navigation-heuristics/navigation-api-traverseto.tentative.html new file mode 100644 index 00000000000..e4cabb095aa --- /dev/null +++ b/tests/wpt/web-platform-tests/soft-navigation-heuristics/navigation-api-traverseto.tentative.html @@ -0,0 +1,49 @@ + + + + +Detect navigation.traverseTo() + + + + + + + +
+
+ Click me! +
+
+ + + + + + diff --git a/tests/wpt/web-platform-tests/soft-navigation-heuristics/replacestate-null-then-push.tentative.html b/tests/wpt/web-platform-tests/soft-navigation-heuristics/replacestate-null-then-push.tentative.html new file mode 100644 index 00000000000..8a81c6be202 --- /dev/null +++ b/tests/wpt/web-platform-tests/soft-navigation-heuristics/replacestate-null-then-push.tentative.html @@ -0,0 +1,34 @@ + + + + +Detect soft navigation with replaceState that has a null URL, then + pushState with the URL. + + + + + + + +
+ Click me! +
+ + + + + diff --git a/tests/wpt/web-platform-tests/soft-navigation-heuristics/replacestate.tentative.html b/tests/wpt/web-platform-tests/soft-navigation-heuristics/replacestate.tentative.html new file mode 100644 index 00000000000..42e9a718997 --- /dev/null +++ b/tests/wpt/web-platform-tests/soft-navigation-heuristics/replacestate.tentative.html @@ -0,0 +1,28 @@ + + + + +Detect soft navigation with replaceState. + + + + + + + +
+ Click me! +
+ + + + diff --git a/tests/wpt/web-platform-tests/soft-navigation-heuristics/resources/soft-navigation-helper.js b/tests/wpt/web-platform-tests/soft-navigation-heuristics/resources/soft-navigation-helper.js index 08e9fd4a5b5..a24fe226423 100644 --- a/tests/wpt/web-platform-tests/soft-navigation-heuristics/resources/soft-navigation-helper.js +++ b/tests/wpt/web-platform-tests/soft-navigation-heuristics/resources/soft-navigation-helper.js @@ -58,22 +58,24 @@ const testNavigationApi = (testName, navigateEventHandler, link) => { }, testName); }; -const testNavigationApiNotDetected = - (testName, navigateEventHandler, link) => { - promise_test(async t => { - const preClickLcp = await getLcpEntries(); - navigation.addEventListener('navigate', navigateEventHandler); - click(link); - await new Promise((resolve, reject) => { - (new PerformanceObserver(() => reject())).observe({ - type: 'soft-navigation' - }); - t.step_timeout(resolve, 1000); +const testSoftNavigationNotDetected = options => { + promise_test(async t => { + const preClickLcp = await getLcpEntries(); + options.eventTarget.addEventListener(options.eventName, options.eventHandler); + click(options.link); + await new Promise((resolve, reject) => { + (new PerformanceObserver(() => + reject("Soft navigation should not be triggered"))).observe({ + type: 'soft-navigation', + buffered: true }); - assert_equals( - document.softNavigations, 0, 'Soft Navigation not detected'); - }, testName); - }; + t.step_timeout(resolve, 1000); + }); + assert_equals( + document.softNavigations, 0, 'Soft Navigation not detected'); + }, options.testName); + }; + const runEntryValidations = async preClickLcp => { await doubleRaf(); validatePaintEntries('first-contentful-paint'); @@ -109,14 +111,11 @@ const setEvent = (t, button, pushState, addContent, pushUrl, eventType) => { // Jump through a task, to ensure task tracking is working properly. await new Promise(r => t.step_timeout(r, 0)); - // Fetch some content - const response = await fetch("/soft-navigation-heuristics/resources/content.json"); - const json = await response.json(); - + const url = URL + "?" + counter; if (pushState) { // Change the URL if (pushUrl) { - pushState(URL + "?" + counter); + pushState(url); } else { pushState(); } @@ -125,7 +124,7 @@ const setEvent = (t, button, pushState, addContent, pushUrl, eventType) => { // Wait 10 ms to make sure the timestamps are correct. await new Promise(r => t.step_timeout(r, 10)); - await addContent(json); + await addContent(url); ++counter; clicked = true; diff --git a/tests/wpt/web-platform-tests/soft-navigation-heuristics/soft-navigation-no-url.tentative.html b/tests/wpt/web-platform-tests/soft-navigation-heuristics/soft-navigation-no-url.tentative.html index d1a11111e03..a0055c654c2 100644 --- a/tests/wpt/web-platform-tests/soft-navigation-heuristics/soft-navigation-no-url.tentative.html +++ b/tests/wpt/web-platform-tests/soft-navigation-heuristics/soft-navigation-no-url.tentative.html @@ -15,14 +15,16 @@ diff --git a/tests/wpt/web-platform-tests/speculation-rules/prerender/opt-out.html b/tests/wpt/web-platform-tests/speculation-rules/prerender/response-code-non-successful.html similarity index 60% rename from tests/wpt/web-platform-tests/speculation-rules/prerender/opt-out.html rename to tests/wpt/web-platform-tests/speculation-rules/prerender/response-code-non-successful.html index 3bfa00c6dc8..00701f1471e 100644 --- a/tests/wpt/web-platform-tests/speculation-rules/prerender/opt-out.html +++ b/tests/wpt/web-platform-tests/speculation-rules/prerender/response-code-non-successful.html @@ -10,22 +10,18 @@ diff --git a/tests/wpt/web-platform-tests/speculation-rules/prerender/response-code-successful.html b/tests/wpt/web-platform-tests/speculation-rules/prerender/response-code-successful.html new file mode 100644 index 00000000000..cc70b8c641d --- /dev/null +++ b/tests/wpt/web-platform-tests/speculation-rules/prerender/response-code-successful.html @@ -0,0 +1,27 @@ + +Check that successful responses result in activating the prerender + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/styling/presentation-attributes.js b/tests/wpt/web-platform-tests/svg/styling/presentation-attributes.js index 7bf77cb77bc..96d9568e3bd 100644 --- a/tests/wpt/web-platform-tests/svg/styling/presentation-attributes.js +++ b/tests/wpt/web-platform-tests/svg/styling/presentation-attributes.js @@ -356,6 +356,10 @@ function presentationAttributeIsSupported(element, attribute, value, property) { svg.append(e); let propertyValueBefore = getComputedStyle(e).getPropertyValue(property); e.setAttribute(attribute, value); + // Also set another attribute that is likely to be a presentation attribute, + // in order to provoke bugs. + const otherAttribute = attribute === 'stroke' ? 'fill' : 'stroke'; + e.setAttribute(otherAttribute, 'red'); let propertyValueAfter = getComputedStyle(e).getPropertyValue(property); e.remove(); return propertyValueBefore != propertyValueAfter; diff --git a/tests/wpt/web-platform-tests/tools/requirements_mypy.txt b/tests/wpt/web-platform-tests/tools/requirements_mypy.txt index 3bd5d316603..7948c203588 100644 --- a/tests/wpt/web-platform-tests/tools/requirements_mypy.txt +++ b/tests/wpt/web-platform-tests/tools/requirements_mypy.txt @@ -5,7 +5,7 @@ typed-ast==1.5.4 types-atomicwrites==1.4.5 types-python-dateutil==2.8.19 types-PyYAML==6.0.9 -types-requests==2.27.29 +types-requests==2.28.11.5 types-setuptools==63.2.3 types-six==1.16.19 types-ujson==4.2.1 diff --git a/tests/wpt/web-platform-tests/tools/serve/serve.py b/tests/wpt/web-platform-tests/tools/serve/serve.py index c017a6cf4de..6eba2153a14 100644 --- a/tests/wpt/web-platform-tests/tools/serve/serve.py +++ b/tests/wpt/web-platform-tests/tools/serve/serve.py @@ -573,6 +573,7 @@ class RoutesBuilder: ("*", "/.well-known/attribution-reporting/debug/report-event-attribution", handlers.PythonScriptHandler), ("*", "/.well-known/attribution-reporting/report-aggregate-attribution", handlers.PythonScriptHandler), ("*", "/.well-known/attribution-reporting/debug/report-aggregate-attribution", handlers.PythonScriptHandler), + ("*", "/.well-known/attribution-reporting/debug/verbose", handlers.PythonScriptHandler), ("*", "/.well-known/web-identity", handlers.PythonScriptHandler), ("*", "*.py", handlers.PythonScriptHandler), ("GET", "*", handlers.FileHandler) diff --git a/tests/wpt/web-platform-tests/tools/wpt/wpt.py b/tests/wpt/web-platform-tests/tools/wpt/wpt.py index 89cc97b99f2..74943a52f3b 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/wpt.py +++ b/tests/wpt/web-platform-tests/tools/wpt/wpt.py @@ -80,6 +80,10 @@ def parse_args(argv, commands=load_commands()): for command, props in commands.items(): subparsers.add_parser(command, help=props["help"], add_help=False) + if not argv: + parser.print_help() + return None, None + args, extra = parser.parse_known_args(argv) return args, extra @@ -189,6 +193,9 @@ def main(prog=None, argv=None): main_args, command_args = parse_args(argv, commands) + if not main_args: + return + command = main_args.command props = commands[command] venv = None diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py index d723912155d..5b590adf254 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py @@ -87,9 +87,7 @@ class Browser: """Abstract class serving as the basis for Browser implementations. The Browser is used in the TestRunnerManager to start and stop the browser - process, and to check the state of that process. This class also acts as a - context manager, enabling it to do browser-specific setup at the start of - the testrun and cleanup after the run is complete. + process, and to check the state of that process. :param logger: Structured logger to use for output. """ @@ -101,13 +99,6 @@ class Browser: def __init__(self, logger): self.logger = logger - def __enter__(self): - self.setup() - return self - - def __exit__(self, *args, **kwargs): - self.cleanup() - def setup(self): """Used for browser-specific setup that happens at the start of a test run""" pass diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py index ed290ae9642..0cb5f499a92 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py @@ -1,12 +1,13 @@ # mypy: allow-untyped-defs import hashlib +import itertools import json import os from urllib.parse import urlsplit from abc import ABCMeta, abstractmethod from queue import Empty -from collections import defaultdict, deque +from collections import defaultdict, deque, namedtuple from . import manifestinclude from . import manifestexpected @@ -359,24 +360,26 @@ def get_test_src(**kwargs): return test_source_cls, test_source_kwargs, chunker_kwargs +TestGroup = namedtuple("TestGroup", ["group", "test_type", "metadata"]) + + class TestSource: __metaclass__ = ABCMeta def __init__(self, test_queue): self.test_queue = test_queue - self.current_group = None - self.current_metadata = None + self.current_group = TestGroup(None, None, None) self.logger = structured.get_default_logger() if self.logger is None: self.logger = structured.structuredlog.StructuredLogger("TestSource") @abstractmethod #@classmethod (doesn't compose with @abstractmethod in < 3.3) - def make_queue(cls, tests, **kwargs): # noqa: N805 + def make_queue(cls, tests_by_type, **kwargs): # noqa: N805 pass @abstractmethod - def tests_by_group(cls, tests, **kwargs): # noqa: N805 + def tests_by_group(cls, tests_by_type, **kwargs): # noqa: N805 pass @classmethod @@ -384,42 +387,43 @@ class TestSource: return {"scope": "/"} def group(self): - if not self.current_group or len(self.current_group) == 0: + if not self.current_group.group or len(self.current_group.group) == 0: try: - self.current_group, self.current_metadata = self.test_queue.get(block=True, timeout=5) + self.current_group = self.test_queue.get(block=True, timeout=5) except Empty: self.logger.warning("Timed out getting test group from queue") - return None, None - return self.current_group, self.current_metadata + return TestGroup(None, None, None) + return self.current_group @classmethod def add_sentinal(cls, test_queue, num_of_workers): # add one sentinal for each worker for _ in range(num_of_workers): - test_queue.put((None, None)) + test_queue.put(TestGroup(None, None, None)) class GroupedSource(TestSource): @classmethod - def new_group(cls, state, test, **kwargs): + def new_group(cls, state, test_type, test, **kwargs): raise NotImplementedError @classmethod - def make_queue(cls, tests, **kwargs): + def make_queue(cls, tests_by_type, **kwargs): mp = mpcontext.get_context() test_queue = mp.Queue() groups = [] state = {} - for test in tests: - if cls.new_group(state, test, **kwargs): - group_metadata = cls.group_metadata(state) - groups.append((deque(), group_metadata)) + for test_type, tests in tests_by_type.items(): + for test in tests: + if cls.new_group(state, test_type, test, **kwargs): + group_metadata = cls.group_metadata(state) + groups.append(TestGroup(deque(), test_type, group_metadata)) - group, metadata = groups[-1] - group.append(test) - test.update_metadata(metadata) + group, _, metadata = groups[-1] + group.append(test) + test.update_metadata(metadata) for item in groups: test_queue.put(item) @@ -427,51 +431,57 @@ class GroupedSource(TestSource): return test_queue @classmethod - def tests_by_group(cls, tests, **kwargs): + def tests_by_group(cls, tests_by_type, **kwargs): groups = defaultdict(list) state = {} current = None - for test in tests: - if cls.new_group(state, test, **kwargs): - current = cls.group_metadata(state)['scope'] - groups[current].append(test.id) + for test_type, tests in tests_by_type.items(): + for test in tests: + if cls.new_group(state, test_type, test, **kwargs): + current = cls.group_metadata(state)['scope'] + groups[current].append(test.id) return groups class SingleTestSource(TestSource): @classmethod - def make_queue(cls, tests, **kwargs): + def make_queue(cls, tests_by_type, **kwargs): mp = mpcontext.get_context() test_queue = mp.Queue() - processes = kwargs["processes"] - queues = [deque([]) for _ in range(processes)] - metadatas = [cls.group_metadata(None) for _ in range(processes)] - for test in tests: - idx = hash(test.id) % processes - group = queues[idx] - metadata = metadatas[idx] - group.append(test) - test.update_metadata(metadata) + for test_type, tests in tests_by_type.items(): + processes = kwargs["processes"] + queues = [deque([]) for _ in range(processes)] + metadatas = [cls.group_metadata(None) for _ in range(processes)] + for test in tests: + idx = hash(test.id) % processes + group = queues[idx] + metadata = metadatas[idx] + group.append(test) + test.update_metadata(metadata) - for item in zip(queues, metadatas): - test_queue.put(item) + for item in zip(queues, itertools.repeat(test_type), metadatas): + if len(item[0]) > 0: + test_queue.put(TestGroup(*item)) cls.add_sentinal(test_queue, kwargs["processes"]) return test_queue @classmethod - def tests_by_group(cls, tests, **kwargs): - return {cls.group_metadata(None)['scope']: [t.id for t in tests]} + def tests_by_group(cls, tests_by_type, **kwargs): + return {cls.group_metadata(None)['scope']: + [t.id for t in itertools.chain.from_iterable(tests_by_type.values())]} class PathGroupedSource(GroupedSource): @classmethod - def new_group(cls, state, test, **kwargs): + def new_group(cls, state, test_type, test, **kwargs): depth = kwargs.get("depth") if depth is True or depth == 0: depth = None path = urlsplit(test.url).path.split("/")[1:-1][:depth] - rv = path != state.get("prev_path") + rv = (test_type != state.get("prev_test_type") or + path != state.get("prev_path")) + state["prev_test_type"] = test_type state["prev_path"] = path return rv @@ -482,36 +492,38 @@ class PathGroupedSource(GroupedSource): class GroupFileTestSource(TestSource): @classmethod - def make_queue(cls, tests, **kwargs): - tests_by_group = cls.tests_by_group(tests, **kwargs) - - ids_to_tests = {test.id: test for test in tests} - + def make_queue(cls, tests_by_type, **kwargs): mp = mpcontext.get_context() test_queue = mp.Queue() - for group_name, test_ids in tests_by_group.items(): - group_metadata = {"scope": group_name} - group = deque() + for test_type, tests in tests_by_type.items(): + tests_by_group = cls.tests_by_group({test_type: tests}, + **kwargs) - for test_id in test_ids: - test = ids_to_tests[test_id] - group.append(test) - test.update_metadata(group_metadata) + ids_to_tests = {test.id: test for test in tests} - test_queue.put((group, group_metadata)) + for group_name, test_ids in tests_by_group.items(): + group_metadata = {"scope": group_name} + group = deque() + + for test_id in test_ids: + test = ids_to_tests[test_id] + group.append(test) + test.update_metadata(group_metadata) + + test_queue.put(TestGroup(group, test_type, group_metadata)) cls.add_sentinal(test_queue, kwargs["processes"]) return test_queue @classmethod - def tests_by_group(cls, tests, **kwargs): + def tests_by_group(cls, tests_by_type, **kwargs): logger = kwargs["logger"] test_groups = kwargs["test_groups"] tests_by_group = defaultdict(list) - for test in tests: + for test in itertools.chain.from_iterable(tests_by_type.values()): try: group = test_groups.group_by_test[test.id] except KeyError: diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py index b3cae56fbf3..61af18c15b1 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py @@ -24,6 +24,11 @@ def release_mozlog_lock(): pass +TestImplementation = namedtuple('TestImplementation', + ['executor_cls', 'executor_kwargs', + 'browser_cls', 'browser_kwargs']) + + class LogMessageHandler: def __init__(self, send_message): self.send_message = send_message @@ -247,9 +252,11 @@ class BrowserManager: class _RunnerManagerState: before_init = namedtuple("before_init", []) initializing = namedtuple("initializing", - ["test", "test_group", "group_metadata", "failure_count"]) - running = namedtuple("running", ["test", "test_group", "group_metadata"]) - restarting = namedtuple("restarting", ["test", "test_group", "group_metadata", "force_stop"]) + ["test_type", "test", "test_group", + "group_metadata", "failure_count"]) + running = namedtuple("running", ["test_type", "test", "test_group", "group_metadata"]) + restarting = namedtuple("restarting", ["test_type", "test", "test_group", + "group_metadata", "force_stop"]) error = namedtuple("error", []) stop = namedtuple("stop", ["force_stop"]) @@ -258,10 +265,11 @@ RunnerManagerState = _RunnerManagerState() class TestRunnerManager(threading.Thread): - def __init__(self, suite_name, index, test_type, test_queue, test_source_cls, browser_cls, - browser_kwargs, executor_cls, executor_kwargs, stop_flag, rerun=1, - pause_after_test=False, pause_on_unexpected=False, restart_on_unexpected=True, - debug_info=None, capture_stdio=True, restart_on_new_group=True, recording=None): + def __init__(self, suite_name, index, test_queue, test_source_cls, + test_implementation_by_type, stop_flag, rerun=1, + pause_after_test=False, pause_on_unexpected=False, + restart_on_unexpected=True, debug_info=None, + capture_stdio=True, restart_on_new_group=True, recording=None): """Thread that owns a single TestRunner process and any processes required by the TestRunner (e.g. the Firefox binary). @@ -282,16 +290,22 @@ class TestRunnerManager(threading.Thread): self.test_source = test_source_cls(test_queue) self.manager_number = index - self.test_type = test_type - self.browser_cls = browser_cls - self.browser_kwargs = browser_kwargs.copy() - if self.browser_kwargs.get("device_serial"): - # Assign Android device to runner according to current manager index - self.browser_kwargs["device_serial"] = ( - self.browser_kwargs["device_serial"][index]) + self.test_type = None - self.executor_cls = executor_cls - self.executor_kwargs = executor_kwargs + self.test_implementation_by_type = {} + for test_type, test_implementation in test_implementation_by_type.items(): + kwargs = test_implementation.browser_kwargs + if kwargs.get("device_serial"): + kwargs = kwargs.copy() + # Assign Android device to runner according to current manager index + kwargs["device_serial"] = kwargs["device_serial"][index] + self.test_implementation_by_type[test_type] = TestImplementation( + test_implementation.executor_cls, + test_implementation.executor_kwargs, + test_implementation.browser_cls, + kwargs) + else: + self.test_implementation_by_type[test_type] = test_implementation mp = mpcontext.get_context() @@ -345,54 +359,52 @@ class TestRunnerManager(threading.Thread): spins.""" self.recording.set(["testrunner", "startup"]) self.logger = structuredlog.StructuredLogger(self.suite_name) - with self.browser_cls(self.logger, remote_queue=self.command_queue, - **self.browser_kwargs) as browser: - self.browser = BrowserManager(self.logger, - browser, - self.command_queue, - no_timeout=self.debug_info is not None) - dispatch = { - RunnerManagerState.before_init: self.start_init, - RunnerManagerState.initializing: self.init, - RunnerManagerState.running: self.run_test, - RunnerManagerState.restarting: self.restart_runner, - } + dispatch = { + RunnerManagerState.before_init: self.start_init, + RunnerManagerState.initializing: self.init, + RunnerManagerState.running: self.run_test, + RunnerManagerState.restarting: self.restart_runner, + } - self.state = RunnerManagerState.before_init() - end_states = (RunnerManagerState.stop, - RunnerManagerState.error) + self.state = RunnerManagerState.before_init() + end_states = (RunnerManagerState.stop, + RunnerManagerState.error) - try: - while not isinstance(self.state, end_states): - f = dispatch.get(self.state.__class__) - while f: - self.logger.debug("Dispatch %s" % f.__name__) - if self.should_stop(): - return - new_state = f() - if new_state is None: - break - self.state = new_state - self.logger.debug("new state: %s" % self.state.__class__.__name__) - if isinstance(self.state, end_states): - return - f = dispatch.get(self.state.__class__) - - new_state = None - while new_state is None: - new_state = self.wait_event() - if self.should_stop(): - return + try: + while not isinstance(self.state, end_states): + f = dispatch.get(self.state.__class__) + while f: + self.logger.debug(f"Dispatch {f.__name__}") + if self.should_stop(): + return + new_state = f() + if new_state is None: + break self.state = new_state - self.logger.debug("new state: %s" % self.state.__class__.__name__) - except Exception: - self.logger.error(traceback.format_exc()) - raise - finally: - self.logger.debug("TestRunnerManager main loop terminating, starting cleanup") - force_stop = not isinstance(self.state, RunnerManagerState.stop) or self.state.force_stop - self.stop_runner(force=force_stop) - self.teardown() + self.logger.debug(f"new state: {self.state.__class__.__name__}") + if isinstance(self.state, end_states): + return + f = dispatch.get(self.state.__class__) + + new_state = None + while new_state is None: + new_state = self.wait_event() + if self.should_stop(): + return + self.state = new_state + self.logger.debug(f"new state: {self.state.__class__.__name__}") + except Exception: + self.logger.error(traceback.format_exc()) + raise + finally: + self.logger.debug("TestRunnerManager main loop terminating, starting cleanup") + force_stop = (not isinstance(self.state, RunnerManagerState.stop) or + self.state.force_stop) + self.stop_runner(force=force_stop) + self.teardown() + if self.browser is not None: + assert self.browser.browser is not None + self.browser.browser.cleanup() self.logger.debug("TestRunnerManager main loop terminated") def wait_event(self): @@ -422,7 +434,8 @@ class TestRunnerManager(threading.Thread): self.logger.debug("Got command: %r" % command) except OSError: self.logger.error("Got IOError from poll") - return RunnerManagerState.restarting(self.state.test, + return RunnerManagerState.restarting(self.state.test_type, + self.state.test, self.state.test_group, self.state.group_metadata, False) @@ -450,7 +463,8 @@ class TestRunnerManager(threading.Thread): self.logger.critical("Last test did not complete") return RunnerManagerState.error() self.logger.warning("More tests found, but runner process died, restarting") - return RunnerManagerState.restarting(self.state.test, + return RunnerManagerState.restarting(self.state.test_type, + self.state.test, self.state.test_group, self.state.group_metadata, False) @@ -467,12 +481,12 @@ class TestRunnerManager(threading.Thread): return self.child_stop_flag.is_set() or self.parent_stop_flag.is_set() def start_init(self): - test, test_group, group_metadata = self.get_next_test() + test_type, test, test_group, group_metadata = self.get_next_test() self.recording.set(["testrunner", "init"]) if test is None: return RunnerManagerState.stop(True) else: - return RunnerManagerState.initializing(test, test_group, group_metadata, 0) + return RunnerManagerState.initializing(test_type, test, test_group, group_metadata, 0) def init(self): assert isinstance(self.state, RunnerManagerState.initializing) @@ -480,19 +494,33 @@ class TestRunnerManager(threading.Thread): self.logger.critical("Max restarts exceeded") return RunnerManagerState.error() + if self.state.test_type != self.test_type: + if self.browser is not None: + assert self.browser.browser is not None + self.browser.browser.cleanup() + impl = self.test_implementation_by_type[self.state.test_type] + browser = impl.browser_cls(self.logger, remote_queue=self.command_queue, + **impl.browser_kwargs) + browser.setup() + self.browser = BrowserManager(self.logger, + browser, + self.command_queue, + no_timeout=self.debug_info is not None) + self.test_type = self.state.test_type + + assert self.browser is not None self.browser.update_settings(self.state.test) result = self.browser.init(self.state.group_metadata) if result is Stop: return RunnerManagerState.error() elif not result: - return RunnerManagerState.initializing(self.state.test, + return RunnerManagerState.initializing(self.state.test_type, + self.state.test, self.state.test_group, self.state.group_metadata, self.state.failure_count + 1) else: - self.executor_kwargs["group_metadata"] = self.state.group_metadata - self.executor_kwargs["browser_settings"] = self.browser.browser_settings self.start_test_runner() def start_test_runner(self): @@ -503,6 +531,11 @@ class TestRunnerManager(threading.Thread): assert self.command_queue is not None assert self.remote_queue is not None self.logger.info("Starting runner") + impl = self.test_implementation_by_type[self.state.test_type] + self.executor_cls = impl.executor_cls + self.executor_kwargs = impl.executor_kwargs + self.executor_kwargs["group_metadata"] = self.state.group_metadata + self.executor_kwargs["browser_settings"] = self.browser.browser_settings executor_browser_cls, executor_browser_kwargs = self.browser.browser.executor_browser() args = (self.remote_queue, @@ -527,7 +560,8 @@ class TestRunnerManager(threading.Thread): def init_succeeded(self): assert isinstance(self.state, RunnerManagerState.initializing) self.browser.after_init() - return RunnerManagerState.running(self.state.test, + return RunnerManagerState.running(self.state.test_type, + self.state.test, self.state.test_group, self.state.group_metadata) @@ -536,22 +570,25 @@ class TestRunnerManager(threading.Thread): self.browser.check_crash(None) self.browser.after_init() self.stop_runner(force=True) - return RunnerManagerState.initializing(self.state.test, + return RunnerManagerState.initializing(self.state.test_type, + self.state.test, self.state.test_group, self.state.group_metadata, self.state.failure_count + 1) - def get_next_test(self, test_group=None): + def get_next_test(self): + # returns test_type, test, test_group, group_metadata test = None + test_group = None while test is None: while test_group is None or len(test_group) == 0: - test_group, group_metadata = self.test_source.group() + test_group, test_type, group_metadata = self.test_source.group() if test_group is None: self.logger.info("No more tests") - return None, None, None + return None, None, None, None test = test_group.popleft() self.run_count = 0 - return test, test_group, group_metadata + return test_type, test, test_group, group_metadata def run_test(self): assert isinstance(self.state, RunnerManagerState.running) @@ -559,7 +596,8 @@ class TestRunnerManager(threading.Thread): if self.browser.update_settings(self.state.test): self.logger.info("Restarting browser for new test environment") - return RunnerManagerState.restarting(self.state.test, + return RunnerManagerState.restarting(self.state.test_type, + self.state.test, self.state.test_group, self.state.group_metadata, False) @@ -718,26 +756,34 @@ class TestRunnerManager(threading.Thread): # that as long as we've done at least the automatic run count in total we can # continue with the next test. if not force_rerun and self.run_count >= self.rerun: - test, test_group, group_metadata = self.get_next_test() + test_type, test, test_group, group_metadata = self.get_next_test() if test is None: return RunnerManagerState.stop(force_stop) - if self.restart_on_new_group and test_group is not self.state.test_group: + if test_type != self.state.test_type: + self.logger.info(f"Restarting browser for new test type:{test_type}") + restart = True + elif self.restart_on_new_group and test_group is not self.state.test_group: self.logger.info("Restarting browser for new test group") restart = True else: + test_type = self.state.test_type test_group = self.state.test_group group_metadata = self.state.group_metadata if restart: - return RunnerManagerState.restarting(test, test_group, group_metadata, force_stop) + return RunnerManagerState.restarting( + test_type, test, test_group, group_metadata, force_stop) else: - return RunnerManagerState.running(test, test_group, group_metadata) + return RunnerManagerState.running( + test_type, test, test_group, group_metadata) def restart_runner(self): """Stop and restart the TestRunner""" assert isinstance(self.state, RunnerManagerState.restarting) self.stop_runner(force=self.state.force_stop) - return RunnerManagerState.initializing(self.state.test, self.state.test_group, self.state.group_metadata, 0) + return RunnerManagerState.initializing( + self.state.test_type, self.state.test, + self.state.test_group, self.state.group_metadata, 0) def log(self, data): self.logger.log_raw(data) @@ -854,8 +900,7 @@ def make_test_queue(tests, test_source_cls, **test_source_kwargs): class ManagerGroup: """Main thread object that owns all the TestRunnerManager threads.""" def __init__(self, suite_name, size, test_source_cls, test_source_kwargs, - browser_cls, browser_kwargs, - executor_cls, executor_kwargs, + test_implementation_by_type, rerun=1, pause_after_test=False, pause_on_unexpected=False, @@ -868,10 +913,7 @@ class ManagerGroup: self.size = size self.test_source_cls = test_source_cls self.test_source_kwargs = test_source_kwargs - self.browser_cls = browser_cls - self.browser_kwargs = browser_kwargs - self.executor_cls = executor_cls - self.executor_kwargs = executor_kwargs + self.test_implementation_by_type = test_implementation_by_type self.pause_after_test = pause_after_test self.pause_on_unexpected = pause_on_unexpected self.restart_on_unexpected = restart_on_unexpected @@ -894,25 +936,18 @@ class ManagerGroup: def __exit__(self, exc_type, exc_val, exc_tb): self.stop() - def run(self, test_type, tests): + def run(self, tests): """Start all managers in the group""" self.logger.debug("Using %i processes" % self.size) - if not tests: - self.logger.info("No %s tests to run" % test_type) - return test_queue = make_test_queue(tests, self.test_source_cls, **self.test_source_kwargs) for idx in range(self.size): manager = TestRunnerManager(self.suite_name, idx, - test_type, test_queue, self.test_source_cls, - self.browser_cls, - self.browser_kwargs, - self.executor_cls, - self.executor_kwargs, + self.test_implementation_by_type, self.stop_flag, self.rerun, self.pause_after_test, diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py index 207d7328b97..e879925a38b 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py @@ -3,6 +3,7 @@ import json import os import sys +from collections import defaultdict from datetime import datetime, timedelta import wptserve @@ -18,7 +19,7 @@ from . import wptlogging from . import wpttest from mozlog import capture, handlers from .font import FontInstaller -from .testrunner import ManagerGroup +from .testrunner import ManagerGroup, TestImplementation here = os.path.dirname(__file__) @@ -158,13 +159,13 @@ def run_test_iteration(test_status, test_loader, test_source_kwargs, test_source recording, test_environment, product, run_test_kwargs): """Runs the entire test suite. This is called for each repeat or retry run requested.""" - tests = [] + tests_by_type = defaultdict(list) for test_type in test_loader.test_types: - tests.extend(test_loader.tests[test_type]) + tests_by_type[test_type].extend(test_loader.tests[test_type]) try: test_groups = test_source_cls.tests_by_group( - tests, **test_source_kwargs) + tests_by_type, **test_source_kwargs) except Exception: logger.critical("Loading tests failed") return False @@ -174,14 +175,23 @@ def run_test_iteration(test_status, test_loader, test_source_kwargs, test_source test_groups[test_type] = [test for test in tests if test in test_status.unexpected_tests] - unexpected_tests = set() logger.suite_start(test_groups, name='web-platform-test', run_info=run_info, extra={"run_by_dir": run_test_kwargs["run_by_dir"]}) - for test_type in sorted(run_test_kwargs["test_types"]): - logger.info(f"Running {test_type} tests") + test_implementation_by_type = {} + + for test_type in run_test_kwargs["test_types"]: + executor_cls = product.executor_classes.get(test_type) + if executor_cls is None: + logger.warning(f"Unsupported test type {test_type} for product {product.name}") + continue + executor_kwargs = product.get_executor_kwargs(logger, + test_type, + test_environment, + run_info, + **run_test_kwargs) browser_cls = product.get_browser_cls(test_type) browser_kwargs = product.get_browser_kwargs(logger, test_type, @@ -189,17 +199,14 @@ def run_test_iteration(test_status, test_loader, test_source_kwargs, test_source config=test_environment.config, num_test_groups=len(test_groups), **run_test_kwargs) + test_implementation_by_type[test_type] = TestImplementation(executor_cls, + executor_kwargs, + browser_cls, + browser_kwargs) - executor_cls = product.executor_classes.get(test_type) - executor_kwargs = product.get_executor_kwargs(logger, - test_type, - test_environment, - run_info, - **run_test_kwargs) - - if executor_cls is None: - logger.error(f"Unsupported test type {test_type} for product {product.name}") - continue + tests_to_run = {} + for test_type, test_implementation in test_implementation_by_type.items(): + executor_cls = test_implementation.executor_cls for test in test_loader.disabled_tests[test_type]: logger.test_start(test.id) @@ -207,53 +214,50 @@ def run_test_iteration(test_status, test_loader, test_source_kwargs, test_source test_status.skipped += 1 if test_type == "testharness": - tests_to_run = [] - for test in test_loader.tests["testharness"]: + tests_to_run[test_type] = [] + for test in test_loader.tests[test_type]: if ((test.testdriver and not executor_cls.supports_testdriver) or (test.jsshell and not executor_cls.supports_jsshell)): logger.test_start(test.id) logger.test_end(test.id, status="SKIP") test_status.skipped += 1 else: - tests_to_run.append(test) + tests_to_run[test_type].append(test) else: - tests_to_run = test_loader.tests[test_type] - if test_status.retries_remaining: - tests_to_run = [test for test in tests_to_run - if test.id in test_status.unexpected_tests] + tests_to_run[test_type] = test_loader.tests[test_type] - recording.pause() - with ManagerGroup("web-platform-tests", - run_test_kwargs["processes"], - test_source_cls, - test_source_kwargs, - browser_cls, - browser_kwargs, - executor_cls, - executor_kwargs, - run_test_kwargs["rerun"], - run_test_kwargs["pause_after_test"], - run_test_kwargs["pause_on_unexpected"], - run_test_kwargs["restart_on_unexpected"], - run_test_kwargs["debug_info"], - not run_test_kwargs["no_capture_stdio"], - run_test_kwargs["restart_on_new_group"], - recording=recording) as manager_group: - try: - manager_group.run(test_type, tests_to_run) - except KeyboardInterrupt: - logger.critical("Main thread got signal") - manager_group.stop() - raise - test_status.total_tests += manager_group.test_count() - test_status.unexpected += manager_group.unexpected_count() - test_status.unexpected_pass += manager_group.unexpected_pass_count() - unexpected_tests.update(manager_group.unexpected_tests()) + if test_status.retries_remaining: + tests_to_run[test_type] = [test for test in tests_to_run[test_type] + if test.id in test_status.unexpected_tests] + + recording.pause() + with ManagerGroup("web-platform-tests", + run_test_kwargs["processes"], + test_source_cls, + test_source_kwargs, + test_implementation_by_type, + run_test_kwargs["rerun"], + run_test_kwargs["pause_after_test"], + run_test_kwargs["pause_on_unexpected"], + run_test_kwargs["restart_on_unexpected"], + run_test_kwargs["debug_info"], + not run_test_kwargs["no_capture_stdio"], + run_test_kwargs["restart_on_new_group"], + recording=recording) as manager_group: + try: + manager_group.run(tests_to_run) + except KeyboardInterrupt: + logger.critical("Main thread got signal") + manager_group.stop() + raise + test_status.total_tests += manager_group.test_count() + test_status.unexpected += manager_group.unexpected_count() + test_status.unexpected_pass += manager_group.unexpected_pass_count() if test_status.repeated_runs == 1: - test_status.unexpected_tests = unexpected_tests + test_status.unexpected_tests = manager_group.unexpected_tests() else: - test_status.unexpected_tests &= unexpected_tests + test_status.unexpected_tests &= manager_group.unexpected_tests() return True diff --git a/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-getAttributeType-namespace.tentative.html b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-getAttributeType-namespace.tentative.html new file mode 100644 index 00000000000..0f0d820e289 --- /dev/null +++ b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-getAttributeType-namespace.tentative.html @@ -0,0 +1,62 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-metadata.tentative.html b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-metadata.tentative.html index a5fe7864b12..70a5b446661 100644 --- a/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-metadata.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-metadata.tentative.html @@ -136,6 +136,13 @@ if (type == expected_type || !expected_type) { test_fn(); assert_equals("" + element.getAttribute(property), "" + value); + } else if (elem == "script" && (property == "innerText" || + property == "textContent" || property == "text")) { + // Due to the "slot setting" mechnanism, setting script's innerText, + // textContent and text attributes dosn't throw. So we can't use + // that in our tests. + // ref: https://w3c.github.io/trusted-types/dist/spec/#setting-slot-values + test_fn(); } else { assert_throws_js(TypeError, test_fn, "throws"); } diff --git a/tests/wpt/web-platform-tests/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html b/tests/wpt/web-platform-tests/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html index 148581df4da..78562419841 100644 --- a/tests/wpt/web-platform-tests/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html +++ b/tests/wpt/web-platform-tests/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html @@ -90,7 +90,7 @@ const iframe = await loadIframe( t, crossOriginSrc, - `web-share=("${crossOrigin}")` + `web-share ${crossOrigin}` ); iframe.contentWindow.postMessage( { action: "canShare", data: shareData }, diff --git a/tests/wpt/web-platform-tests/webcodecs/idlharness.https.any.js b/tests/wpt/web-platform-tests/webcodecs/idlharness.https.any.js new file mode 100644 index 00000000000..3e343374536 --- /dev/null +++ b/tests/wpt/web-platform-tests/webcodecs/idlharness.https.any.js @@ -0,0 +1,53 @@ +// META: global=window,dedicatedworker +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js +// META: script=./utils.js +// META: timeout=long + +'use strict'; + +var defaultCodecInit = { + output: function() { + assert_unreached("unexpected output"); + }, + error: function() { + assert_unreached("unexpected error"); + }, +} + +var defaultAudioChunkInit = { + type: 'key', + timestamp: 1234, + duration: 9876, + data: new Uint8Array([5, 6, 7, 8]) +}; + +var defaultVideoChunkInit = { + type: 'key', + timestamp: 1234, + duration: 5678, + data: new Uint8Array([9, 10, 11, 12]) +}; + +idl_test( + ['webcodecs'], + ['webidl'], + async idlArray => { + self.imageBody = await fetch('four-colors.png').then(response => response.arrayBuffer()); + + idlArray.add_objects({ + AudioDecoder: [`new AudioDecoder(defaultCodecInit)`], + VideoDecoder: [`new VideoDecoder(defaultCodecInit)`], + AudioEncoder: [`new AudioEncoder(defaultCodecInit)`], + VideoEncoder: [`new VideoEncoder(defaultCodecInit)`], + EncodedAudioChunk: [`new EncodedAudioChunk(defaultAudioChunkInit)`], + EncodedVideoChunk: [`new EncodedVideoChunk(defaultVideoChunkInit)`], + AudioData: [`make_audio_data(1234, 2, 8000, 100)`], + VideoFrame: [`new VideoFrame(makeImageBitmap(32,16), {timestamp:100, duration:33})`], + VideoColorSpace: [`new VideoColorSpace()`], + ImageDecoder: [`new ImageDecoder({data: self.imageBody, type: 'image/png'})`], + ImageTrackList: [`new ImageDecoder({data: self.imageBody, type: 'image/png'}).tracks`], + ImageTrack: [`new ImageDecoder({data: self.imageBody, type: 'image/png'}).tracks[0]`], + }); + } +); diff --git a/tests/wpt/web-platform-tests/webcodecs/video-frame-serialization.any.js b/tests/wpt/web-platform-tests/webcodecs/video-frame-serialization.any.js index 9ce6b88ef01..02dbad18210 100644 --- a/tests/wpt/web-platform-tests/webcodecs/video-frame-serialization.any.js +++ b/tests/wpt/web-platform-tests/webcodecs/video-frame-serialization.any.js @@ -110,3 +110,28 @@ async_test(t => { t.done(); }, 'Verify posting closed frames throws.'); + +promise_test(async t => { + const open = indexedDB.open('VideoFrameTestDB', 1); + open.onerror = t.unreached_func('open should succeed'); + open.onupgradeneeded = (event) => { + let db = event.target.result; + db.createObjectStore('MyVideoFrames', { keyPath: 'id' }); + }; + let db = await new Promise((resolve) => { + open.onsuccess = (e) => { + resolve(e.target.result); + }; + }); + t.add_cleanup(() => { + db.close(); + indexedDB.deleteDatabase(db.name); + }); + + let transaction = db.transaction(['MyVideoFrames'], 'readwrite'); + const store = transaction.objectStore('MyVideoFrames'); + let frame = createDefaultVideoFrame(); + assert_throws_dom("DataCloneError", () => { + store.add(frame); + }); +}, 'Verify storing a frame throws.'); diff --git a/tests/wpt/web-platform-tests/webcodecs/videoColorSpace.any.js b/tests/wpt/web-platform-tests/webcodecs/videoColorSpace.any.js new file mode 100644 index 00000000000..3af828a5bdf --- /dev/null +++ b/tests/wpt/web-platform-tests/webcodecs/videoColorSpace.any.js @@ -0,0 +1,47 @@ +// META: global=window,dedicatedworker + +const VIDEO_COLOR_SPACE_SETS = { + primaries: ['bt709', 'bt470bg', 'smpte170m', 'bt2020', 'smpte432'], + transfer: ['bt709', 'smpte170m', 'iec61966-2-1', 'linear', 'pq', 'hlg'], + matrix: ['rgb', 'bt709', 'bt470bg', 'smpte170m', 'bt2020-ncl'], + fullRange: [true, false], +}; + +function generateAllCombinations() { + const keys = Object.keys(VIDEO_COLOR_SPACE_SETS); + let colorSpaces = []; + generateAllCombinationsHelper(keys, 0, {}, colorSpaces); + return colorSpaces; +} + +function generateAllCombinationsHelper(keys, keyIndex, colorSpace, results) { + if (keyIndex >= keys.length) { + // Push the copied object since the colorSpace will be reused. + results.push(Object.assign({}, colorSpace)); + return; + } + + const prop = keys[keyIndex]; + // case 1: Skip this property. + generateAllCombinationsHelper(keys, keyIndex + 1, colorSpace, results); + // case 2: Set this property with a valid value. + for (const val of VIDEO_COLOR_SPACE_SETS[prop]) { + colorSpace[prop] = val; + generateAllCombinationsHelper(keys, keyIndex + 1, colorSpace, results); + delete colorSpace[prop]; + } +} + +test(t => { + let colorSpaces = generateAllCombinations(); + for (const colorSpace of colorSpaces) { + let vcs = new VideoColorSpace(colorSpace); + let json = vcs.toJSON(); + for (const k of Object.keys(json)) { + assert_equals( + json[k], + colorSpace.hasOwnProperty(k) ? colorSpace[k] : null + ); + } + } +}, 'Test VideoColorSpace toJSON() works.'); diff --git a/tests/wpt/web-platform-tests/webrtc-stats/hardware-capability-stats.https.html b/tests/wpt/web-platform-tests/webrtc-stats/hardware-capability-stats.https.html index eb56344e594..1cd3a370c37 100644 --- a/tests/wpt/web-platform-tests/webrtc-stats/hardware-capability-stats.https.html +++ b/tests/wpt/web-platform-tests/webrtc-stats/hardware-capability-stats.https.html @@ -26,12 +26,12 @@ function getStatEntry(report, type, kind) { return for_kind[0]; } -async function hasSentAndReceivedVideoPackets(pc, t) { +async function hasEncodedAndDecodedFrames(pc, t) { while (true) { const report = await pc.getStats(); const inboundRtp = getStatEntry(report, 'inbound-rtp', 'video'); const outboundRtp = getStatEntry(report, 'outbound-rtp', 'video'); - if (inboundRtp.packetsReceived > 0 && outboundRtp.packetsSent > 0) { + if (inboundRtp.framesDecoded > 0 && outboundRtp.framesEncoded > 0) { return; } // Avoid any stats caching, which can otherwise make this an infinite loop. @@ -53,7 +53,7 @@ async function setupPcAndGetStatEntry( exchangeIceCandidates(pc1, pc2); await exchangeOfferAnswer(pc1, pc2); - await hasSentAndReceivedVideoPackets(pc1, t); + await hasEncodedAndDecodedFrames(pc1, t); const report = await pc1.getStats(); return getStatEntry(report, type, kind); } diff --git a/tests/wpt/web-platform-tests/webusb/resources/usb-allowed-by-feature-policy-worker.js b/tests/wpt/web-platform-tests/webusb/resources/usb-allowed-by-permissions-policy-worker.js similarity index 73% rename from tests/wpt/web-platform-tests/webusb/resources/usb-allowed-by-feature-policy-worker.js rename to tests/wpt/web-platform-tests/webusb/resources/usb-allowed-by-permissions-policy-worker.js index 99ac97e28b0..d06a5864743 100644 --- a/tests/wpt/web-platform-tests/webusb/resources/usb-allowed-by-feature-policy-worker.js +++ b/tests/wpt/web-platform-tests/webusb/resources/usb-allowed-by-permissions-policy-worker.js @@ -9,6 +9,6 @@ if (typeof postMessage === 'function') { } promise_test(() => navigator.usb.getDevices(), - `Inherited header feature policy allows ${workerType} workers.`); + `Inherited header permissions policy allows ${workerType} workers.`); done(); diff --git a/tests/wpt/web-platform-tests/webusb/resources/usb-disabled-by-feature-policy-worker.js b/tests/wpt/web-platform-tests/webusb/resources/usb-disabled-by-permissions-policy-worker.js similarity index 88% rename from tests/wpt/web-platform-tests/webusb/resources/usb-disabled-by-feature-policy-worker.js rename to tests/wpt/web-platform-tests/webusb/resources/usb-disabled-by-permissions-policy-worker.js index 59349560ad1..caf2727cd13 100644 --- a/tests/wpt/web-platform-tests/webusb/resources/usb-disabled-by-feature-policy-worker.js +++ b/tests/wpt/web-platform-tests/webusb/resources/usb-disabled-by-permissions-policy-worker.js @@ -2,7 +2,7 @@ importScripts('/resources/testharness.js'); -const header = 'Feature-Policy header {"usb" : []}'; +const header = 'Permissions-Policy header usb=()'; let workerType; if (typeof postMessage === 'function') { diff --git a/tests/wpt/web-platform-tests/webusb/usb-allowed-by-feature-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/webusb/usb-allowed-by-feature-policy.https.sub.html.headers deleted file mode 100644 index 5c7eac0d623..00000000000 --- a/tests/wpt/web-platform-tests/webusb/usb-allowed-by-feature-policy.https.sub.html.headers +++ /dev/null @@ -1 +0,0 @@ -Feature-Policy: usb * diff --git a/tests/wpt/web-platform-tests/webusb/usb-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html b/tests/wpt/web-platform-tests/webusb/usb-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub.html similarity index 79% rename from tests/wpt/web-platform-tests/webusb/usb-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html rename to tests/wpt/web-platform-tests/webusb/usb-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub.html index e0757feeb2d..013efd9b4db 100644 --- a/tests/wpt/web-platform-tests/webusb/usb-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html +++ b/tests/wpt/web-platform-tests/webusb/usb-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub.html @@ -2,20 +2,20 @@ - + - + diff --git a/tests/wpt/web-platform-tests/webusb/usb-allowed-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/webusb/usb-allowed-by-permissions-policy.https.sub.html similarity index 80% rename from tests/wpt/web-platform-tests/webusb/usb-allowed-by-feature-policy.https.sub.html rename to tests/wpt/web-platform-tests/webusb/usb-allowed-by-permissions-policy.https.sub.html index 831cb42cab6..e1461fe8e69 100644 --- a/tests/wpt/web-platform-tests/webusb/usb-allowed-by-feature-policy.https.sub.html +++ b/tests/wpt/web-platform-tests/webusb/usb-allowed-by-permissions-policy.https.sub.html @@ -2,16 +2,16 @@ - + diff --git a/tests/wpt/web-platform-tests/webusb/usb-allowed-by-permissions-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/webusb/usb-allowed-by-permissions-policy.https.sub.html.headers new file mode 100644 index 00000000000..022b027812a --- /dev/null +++ b/tests/wpt/web-platform-tests/webusb/usb-allowed-by-permissions-policy.https.sub.html.headers @@ -0,0 +1 @@ +Permissions-Policy: usb=* diff --git a/tests/wpt/web-platform-tests/webusb/usb-default-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/webusb/usb-default-permissions-policy.https.sub.html similarity index 76% rename from tests/wpt/web-platform-tests/webusb/usb-default-feature-policy.https.sub.html rename to tests/wpt/web-platform-tests/webusb/usb-default-permissions-policy.https.sub.html index 34dda528012..5a9ddcb4fe7 100644 --- a/tests/wpt/web-platform-tests/webusb/usb-default-feature-policy.https.sub.html +++ b/tests/wpt/web-platform-tests/webusb/usb-default-permissions-policy.https.sub.html @@ -2,13 +2,13 @@ - + - + diff --git a/tests/wpt/web-platform-tests/webusb/usb-disabled-by-permissions-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/webusb/usb-disabled-by-permissions-policy.https.sub.html.headers new file mode 100644 index 00000000000..ff22d62f104 --- /dev/null +++ b/tests/wpt/web-platform-tests/webusb/usb-disabled-by-permissions-policy.https.sub.html.headers @@ -0,0 +1 @@ +Permissions-Policy: usb=() diff --git a/tests/wpt/web-platform-tests/webusb/usb-supported-by-feature-policy.html b/tests/wpt/web-platform-tests/webusb/usb-supported-by-permissions-policy.html similarity index 65% rename from tests/wpt/web-platform-tests/webusb/usb-supported-by-feature-policy.html rename to tests/wpt/web-platform-tests/webusb/usb-supported-by-permissions-policy.html index d5b585a094f..8e6352116d3 100644 --- a/tests/wpt/web-platform-tests/webusb/usb-supported-by-feature-policy.html +++ b/tests/wpt/web-platform-tests/webusb/usb-supported-by-permissions-policy.html @@ -1,7 +1,7 @@ Test that usb is advertised in the feature list - - + +